- 84 Views
- Uploaded on
- Presentation posted in: General

Geometric Transforms

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

Geometric Transforms

Changing coordinate systems

- Describe coordinate systems and transforms
- Introduce homogeneous coordinates
- Introduce numerical integration for animation
- Later:
- camera transforms
- physics
- more on vectors and matrices

- 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

- 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

- A Cartesian coordinate system has three things:
- an origin – reference point measurements are taken from
- axes – canonical directions
- scale – meaning of units of distance

- 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

- Translation: changing the origin of the coordinate system

(5,13)

(2,12)

(0,0)

(0,0)

- Rotation: changing the axes of the coordinate system

(7,1)

(5,5)

(0,0)

(0,0)

- Scaling: changing the units of the coordinate system

(8,8)

(4,4)

(0,0)

(0,0)

- 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

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

=

Matrix.CreateScale( s );

- scalar argument s describes amount of scaling

Matrix.CreateScale( v );

- vector argument v describes scale amount in x y z

- Similarly, rotating a point by an angle θ:
- (x,y) (x cos θ - y sin θ, x sin θ + y cos θ)

=

Matrix.CreateRotationZ(angle)

- Note, specify the axis about which the rotation occurs
- also have CreateRotationX, CreateRotationY

- argument is angle of rotation, in radians

- Translating a point by a vector involves a vector addition:
- (x,y) + (s,t) = (x+s, y+t)

- 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

- Scaling: p’ = Sp
- Rotation: p’ = Rp
- Translation: p’ = t + p
- Problem: Translation is treated differently.

- 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

- w=0 represents points at infinity and should be avoided if representing location

- (x,y,1) + (s,t,0) = (x+s,y+t, 1)

=

=

Matrix.CreateTranslation( v );

- vector v is the translation vector

Matrix.CreateTranslation( x, y, z);

- x, y, z are scalars (floats)

- 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

- 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

- R matrix we wrote allows rotation about origin
- Usually, origin and point of rotation do not coincide

- Want to rotate about arbitrary point
- How to achieve this?

- 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

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

- 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

- So far, talked about transforming points
- How about objects?
- Lines get transformed sensibly with transforms on endpoints
- Polygons same, mutatis mutandis

- Many times, structures (and models) will be built as a hierarchy:

Body

Arm

Other limbs...

Hand

Thumb

other fingers...

- 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

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

- 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

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

- 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

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

- How to use world transformations
- scale, rotate, translate

- Use of homogeneous coordinates for translation
- Order of operations
- ISROT

- Animation and Euler integration

- matrix and vector math
- camera transformations
- illumination and texture
- particle systems
- linear physics