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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend