390 likes | 518 Views
Geometric Transforms. Changing coordinate systems. The plan. Describe coordinate systems and transforms Introduce homogeneous coordinates Introduce numerical integration for animation Later: camera transforms physics more on vectors and matrices. World Coordinates.
E N D
Geometric Transforms Changing coordinate systems
The plan • Describe coordinate systems and transforms • Introduce homogeneous coordinates • Introduce numerical integration for animation • Later: • camera transforms • physics • more on vectors and matrices
World Coordinates • Objects exist in the world without need for coordinate systems • But, describing their positions is easier with a frame of reference • “World” or “object-space” or “global” coordinates
Screen vs World Coordinates • Some objects only exist on the screen • mouse pointer, “radar” display, score, UI elements • Screen coordinates typically 2D Cartesian • x, y • Objects in the world also appear on the screen – need to project world coordinates to screen coordinates • camera transform
Coordinate Transforms • A Cartesian coordinate system has three things: • an origin – reference point measurements are taken from • axes – canonical directions • scale – meaning of units of distance
Types of transforms • Translation • moving in a fixed position • Rotation • changing orientation • Scale • changing size • All can be viewed either as affecting the model or as affecting the coordinate system
Changing coordinate systems • Translation: changing the origin of the coordinate system (5,13) (2,12) (0,0) (0,0)
Changing coordinate systems • Rotation: changing the axes of the coordinate system (7,1) (5,5) (0,0) (0,0)
Changing coordinate systems • Scaling: changing the units of the coordinate system (8,8) (4,4) (0,0) (0,0)
Matrix Transforms • For "simplicity"s sake, we want to represent our transforms as matrix operations • Why is this simple? • single type of operation for all transforms • IMPORTANT: collection of transforms can be expressed as a single matrix • efficiency
Scaling • If we express our 2D coordinates as (x,y), scaling by a factor a multiplies each coordinate: so (ax, ay) • Can write as a matrix multiplication: =
Scaling Syntax Matrix.CreateScale( s ); • scalar argument s describes amount of scaling • alternatively, Matrix.CreateScale( v ); • vector argument v describes scale amount in x y z
Rotation • Similarly, rotating a point by an angle θ: • (x,y) (x cos θ - y sin θ, x sin θ + y cos θ) =
Rotation Syntax Matrix.CreateRotationZ(angle) • Note, specify the axis about which the rotation occurs • also have CreateRotationX, CreateRotationY • argument is angle of rotation, in radians
Translation • Translating a point by a vector involves a vector addition: • (x,y) + (s,t) = (x+s, y+t)
Translation • Translating a point by a vector involves a vector addition: • (x,y) + (s,t) = (x+s, y+t) • Problem: cannot compose multiplications and additions into one operation
Coordinate Transforms • Scaling: p’ = Sp • Rotation: p’ = Rp • Translation: p’ = t + p • Problem: Translation is treated differently.
Homogeneous Coordinates • Add an extra coordinate w • 2D point written (x,y,w) • Cartesian coordinates of this point are (x/w, y/w) • w=0 represents points at infinity and should be avoided if representing location • [Aside: w=0 also used to represent vector, e.g., normal] • in practice, usually have w=1
Translation now • (x,y,1) + (s,t,0) = (x+s,y+t, 1) =
Translation Syntax Matrix.CreateTranslation( v ); • vector v is the translation vector • Also, Matrix.CreateTranslation( x, y, z); • x, y, z are scalars (floats)
Composing Transformations • Rotation, scale, and translate are all matrix multiplications • We can compose an arbitrary sequence of transformations into one matrix • C = T0T1…Tn-1Tn • Remember – order matters • In XNA, later transforms are added on the right
Kinds of Transformations • Rigid transformations • composed of only rotations and translations • preserve distances between points • Affine transformations • include scales • preserve parallelism of lines • distances and angles might change
More on Rotations • R matrix we wrote allows rotation about origin • Usually, origin and point of rotation do not coincide
More on Rotations • Want to rotate about arbitrary point • How to achieve this?
More on Rotations • Want to rotate about arbitrary point • How to achieve this? • Composite transform • first translate to origin • next, rotate desired amount • finally, translate back • C = T-1RT
More on Order of Operations • AB != BA in general • But, AB = BA if: • A is translation, B is translation • A is scale, B is scale • A is rotation, B is rotation • A is rotation, B is scale (that preserves aspect ratio) • All in two dimensions, note Like transforms commute
ISROT • ISROT: a mnemonic for the order of transformations • Identity: gets you started • Scale: change the size of your model • Rotation: rotate in place • Orbit: rotate about an external point • first translate • then rotate (about origin) • Translation: move to final position
3D transforms • Translation same as in 2D • use 4D homogeneous coordinates x,y,z,w • Scaling same as 2D • For rotation, need to specify axis • unique in 2D, but different possibilities available in 3D • can represent any 3D rotation by a composition of rotations about axes
Transforming objects • So far, talked about transforming points • How about objects? • Lines get transformed sensibly with transforms on endpoints • Polygons same, mutatis mutandis
Hierarchical Models • Many times, structures (and models) will be built as a hierarchy: Body Arm Other limbs... Hand Thumb other fingers...
Transforms on Hierarchies • Transforms applied to nodes higher in the hierarchy are also applied to lower nodes • parent transforms propagate to children • How to achieve this? • Simple: multiply your transform with your parent's transform • May want a stack for hierarchy management • push transform on descending • pop when current node finished
Transforms on Hierarchies • pseudocode for computing final transform: applyWorld = myWorld * parentWorld; • applyWorld is the final transform • myWorld is the local transform • parentWorld is the parent node's transform • The power of matrix transforms! Complex hierarchical models can be expressed simply.
Moving objects • Want to get things to move • Can adjust transform parameters • translation amount • rotation, orbit angles • Just incorporate changes into Update() • Need to do this in a disciplined way
Speed position • If we know • where an object started • how fast it is moving (and the direction) • and how much time has passed • we can figure out where it is now • x(t + dt) = x(t) + v(t)dt • Numerical integration!
Euler integration • Assumes constant speed within a timestep • still gives an answer if speed changes, but answer might be wrong • x(t + dt) = x(t) + v(t)dt • "Explicit integration" • Most commonly used in graphics/game applications
Implementation • Time available in Update as gameTime object.position += object.velocity * gameTime.ElapsedGameTime.TotalSeconds; • if speed expressed in distance units per second • assumes that position and velocity are vectors • may have some way of updating velocity • physics, player control, AI, ... • Similar approach for angle updates (need angular velocity)
Recap • How to use world transformations • scale, rotate, translate • Use of homogeneous coordinates for translation • Order of operations • ISROT • Animation and Euler integration
Future lectures • matrix and vector math • camera transformations • illumination and texture • particle systems • linear physics