Transformations CS 445/645 Introduction to Computer Graphics David Luebke, Spring 2003 Admin ● Call roll ● Assn 1 ■ Remember, due Monday 10 AM (ie, don’t skip class) ■ Several people have turned in already – nice job David Luebke 2 3/15/2016 Recap: 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: x' x tx y ' y ty z ' z tz ■ Note that this translates all points uniformly David Luebke 3 3/15/2016 Recap: Scaling ● Scaling operation: ● Or, in matrix form: x' ax y ' by z ' cz x ' a 0 0 x y' 0 b 0 y z ' 0 0 c z scaling matrix David Luebke 4 3/15/2016 Recap: 3-D Rotation ● 3x3 matrix for rotation about the z-axis: x' cos() sin( ) 0 x y ' sin( ) cos() 0 y z ' 0 0 1 z David Luebke 5 3/15/2016 Recap: 3-D Rotation ● 3x3 matrix for rotation about the y-axis: x' cos() 0 sin( ) x y ' 0 1 0 y z ' sin( ) 0 cos() z David Luebke 6 3/15/2016 Recap: 3-D Rotation ● 3x3 matrix for rotation about the x-axis: 0 0 x x' 1 y ' 0 cos() sin( ) y z ' 0 sin( ) cos() z David Luebke 7 3/15/2016 Recap: 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 -) David Luebke 8 3/15/2016 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 ? David Luebke 9 3/15/2016 Composing Canonical Rotations ● Why are we slogging through all this tedium? ● A: Because you’ll have to do it on the test David Luebke 10 3/15/2016 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! David Luebke 11 3/15/2016 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? David Luebke 12 3/15/2016 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 David Luebke 13 3/15/2016 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 orthogonal ● What is an orthogonal matrix? ● What property are we talking about? David Luebke 14 3/15/2016 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: a b d e h i David Luebke 1 c a b f d e h i j 15 T c a f b c j d e f h i j 3/15/2016 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 David Luebke 16 3/15/2016 Homogeneous Coordinates ● Homogeneous coordinates: represent coordinates in 3 dimensions with a 4-vector x / w x y / w y ( x, y , z ) z / w z 1 w (Note that typically w = 1 in object coordinates) David Luebke 17 3/15/2016 Homogeneous Coordinates ● Homogeneous coordinates seem unintuitive, but they make graphics operations much easier ● Our transformation matrices are now 4x4: 0 0 1 0 cos() sin( ) Rx 0 sin( ) cos() 0 0 0 David Luebke 18 0 0 0 1 3/15/2016 Homogeneous Coordinates ● Homogeneous coordinates seem unintuitive, but they make graphics operations much easier ● Our transformation matrices are now 4x4: cos() 0 Ry sin( ) 0 David Luebke 0 sin( ) 0 1 0 0 0 cos() 0 0 0 1 19 3/15/2016 Homogeneous Coordinates ● Homogeneous coordinates seem unintuitive, but they make graphics operations much easier ● Our transformation matrices are now 4x4: cos() sin( ) sin( ) cos() Rz 0 0 0 0 David Luebke 20 0 0 0 0 1 0 0 1 3/15/2016 Homogeneous Coordinates ● Homogeneous coordinates seem unintuitive, but they make graphics operations much easier ● Our transformation matrices are now 4x4: Sx 0 0 Sy S 0 0 0 0 David Luebke 21 0 0 0 0 Sz 0 0 1 3/15/2016 Homogeneous Coordinates ● How can we represent translation as a 4x4 matrix? ● A: Using the rightmost column: 1 0 T 0 0 David Luebke 0 0 Tx 1 0 Ty 0 1 Tz 0 0 1 22 3/15/2016 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: x' 1 y ' 0 z ' 0 w' 0 David Luebke 0 0 0 1 0 0 1 0 0 0 cos(90) sin( 90) 0 1 10 0 sin( 90) cos(90) 0 0 1 0 0 0 23 0 x 0 y 0 z 1 w 3/15/2016 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: x' 1 y ' 0 z ' 0 w' 0 David Luebke 0 0 0 1 1 0 0 0 0 1 10 0 0 0 1 0 24 0 0 0 x 0 1 0 y 1 0 0 z 0 0 1 w 3/15/2016 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: x' 1 y ' 0 z ' 0 w' 0 David Luebke 0 0 0 x 0 1 0 y 1 0 10 z 0 0 1 w 25 3/15/2016 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: x' x y' z z ' y 10 w' w David Luebke 26 3/15/2016 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 ? David Luebke 27 3/15/2016