geometric transforms

39
Geometric Transforms Changing coordinate systems

Upload: garth-wall

Post on 01-Jan-2016

40 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

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

(0,0)

(0,0)

(5,13)

(2,12)

Changing coordinate systems

• Rotation: changing the axes of the coordinate system

(0,0)

(0,0)

(5,5)

(7,1)

Changing coordinate systems

• Scaling: changing the units of the coordinate system

(0,0)

(0,0)

(4,4)(8,8)

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:

a 0

0 b

x

y

ax

by=

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

cos θ -sin θ

sin θ cos θ

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)

1 0 s

0 1 t

0 0 1

x

y

1

x+s

y+t

1

=

Composing Translations

1 0 s1

0 1 t1

0 0 1

1 0 s2

0 1 t2

0 0 1

1 0 s1+s2

0 1 t1+t2

0 0 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 gameTimeobject.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