420 likes | 528 Views
Transformations. CS 445: Introduction to Computer Graphics David Luebke University of Virginia. Admin. Call roll Forums signup – do it NOW please. Demo. Animusic. Translations. For convenience we usually describe objects in relation to their own coordinate system
E N D
Transformations CS 445: Introduction to Computer Graphics David Luebke University of Virginia
Admin • Call roll • Forums signup – do it NOW please
Demo • Animusic
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
Scaling • Scaling a coordinate means multiplying each of its components by a scalar • Uniform scaling means this scalar is the same for all components: 2
Scaling • Non-uniform scaling: different scalars per component: • How can we represent this in matrix form? X 2,Y 0.5
Scaling • Scaling operation: • Or, in matrix form: scaling matrix
(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
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
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 -)
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:
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:
Homogeneous Coordinates • How can we represent translation as a 4x4 matrix? • A: Using the rightmost column:
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 ?
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
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:
Perspective Projection • The geometry of the situation is that of similar triangles. View from above: • What is x’? Viewplane X P (x, y, z) x’ = ? (0,0,0) Z d
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?
Projection Matrices • Now that we can express perspective foreshortening as a matrix, we can composite it onto our other matrices with the usual matrix multiplication • End result: can create a single matrix encapsulating modeling, viewing, and projection transforms • Though you will recall that in practice OpenGL separates the modelview from projection matrix (why?)