cs 5 4 3 com puter graphics lecture 4 part i 3 d affine
play

CS 5 4 3 : Com puter Graphics Lecture 4 ( Part I ) : 3 D Affine - PowerPoint PPT Presentation

CS 5 4 3 : Com puter Graphics Lecture 4 ( Part I ) : 3 D Affine transform s Emmanuel Agu I ntroduction to Transform ations Introduce 3D affine transformation: Position (translation) Size (scaling) Orientation (rotation)


  1. CS 5 4 3 : Com puter Graphics Lecture 4 ( Part I ) : 3 D Affine transform s Emmanuel Agu

  2. I ntroduction to Transform ations � Introduce 3D affine transformation: � Position (translation) � Size (scaling) � Orientation (rotation) � Shapes (shear) � Previously developed 2D (x,y) � Now, extend to 3D or (x,y,z) case � Extend transform matrices to 3D � Enable transformation of points by multiplication

  3. Point Representation � Previously, point in 2D as column matrix   x     x     y       y   1 � Now, extending to 3D, add z-component:     x P     x   y   P = or y   P   z P     z       1   1

  4. Transform s in 3 D � 2D: 3x3 matrix multiplication � 3D: 4x4 matrix multiplication: homogenous coordinates � Recall: transform object = transform each vertice � General form:       m m m m Q P       11 12 13 14 x x Xform of P       m m m m Q P = = 21 22 23 24 y y M M       m m m m Q P       31 32 33 34 z z             0 0 0 1 1 1

  5. Recall: 3 x3 2 D Translation Matrix � Previously, 2D :       x ' x t   +     = x         y   ' y t   y   x     1 0 t x '       x   = y     0 1 * t ' y   y       1   0 0 1   1

  6. 4 x4 3 D Translation Matrix     � Now, 3D :   x t x '       x +   =   y   t ' y y         z   t   ' z z OpenGL: gltranslated(tx,ty,tz)       x ' x 1 0 0 t       x   y     ' y 0 1 0 t = y   *     z ' z 0 0 1 t         z       1   1   0 0 0 1 � Where: x’= x.1 + y.0 + z.0 + tx.1 = x + tx , … etc

  7. 2 D Scaling � Scale: Alter object size by scaling factor (s x , s y ). i.e       x ' Sx 0 x x’ = x . Sx       =       y’ = y . Sy       y ' 0 Sy y (4,4) Sx = 2, Sy = 2 (2,2) (2,2) (1,1)

  8. Recall: 3 x3 2 D Scaling Matrix       ' 0 x Sx x   =                 y ' 0 Sy y       ' 0 0 x Sx x       = ∗       y ' 0 Sy 0 y             1 0 0 1 1

  9. 4 x4 3 D Scaling Matrix       x ' Sx 0 0 x       • Example: = ∗       ' 0 0 y Sy y • If Sx = Sy = Sz = 0.5             1 0 0 1 1 • Can scale: • big cube (sides = 1) to small cube ( sides = 0.5) • 2D: square, 3D cube       ' 0 0 0 x S x       x       y ' 0 S 0 0 y = ∗ y       z ' 0 0 S 0 z OpenGL:       z       glScaled(Sx,Sy,Sz)       1 0 0 0 1 1

  10. Exam ple: OpenGL Table Leg / / define table leg / / -------------------------------------------------------------------------- ------ void tableLeg(double thick, double len){ glPushMatrix(); glTranslated(0, len/ 2, 0); glScaled(thick, len, thick); glutSolidCube(1.0); glPopMatrix(); }

  11. Recall: 3 x3 2 D Rotation Matrix θ − θ       x ' cos( ) sin( ) x       = (x’,y’)       θ θ       ' sin( ) cos( ) y y θ (x,y) r φ θ − θ       ' cos( ) sin( ) 0 x x       = θ θ       ' sin( ) cos( ) 0 y y             1 0 0 1 1

  12. Rotating in 3 D � Cannot do mindless conversion like before � Why? � Rotate about what axis? � 3D rotation: about a defined axis � Different Xform matrix for: • Rotation about x-axis • Rotation about y-axis • Rotation about z-axis � New terminology � X-roll: rotation about x-axis � Y-roll: rotation about y-axis � Z-roll: rotation about z-axis

  13. Rotating in 3 D � New terminology � X-roll: rotation about x-axis � Y-roll: rotation about y-axis � Z-roll: rotation about z-axis � Which way is + ve rotation � Look in –ve direction (into + ve arrow) � CCW is + ve rotation y + x z

  14. Rotating in 3 D

  15. Rotating in 3 D � For a rotation angle, β about an axis � Define: ( ) ( ) = β = β s sin c cos A x-roll:   1 0 0 0   −   0 0 c s ( ) R x β =   OpenGL: 0 s c 0   glrotated( θ , 1,0,0 )     0 0 0 1

  16. Rotating in 3 D   c 0 s 0 A y-roll:   Rules:   0 1 0 0 ( ) • Rotate row, R y β =   OpenGL: column int. is 1 − 0 0 s c   glrotated( θ , 0,1,0 )   • Rest of row/ col is 0   0 0 0 1 • c,s in rect pattern A z-roll: −   c s 0 0     s c 0 0 ( ) R z β =   OpenGL: 0 0 1 0     glrotated( θ , 0,0,1 )   0 0 0 1

  17. Exam ple: Rotating in 3 D Q: Using y-roll equation, rotate P = (3,1,4) by 30 degrees: A: c = cos(30) = 0.866, s = sin(30) = 0.5, and       0 0 3 4 . 6 c s             0 1 0 0 1 1 = = Q       − s 0 c 0 4 1 . 964                   0 0 0 1 1 1 E.g. first line: 3.c + 1.0 + 4.s + 1.0 = 4.6

  18. Matrix Multiplication Code Q: Write C code to Multiply point P = (Px, Py, Pz, 1) by a 4x4 matrix shown below to give new point Q = (Qx,Qy,Qz, 1). i.e. where   m m m m       11 12 13 14 Q P     x x   m m m m =     21 22 23 24 Q P M   = y y M     m m m m   31 32 33 34 Q P       z z       0 0 0 1     1 1

  19. Matrix Multiplication Code � Outline of solution: � Declare P,Q as array: • Double P[ 4] , Q[ 4] ; � Declare transform matrix as 2-dimensional array • Double M[ 4] [ 4] ; � Remember: C indexes from 0, not 1 � Long way: • Write out equations line by line expression for Q[ i] • E.g. Q[ 0] = P[ 0] * M[ 0] [ 0] + P[ 1] * M[ 0] [ 1] + P[ 2] * M[ 0] [ 2] + P[ 3] * M[ 0] [ 3] � Cute way: • Use indexing, say i for outer loop, j for inner loop

  20. Matrix Multiplication Code � Using loops looks like: � for(i= 0; i< 4; i+ + ) { temp = 0; for(j= 0; j< 4; j+ + ) { temp + = P[ j] * M[ i] [ j] ; } Q[ i] = temp; } � Test matrice code rigorously � Use known results (or by hand) and plug into your code

  21. 3 D Rotation About Arbitrary Axis � Arbitrary rotation axis (rx, ry, rz) � openGL: rotate( θ , rx, ry, rz) � Without openGL: a little hairy!! � Important: read Hill and Kelley, pg 220 - 223 (rx, ry, rz) y x z

  22. 3 D Rotation About Arbitrary Axis � Can compose arbitrary rotation as combination of: � X-roll � Y-roll � Z-roll M = β β β R ( ) R ( ) R ( ) 3 2 1 z y x

  23. 3 D Rotation About Arbitrary Axis � Classic: use Euler’s theorem � Euler’s theorem: any sequence of rotations = one rotation about some axis � Our approach: � Want to rotate β about the axis u through origin and arbitrary point � Use two rotations to align u and x-axis � Do x-roll through angle β � Negate two previous rotations to de-align u and x-axis

  24. 3 D Rotation About Arbitrary Axis β = − θ φ β − φ θ ( ) ( ) ( ) ( ) ( ) ( ) R R R R R R u y z x z y

  25. Com posing Transform ation � Composing transformation – applying several transforms in succession to form one overall transformation � Example: M1 X M2 X M3 X P where M1, M2, M3 are transform matrices applied to P � Be careful with the order � Matrix multiplication is not commutative

  26. References � Hill, chapter 5.3

Recommend


More recommend