1 / 26

CS361

Week 2 - Wednesday. CS361. What did we talk about last time?. More XNA examples Graphics rendering pipeline Application stage Geometry stage Rasterizer stage Application stage Input and non-graphical output Texture animation Animation via transforms Collision detection

rufus
Download Presentation

CS361

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. Week 2 - Wednesday CS361

  2. What did we talk about last time? • More XNA examples • Graphics rendering pipeline • Application stage • Geometry stage • Rasterizer stage • Application stage • Input and non-graphical output • Texture animation • Animation via transforms • Collision detection • Updating the state of the world in general • Outputs geometric primitives

  3. Questions?

  4. Project 1

  5. Graphics rendering pipeline • For API design, practical top-down problem solving, and hardware design, and efficiency, rendering is described as a pipeline • This pipeline contains three conceptual stages:

  6. Student Lecture: Geometry Stage

  7. Geometry Stage

  8. Geometry stage • The output of the Application Stage is polygons • The Geometry Stage processes these polygons using the following pipeline:

  9. Model Transform • Each 3D model has its own coordinate system called model space • When combining all the models in a scene together, the models must be converted from model space to world space • After that, we still have to account for the position of the camera

  10. Model and View Transform • We transform the models into camera space or eye space with a view transform • Then, the camera will sit at (0,0,0), looking into negative z • The z-axis comes out of the screen in the book's examples and in XNA (but not in older DirectX)

  11. Vertex Shading • Figuring out the effect of light on a material is called shading • This involves computing a (sometimes complex) shading equation at different points on an object • Typically, information is computed on a per-vertex basis and may include: • Location • Normals • Colors

  12. Projection • Projection transforms the view volume into a standardized unit cube • Vertices then have a 2D location and a z-value • There are two common forms of projection: • Orthographic: Parallel lines stay parallel, objects do not get smaller in the distance • Perspective: The farther away an object is, the smaller it appears

  13. Clipping • Clipping process the polygons based on their location relative to the view volume • A polygon completely inside the view volume is unchanged • A polygon completely outside the view volume is ignored (not rendered) • A polygon partially inside is clipped • New vertices on the boundary of the volume are created • Since everything has been transformed into a unit cube, dedicated hardware can do the clipping in exactly the same way, every time

  14. Screen mapping • Screen-mapping transforms the x and y coordinates of each polygon from the unit cube to screen coordinates • A few oddities: • XNA has weird coordinate systems for pixels where the location is the center of the pixel • XNA conforms to the Windows standard of pixel (0,0) being in the upper left of the screen • OpenGL conforms to the Cartesian system with pixel (0,0) in the lower left of the screen

  15. 3D Rendering in XNA

  16. Drawing a model • We're going to start by drawing a 3D model • Eventually, we'll go back and create our own primitives • Like other XNA content, the easiest way to manage it is to add it to your Content project • XNA can load .x and .fbx files • I'm using Helicopter.fbx and HelicopterTexture.png • http://rbwhitaker.wdfiles.com/local--files/model-library/Helicopter.zip

  17. Loading a model • First, we declare a member variable to hold the model • Then we load the model in the LoadContent() method Model model; model = Content.Load<Model>("Helicopter");

  18. Setting up the matrices • To draw anything in 3D, we need a world matrix, a view matrix and a projection matrix • You'll need these repeatedly, so store them as members Matrix world = Matrix.CreateTranslation(newVector3(0, 0, 0)); Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, 10), new Vector3(0, 0, 0), Vector3.UnitY); Matrix projection = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(45), 800f / 480f, 0.1f, 100f);

  19. What do those matrices mean? • The world matrix controls how the model is translated, scaled, and rotated with respect to the global coordinate system • This code makes a matrix that moves the model 0 units in x, 0 units in y, and 0 units in z • In other words, it does nothing Matrix world = Matrix.CreateTranslation(newVector3(0, 0, 0));

  20. And the view matrix? • The view matrix sets up the orientation of the camera • The easiest way to do so is to give • Camera location • What the camera is pointed at • Which way is up • This camera is at (0, 0, 10), looking at the origin, with positive y as up Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, 10), new Vector3(0, 0, 0), Vector3.UnitY);

  21. And projection? • The projection matrix determines how the scene is projected into 2D • It can be specified with • Field of view in radians • Aspect ratio of screen (width / height) • Near plane location • Far plane location Matrix projection = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(45), 800f / 480f, 0.1f, 100f);

  22. Drawing • Drawing the model is done by drawing all the individual meshes that make it up • Each mesh has a series of effects • Effects are used for texture mapping, visual appearance, and other things • They need to know the world, view, and projection matrices foreach(ModelMesh mesh inmodel.Meshes) { foreach(BasicEffect effect inmesh.Effects) { effect.World= world; effect.View= view; effect.Projection= projection; } mesh.Draw(); }

  23. Quiz

  24. Upcoming

  25. Next time… • Rendering pipeline • Rasterizer stage

  26. Reminders • Keep reading Chapter 2

More Related