520 likes | 646 Views
Transformations. Aaron Bloomfield CS 445: Introduction to Graphics Fall 2006 (Slide set originally by David Luebke). Graphics coordinate systems. X is red Y is green Z is blue. If you are on the +z axis, and +y is up, then +x is to the right Math fields have +x going to the left.
E N D
Transformations Aaron Bloomfield CS 445: Introduction to Graphics Fall 2006 (Slide set originally by David Luebke)
Graphics coordinate systems • X is red • Y is green • Z is blue
If you are on the +z axis, and +y is up, then +x is to the right Math fields have +x going to the left Graphics coordinate systems
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
2 Scaling • Scaling a coordinate means multiplying each of its components by a scalar • Uniform scaling means this scalar is the same for all components:
X 2,Y 0.5 Scaling • Non-uniform scaling: different scalars per component: • How can we represent this in matrix form?
Scaling • Scaling operation: • Or, in matrix form: scaling matrix
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
(x’, y’) (x, y) 2-D Rotation x’ = x cos() - y sin() y’ = x sin() + y cos()
2-D Rotation • This is easy to capture in matrix form: • 3-D is more complicated • Need to specify an axis of rotation • Simple cases: rotation about X, Y, Z axes
3-D Rotation • What does the 3-D rotation matrix look like for a rotation about the Z-axis? • Build it coordinate-by-coordinate • 2-D rotation from last slide:
3-D Rotation • What does the 3-D rotation matrix look like for a rotation about the Y-axis? • Build it coordinate-by-coordinate
3-D Rotation • What does the 3-D rotation matrix look like for a rotation about the X-axis? • Build it coordinate-by-coordinate
3-D Rotation • General rotations in 3-D require rotating about an arbitrary axis of rotation • Deriving the rotation matrix for such a rotation directly is a good exercise in linear algebra • Another approach: express general rotation as composition of canonical rotations • Rotations about X, Y, Z
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
Composing Canonical Rotations • Goal: rotate about arbitrary vector A by • Idea: we know how to rotate about X,Y,Z • So, rotate about Y by until A lies in the YZ plane • Then rotate about X by until A coincides with +Z • Then rotate about Z by • Then reverse the rotation about X (by -) • Then reverse the rotation about Y (by -) • Show video…
Composing Canonical Rotations • First: rotating about Y by until A lies in YZ • Draw it… • How exactly do we calculate ? • Project A onto XZ plane • Find angle to X: = -(90° - ) = - 90 ° • Second: rotating about X by until A lies on Z • How do we calculate ?
3-D Rotation Matrices • So an arbitrary rotation about A composites several canonical rotations together • We can express each rotation as a matrix • Compositing transforms == multiplying matrices • Thus we can express the final rotation as the product of canonical rotation matrices • Thus we can express the final rotation with a single matrix!
Compositing Matrices • So we have the following matrices: • p: The point to be rotated about A by • Ry : Rotate about Y by • Rx : Rotate about X by • Rz : Rotate about Z by • Rx -1: Undo rotation about X by • Ry-1: Undo rotation about Y by • In what order should we multiply them?
Compositing Matrices • Remember: the transformations, in order, are written from right to left • In other words, the first matrix to affect the vector goes next to the vector, the second next to the first, etc. • This is the rule with column vectors (OpenGL); row vectors would be the opposite • So in our case: p’ = Ry-1 Rx -1 Rz Rx Ry p
Rotation Matrices • Notice these two matrices: Rx : Rotate about X by Rx -1: Undo rotation about X by • How can we calculate Rx -1? • Obvious answer: calculate Rx (-) • Clever answer: exploit fact that rotation matrices are orthonormal • What is an orthonormal matrix? • What property are we talking about?
Rotation Matrices • Rotation matrix is orthogonal • Columns/rows linearly independent • Columns/rows sum to 1 • The inverse of an orthogonal matrix is just its transpose:
Rotation Matrix for Any Axis • Given glRotated (angle, x, y, z) • Let c = cos(angle) • Let s = sin(angle) • And normalize the vector so that ||(x,y,z|| == 1 • The produced matrix to rotate something by angle degrees around the axis (x,y,z) is:
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
Translations • For convenience we usually describe objects in relation to their own coordinate system • We can translate or move points to a new position by adding offsets to their coordinates: • Note that this translates all points uniformly
Translation Matrices? • We can composite scale matrices just as we did rotation matrices • But how to represent translation as a matrix? • Answer: with homogeneous coordinates
Homogeneous Coordinates • Homogeneous coordinates: represent coordinates in 3 dimensions with a 4-vector • [x, y, z, 0]T represents a point at infinity (use for vectors) • [0, 0, 0]T is not allowed • Note that typically w = 1 in object coordinates
Homogeneous Coordinates • Homogeneous coordinates seem unintuitive, but they make graphics operations much easier • Our transformation matrices are now 4x4:
Homogeneous Coordinates • Homogeneous coordinates seem unintuitive, but they make graphics operations much easier • Our transformation matrices are now 4x4:
Homogeneous Coordinates • Homogeneous coordinates seem unintuitive, but they make graphics operations much easier • Our transformation matrices are now 4x4:
Homogeneous Coordinates • Homogeneous coordinates seem unintuitive, but they make graphics operations much easier • Our transformation matrices are now 4x4: • Performing a scale:
More On Homogeneous Coords • What effect does the following matrix have? • Conceptually, the fourth coordinate w is a bit like a scale factor
More On Homogeneous Coords • Intuitively: • The w coordinate of a homogeneous point is typically 1 • Decreasing w makes the point “bigger”, meaning further from the origin • Homogeneous points with w = 0 are thus “points at infinity”, meaning infinitely far away in some direction. (What direction?) • To help illustrate this, imagine subtracting two homogeneous points
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
Homogeneous Coordinates • How can we represent translation as a 4x4 matrix? • A: Using the rightmost column: • Performing a translation:
Translation Matrices • Now that we can represent translation as a matrix, we can composite it with other transformations • Ex: rotate 90° about X, then 10 units down Z:
Translation Matrices • Now that we can represent translation as a matrix, we can composite it with other transformations • Ex: rotate 90° about X, then 10 units down Z:
Translation Matrices • Now that we can represent translation as a matrix, we can composite it with other transformations • Ex: rotate 90° about X, then 10 units down Z:
Translation Matrices • Now that we can represent translation as a matrix, we can composite it with other transformations • Ex: rotate 90° about X, then 10 units down Z:
Transformation Commutativity • Is matrix multiplication, in general, commutative? Does AB = BA? • What about rotation, scaling, and translation matrices? • Does RxRy = RyRx? • Does RAS = SRA ? • Does RAT = TRA ?
Outline • Scaling • Rotations • Composing Rotations • Homogeneous Coordinates • Translations • Projections
Perspective Projection • In the real world, objects exhibit perspective foreshortening: distant objects appear smaller • The basic situation:
How tall shouldthis bunny be? Perspective Projection • When we do 3-D graphics, we think of the screen as a 2-D window onto the 3-D world • The view plane
Viewplane X P (x, y, z) x’ = ? (0,0,0) Z d Perspective Projection • The geometry of the situation is that of similar triangles. View from above: • What is x?
Perspective Projection • Desired result for a point [x, y, z, 1]T projected onto the view plane: • What could a matrix look like to do this?
A Perspective Projection Matrix • Answer:
A Perspective Projection Matrix • Example: • Or, in 3-D coordinates:
A Perspective Projection Matrix • OpenGL’s gluPerspective() command generates a slightly more complicated matrix: • Can you figure out what this matrix does?