- By
**rufus** - Follow User

- 125 Views
- Uploaded on

Download Presentation
## PowerPoint Slideshow about ' CS361' - rufus

**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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

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

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:

Geometry stage

- The output of the Application Stage is polygons
- The Geometry Stage processes these polygons using the following pipeline:

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

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)

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

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

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

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

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

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");

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);

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));

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);

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);

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();

}

Next time…

- Rendering pipeline
- Rasterizer stage

Reminders

- Keep reading Chapter 2

Download Presentation

Connecting to Server..