triangles, translations game design experience professor jim whitehead march 2, 2009 creative...

14
Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Post on 21-Dec-2015

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Triangles, Translations

Game Design Experience

Professor Jim Whitehead

March 2, 2009

Creative Commons Attribution 3.0(Except copyrighted images)creativecommons.org/licenses/by/3.0

Page 2: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Announcements

• Project progress report► Due Today

• In class, or in my box by 5pm

► Take your project work breakdown and schedule (done previously)

• Update this schedule based on your (now improved) understanding of what still needs to be done

• Cut project scope, if necessary• Remember, you have assignments due in other classes too

• Days until Final Project Due: 14► Due Monday, March 16

Page 3: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Announcements

• 3D modeling homework► Assignment text not yet on web► Will be up soon► Due Monday, March 9► Assignment will involve:

• Create a simple 3D model (e.g., in Blender)– Something slightly (but not by much) more complex than a

cube will be fine• Make this model show up in XNA• Extra credit for making model rotate, applying bitmap textures• Goal is to exercise a model import pathway

► Intended to be a straightforward assignment

Page 4: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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

Page 5: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Vertex Structures in XNA

• XNA has 4 different structures for representing verticies► VertexPositionColor

• Useful for basic shapes, basic colors

• x,y,z plus a color for each vertex► VertexPositionTexture

• Overlay a bitmap texture onto a shape

• x,y,z plus a u,v coordinate into a bitmap texture► VertexPositionNormalTexture

• Normal permits lighting effects

• x,y,z plus a u,v, coordinate, plus a normal vector► VertexPositionColorTexture

• Color information changes color of bitmap texture

• Reuse same texture in different contexts

• x,y,z plus u,v plus color

Page 6: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

VertexPositionColor

• VertexPositionColor object► Represents the x,y,z location of a vertex► Also has a color for the vertex

► VertexPositionColor v = new VertexPositionColor(new Vector3(0,1,0), Color.Blue);

► Need 3 verticies to draw a triangle

Page 7: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Vertex Declaration

• XNA requires you to tell the graphics device what kind of vertex data you will be using

► Vertex data is written directly to the GPU► Need to tell the GPU how to interpret the data it receives► GraphicsDevice.VertexDeclaration = new

VertexDeclaration(GraphicsDevice, VertexPositionColor.VertexElements);

• For different types of verticies, would change the vertex structure

► VertexPositionTexture example:► GraphicsDevice.VertexDeclaration = new

VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);

Page 8: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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

Page 9: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Using Basic shader

Five steps:1. Create Shader

► BasicEffect effect = new BasicEffect(GraphicsDevice, null);2. Copy over camera information

► effect.View = camera.view;► effect.Projection = camera.projection;

3. Set world matrix► effect.World = … (more on this in a few slides)

4. Enable vertex capabilities (varies by Vertex type)► Effect.VertexColorEnabled = true; // for VertexPositionColor► Effect.Texture = myTexture; // for

VertexPositionTextureEffect.TextureEnabled = true;

5. Iterate through EffectPasses► Call to DrawUserPrimitives inside EffectPass puts triangles on

screen

Page 10: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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

Draws verticiesPasses

# of triangles (the “primitive shape” in this context) to draw

Index into verts array

Page 11: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

Triangle Drawing

• Examine this line of code► GraphicsDevice.DrawUserPrimitives<Vert

exPositionColor>

(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

Page 12: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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

local

world

Page 13: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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

Page 14: Triangles, Translations Game Design Experience Professor Jim Whitehead March 2, 2009 Creative Commons Attribution 3.0 (Except copyrighted images) creativecommons.org/licenses/by/3.0

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