1 / 29

Announcements

Announcements. Prototype submissions will be directly from SVN on Gforge We will just grab your last commit before due date Has to work (always maintain a working build on SVN) Evaluation Criteria Working game Milestones for individual members Commenting (SVN logs and in code)

scot
Download Presentation

Announcements

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Announcements • Prototype submissions will be directly from SVN on Gforge • We will just grab your last commit before due date • Has to work (always maintain a working build on SVN) Evaluation Criteria Working game Milestones for individual members Commenting (SVN logs and in code) Daily logs

  2. 2D to 3D • Many current games use 3D graphics • Much more complex than 2D graphics • This course will provide a basic overview of 3D graphics • CMPS 160, 161, 164 provide greater depth Ratchet and Clank

  3. 3D Camera • Analogy • 2D is like putting stickers on a page • Place sticker (sprite) at x,y coordinate • If a sticker is placed at 50,50, you see it • 3D is like recording a video with a camera • What is recorded (shown on screen) is what camera sees • Can have objects in a scene that aren’t visible • Can have 3D object at 50,50,50, but if camera is pointing in the opposite direction, won’t see it! • Introduces rotation • Camera can potentially be rotated around all 3 axes • Objects can also be rotated around 3 axes • Affects what shows up on screen

  4. 3D Coordinate System • 3D graphics requires use of x,y,z coordinates • So, which direction is positive z? • Is it back away from you, or towards you? • Either choice would work, need to pick one • Right handed vs left handed coordinate systems • XNA uses right handed coordinate system • Place hands, palms up • Point fingers in direction of positive X • Curl fingers in direction of positive Y • Thumb is pointing in direction of positive Z Right-handed coordinate system

  5. Camera • Camera is comprised of two Matrix objects • View matrix holds information on • Location of camera in world • Camera direction • Camera orientation • Projection matrix holds information on • View angle • Aspect ratio • Near and far plane Direction Location (x,y,z) Orientation

  6. Matrix Structure • XNA provides a Matrix structure • A 4x4 matrix, in row vector layout • Row vector matrices view vectors as a row from left to right • column vector matrices view vectors as a column from top to bottom • Built-in matrix operations • +, -, *, /, == • Also, convenience matrices • Identity, Up, Down, Left, Right • Large number of convenience methods • Rotations, views into 3D world, determinants, invert

  7. Vector3 Structure • Represents either: • An X, Y, Z coordinate, or, • Distances along X, Y, Z coordinates (e.g., a vector) • Often a unit vector • all values between 0 and 1 • X, Y, Z properties (floats) • Built-in operators • +, -, *, /, ==, != • Convenience vectors • UnitX, UnitY, UnitZ, Up, Down, Left, Right • Many convenience methods • Interpolations, rotations, distance, dot product, normalization (x,y,z) coordinate y (x,y,z) vector x z

  8. Creating an XNA Camera – View Matrix • View matrix • Use CreateLookAt method of Matrix structure • Parameters (all Vector3) • cameraPosition – location of camera (x,y,z) • cameraTarget – coordinate of point where camera is looking • cameraUpVector – vector indicating up position cameraUpVector cameraTarget (x,y,z) cameraPosition (x,y,z)

  9. Creating an XNA Camera – Projection Matrix • Projection Matrix • Use CreatePerspectiveFieldOfView method • Parameters (all floats) • fieldOfView – angle of camera view, in radians • Typically 45degrees – pi/2 radians • aspectRatio • Typically width of screen divided by height of screen • nearPlaneDistance • Distance from camera to near viewing plane • Objects between camera and near plane are not shown! • farPlaneDistance • Distance from camera to far viewing plane • Objects beyond far plane are not shown! cameraPosition (x,y,z)

  10. Drawing Triangles • All complex 3D shapes seen in games are composed of a series of triangles • A triangle has 3 points, one for each corner • Points are more typically known as verticies • Minimum number of points to unambiguously define a plane • VertexPositionColor object • Represents the x,y,z location of a vertex • Also has a color for the vertex • VertexPositionColorv = new VertexPositionColor(new Vector3(0,1,0), Color.Blue); • Need 3 verticies to draw a triangle

  11. Vertex Declaration • XNA requires you to tell the graphics device what kind of vertex data you will be using • Was unclear why XNA couldn’t figure this out in 3.0, or handle multiple types seamlessly and is has been improved in 4.0 • Probably due to structure of DirectX API, or capabilities of graphics hardware • For now, treat as a must-do, black box • Put following in your main, derived from Game class • GraphicsDevice.VertextDeclaration = new VertexDeclaration(VertexPositionColor.VertexElements); • IVertexType implementation

  12. Actually drawing the triangles • In XNA, all 3D rendering is handled by a shader • Shaders defined using High Level Shader Language (HLSL) • Permits creation of wide range of visual effects • More on shaders in a few classes • XNA provides a default shader • Called BasicEffect • Will use this for now • BasicEffect is a type of effect • Effects contain a series of EffectPass • Each pass handles some aspect of putting things on screen

  13. Using Basic shader • Five steps • Create Shader • Copy over camera information • Iterate through EffectPasses • Examine source code from example in Chapter 9 of XNA 3.0

  14. Using Basic shader Five steps: • Create Shader • BasicEffect effect = new BasicEffect(GraphicsDevice, null); • Copy over camera information • effect.View = camera.view; • effect.Projection = camera.projection; • Set world matrix • effect.World = …(more on this in a few slides) • Enable vertex capabilities (varies by Vertex type) • Effect.VertexColorEnabled = true; // for VertexPositionColor • Effect.Texture = myTexture; // for VertexPositionTextureEffect.TextureEnabled = true; • Iterate through EffectPasses • Call to DrawUserPrimitives inside EffectPass puts triangles on screen

  15. Iterating Through Effect Passes • Each Effect has calls to begin()/end() • Effects are comprised of passes • Each pass requires a call to begin()/end() effect.Begin(); foreach (EffectPass pass in effect.CurrentTechnique.Passes) { pass.Begin(); GraphicsDevice.DrawUserPrimitives<VertexPositionColor> (PrimitiveType.TriangleStrip, verts, 0, 1); pass.End(); } effect.End(); Passes Draws verticies # of triangles (the “primitive shape” in this context) to draw Index into verts array

  16. Triangle Drawing • Examine this line of code • GraphicsDevice.DrawUserPrimitives<VertexPositionColor> (PrimitiveType.TriangleStrip, verts, 0, 1); • What is a TriangleStrip? • Three ways to draw triangles • Triangle List • Each set of three verticies defines a triangle • Memory inefficient, since triangles often share edges in complex 3D meshes • Triangle Strip • Builds triangle out of first three verticies • Each additional vertex creates new triangle using that vertex, plus previous two verticies • Triangle Fan • Each additional vertex creates new triable using that vertex, the previous vertex, plus the first vertex http://escience.anu.edu.au/lecture/cg/surfaceModeling/image/surfaceModeling015.png

  17. World Matrix • Each triangle has 3 verticies, and each vertex has an x,y,z position • This position is given with respect to an origin location • That is, location is with respect to a local coordinate system • World matrix • Translates from the local coordinate system to the world (i.e., visible on screen) coordinate system local world Local coordinate system offset, no rotation(Note: example uses left handed coordinate system, XNA uses right-handed coordinates) Source: MSDN DirectX documentation Local coordinate system offset and rotatedwww1.adept.com/main/KE/DATA/V%20Plus/V%20Language%20User/images/World+yaw.gif

  18. Translation • A translation shifts the local coordinate system relative to the world coordinate system • XNA provides a method for this • Matrix.CreateTranslation • 3 parameters are x,y,z movements • Matrix.CreateTranslation(0.01f, 0, 0); // Shift right (positive) along x axis • Matrix.CreateTranslation(-0.01f, 0, 0); // Shift left (negative) along x axis • Multiply world matrix by translation matrix to cause shift • All translations and rotations in 3D graphics accomplished via matrix multiplication

  19. Rotation • A rotation shifts the local coordinate system by an angle relative to the world coordinate system • XNA helper methods • Matrix.CreateRotationX, Matrix.CreateRotationY, Matrix.CreateRotationZ • Rotations around single axes • Matrix.CreateRotationY(angle in radians); • Matrix.CreateFromYawPitchRoll • Rotate around multiple axes • Matrix.CreateFromYawPitchRoll(yaw rad., pitch rad., roll rad.) • Demonstration of example triangle drawing code

  20. Triangles are fine, but models are better • Today’s 3D games have a large number of objects • Theoretically possible to create these objects by manually writing C# code to create each individual triangle • In practice, this is rarely done. • Far better to use a 3D modeling tool • Maya, XSI, 3DS Max, Blender • Allows artists to create objects in world • Allows programmers to focus on behavior of objects • Modeling tools permit much faster creation and editing of models

  21. 3D Modeling • Several ways to model a 3D object • Polygonal modeling • Objects are subdivided into a series of polygons (triangles) • Can only approximate curved surfaces • Dominant modeling form in computer games and computer graphics due to speed of rendering • NURBS • Surfaces are defined by spline curves • Curves defined and controlled by control points • Splines and patches • Curved lines define surfaces. Between polygons and NURBS • Primitives modeling • Objects built up from primitive shapes (balls, cubes, cylinders, etc.)

  22. 3D Model formats • There is a huge number of 3D model formats • No dominant standard • Interchange among models is often lossy • XNA supports two 3D model formats • .X (DirectX) • .FBX • Originally for FilmBox by Kaydara, then Alias, now Autodesk

  23. Models in XNA • Model • Represents some entity • A person, a car, or potentially a complex scene with many parts • Typically used to represent one logical object (e.g., a person) that has multiple parts (head, arms, legs, etc.) • A model contains multiple meshes and bones • Mesh • Represents a single physical object • Triangles, textures, shaders, etc. • XNA ModelMesh class • Bone • Represents placement of each mesh relative to other meshes • A transformation matrix Model 1 1 N N ModelMesh Bone Car Body+bone Wheel+bone Door +bone

  24. Models in XNA (cont’d) Model 1 1 • ModelMesh contains: • List of ModelMeshPart • List of Effects • Verticies for triangles that comprise this mesh • VertexBuffer • Also has a bounding sphere • ModelMeshPart • Represents a set of triangles that share the same materials (e.g., shader, or Effect) • Has indexes into the ModelMesh • Starting index, number of triangles, number of primitives to use from parent ModelMesh’s VertexBuffer N N ModelMesh Bone 1 1 1 N 1 N Effect VertexBuffer ModelMeshPart 1 1 1 1 1 N 1 1 StartIndexNumVerticiesPrimitiveCount Effect Verticies

  25. Working with Models in XNA • Bring model into XNA project inside Visual Studio • Load model into XNA via Content manager • Draw model by iterating through all contained meshes

  26. Importing Models into Visual Studio • Import model into Content directory • Copy .x or .fbx file, along with associated texture images, into Content directory in XNA project • Inside Visual C#, right-click on Content directory • Add… Add Existing Item • Select .x or .fbx file • Similar process to adding bitmap textures, etc.

  27. Loading Model via Content manager • Models are loaded via the content manager • Model model = Content.Load<Model>(@”{name of my model without .x or .fbx extension}”) • XNA parses the model file, and fills in verticies, textures, and effects in Model, and ModelMeshes • In XNA, this is a robust operation, big time savings • In many open source 3D game engines, model import can be a big problem • At present, typically is not safe to assume model import will work smoothly in a given 3D game engine • Need to test your tool chain

  28. Drawing a Model • Iterate through all of the meshes • Iterate through each effect for each mesh • Set lighting, camera, and world for each effect • Draw each mesh using Draw() method on ModelMesh class foreach (ModelMesh mesh in model.Meshes) { foreach (BasicEffect be in mesh.Effects) { be.EnableDefaultLighting(); be.Projection = camera.projection; be.View = camera.view; be.World = world * mesh.ParentBone.Transform; } mesh.Draw(); } • Examine example code from Chapter 10 of Learning XNA 3.0

  29. More on Models • Explanation of parts of XNA models • http://blogs.msdn.com/shawnhar/archive/2006/11/20/models-meshes-parts-and-bones.aspx

More Related