Transformations IV Week 3, Mon Jan 22 - - PowerPoint PPT Presentation

transformations iv week 3 mon jan 22
SMART_READER_LITE
LIVE PREVIEW

Transformations IV Week 3, Mon Jan 22 - - PowerPoint PPT Presentation

University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2007 Tamara Munzner Transformations IV Week 3, Mon Jan 22 http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007 Readings for Jan 15-22 FCG Chap 6 Transformation Matrices except


slide-1
SLIDE 1

University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2007 Tamara Munzner http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007

Transformations IV Week 3, Mon Jan 22

slide-2
SLIDE 2

2

Readings for Jan 15-22

  • FCG Chap 6 Transformation Matrices
  • except 6.1.6, 6.3.1
  • FCG Sect 13.3 Scene Graphs
  • RB Chap Viewing
  • Viewing and Modeling Transforms until Viewing

Transformations

  • Examples of Composing Several Transformations

through Building an Articulated Robot Arm

  • RB Appendix Homogeneous Coordinates and

Transformation Matrices

  • until Perspective Projection
  • RB Chap Display Lists
slide-3
SLIDE 3

3 (2,1) (1,1) (1,1)

left to right: changing coordinate system right to left: moving object translate by (-1,0)

Review: Interpreting Transformations

  • same relative position between object and

basis vectors

intuitive? OpenGL

p'= TRp

slide-4
SLIDE 4

Correction/More: Arbitrary Rotation

  • arbitrary rotation: change of basis
  • given two orthonormal coordinate systems XYZ and ABC
  • A’s location in the XYZ coordinate system is (ax, ay, az, 1), ...
  • transformation from one to the other is matrix R whose

columns are A,B,C:

Y Z X B C A Y Z X B C A (cx, cy, cz, 1) (ax, ay, az, 1) (bx, by, bz, 1)

                        = 1 1 1 ) (

z z z y y y x x x

c b a c b a c b a X R A a a a

z y x

= = ) 1 , , , (

slide-5
SLIDE 5

5

Transformation Hierarchies

slide-6
SLIDE 6

6

Transformation Hierarchies

  • scene may have a hierarchy of coordinate

systems

  • stores matrix at each level with incremental

transform from parent’s coordinate system

  • scene graph

road road stripe1 stripe1 stripe2 stripe2 ... ... car1 car1 car2 car2 ... ... w1 w1 w3 w3 w2 w2 w4 w4

slide-7
SLIDE 7

7

Transformation Hierarchy Example 1

torso torso head head RUarm RUarm RLarm RLarm Rhand Rhand RUleg RUleg RLleg RLleg Rfoot Rfoot LUarm LUarm LLarm LLarm Lhand Lhand LUleg LUleg LLleg LLleg Lfoot Lfoot world world trans(0.30,0,0) rot(z, ) trans(0.30,0,0) rot(z, )

θ

slide-8
SLIDE 8

8

Transformation Hierarchies

  • hierarchies don’t fall apart when changed
  • transforms apply to graph nodes beneath
slide-9
SLIDE 9

9

Demo: Brown Applets

http://www. http://www.cs cs.brown. .brown.edu edu/ /exploratories exploratories/ / freeSoftware freeSoftware/catalogs/ /catalogs/scenegraphs scenegraphs.html .html

slide-10
SLIDE 10

10

Transformation Hierarchy Example 2

  • draw same 3D data with different

transformations: instancing

slide-11
SLIDE 11

11

Matrix Stacks

  • challenge of avoiding unnecessary

computation

  • using inverse to return to origin
  • computing incremental T1 -> T2

Object coordinates Object coordinates World coordinates World coordinates

T T1

1(x)

(x) T T2

2(x)

(x) T T3

3(x)

(x)

slide-12
SLIDE 12

12

Matrix Stacks

glPushMatrix glPushMatrix() () glPopMatrix glPopMatrix() () A A B B C C A A B B C C A A B B C C C C glScale3f(2,2,2) glScale3f(2,2,2) D = C scale(2,2,2) trans(1,0,0) D = C scale(2,2,2) trans(1,0,0) A A B B C C D D DrawSquare DrawSquare() () glTranslate3f(1,0,0) glTranslate3f(1,0,0) DrawSquare DrawSquare() () glPushMatrix glPushMatrix() () glPopMatrix glPopMatrix() ()

slide-13
SLIDE 13

13

Modularization

  • drawing a scaled square
  • push/pop ensures no coord system change

void void drawBlock drawBlock(float k) { (float k) { glPushMatrix glPushMatrix(); (); glScalef glScalef(k,k,k); (k,k,k); glBegin glBegin(GL_LINE_LOOP); (GL_LINE_LOOP); glVertex3f(0,0,0); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(1,0,0); glVertex3f(1,1,0); glVertex3f(1,1,0); glVertex3f(0,1,0); glVertex3f(0,1,0); glEnd glEnd(); (); glPopMatrix glPopMatrix(); (); } }

slide-14
SLIDE 14

14

Matrix Stacks

  • advantages
  • no need to compute inverse matrices all the time
  • modularize changes to pipeline state
  • avoids incremental changes to coordinate systems
  • accumulation of numerical errors
  • practical issues
  • in graphics hardware, depth of matrix stacks is

limited

  • (typically 16 for model/view and about 4 for projective

matrix)

slide-15
SLIDE 15

15

Transformation Hierarchy Example 3

F FW

W

F Fh

h

F Fh

h

glLoadIdentity glLoadIdentity(); (); glTranslatef glTranslatef(4,1,0); (4,1,0); glPushMatrix glPushMatrix(); (); glRotatef glRotatef(45,0,0,1); (45,0,0,1); glTranslatef glTranslatef(0,2,0); (0,2,0); glScalef glScalef(2,1,1); (2,1,1); glTranslate glTranslate(1,0,0); (1,0,0); glPopMatrix glPopMatrix(); (); F F1

1

F Fh

h

F Fh

h

F Fh

h

F Fh

h

F Fh

h

slide-16
SLIDE 16

16

Transformation Hierarchy Example 4

4

θ

1

θ

5

θ

3

θ

2

θ

x x y y glTranslate3f(x,y,0); glTranslate3f(x,y,0); glRotatef glRotatef( ,0,0,1); ( ,0,0,1); DrawBody DrawBody(); (); glPushMatrix glPushMatrix(); (); glTranslate3f(0,7,0); glTranslate3f(0,7,0); DrawHead DrawHead(); (); glPopMatrix glPopMatrix(); (); glPushMatrix glPushMatrix(); (); glTranslate glTranslate(2.5,5.5,0); (2.5,5.5,0); glRotatef glRotatef( ,0,0,1); ( ,0,0,1); DrawUArm DrawUArm(); (); glTranslate glTranslate(0,-3.5,0); (0,-3.5,0); glRotatef glRotatef( ,0,0,1); ( ,0,0,1); DrawLArm DrawLArm(); (); glPopMatrix glPopMatrix(); (); ... (draw other arm) ... (draw other arm)

1

θ

2

θ

3

θ

slide-17
SLIDE 17

17

Hierarchical Modelling

  • advantages
  • define object once, instantiate multiple copies
  • transformation parameters often good control knobs
  • maintain structural constraints if well-designed
  • limitations
  • expressivity: not always the best controls
  • can’t do closed kinematic chains
  • keep hand on hip
  • can’t do other constraints
  • collision detection
  • self-intersection
  • walk through walls
slide-18
SLIDE 18

18

Single Parameter: Simple

  • parameters as functions of other params
  • clock: control all hands with seconds s

m = s/60, h=m/60, theta_s = (2 pi s) / 60, theta_m = (2 pi m) / 60, theta_h = (2 pi h) / 60

slide-19
SLIDE 19

19

Single Parameter: Complex

  • mechanisms not easily expressible with

affine transforms

http://www.flying-pig.co. http://www.flying-pig.co.uk uk

slide-20
SLIDE 20

20

Single Parameter: Complex

  • mechanisms not easily expressible with

affine transforms

http://www.flying-pig.co. http://www.flying-pig.co.uk uk/mechanisms/pages/irregular.html /mechanisms/pages/irregular.html

slide-21
SLIDE 21

21

Display Lists

slide-22
SLIDE 22

22

Display Lists

  • precompile/cache block of OpenGL code for reuse
  • usually more efficient than immediate mode
  • exact optimizations depend on driver
  • good for multiple instances of same object
  • but cannot change contents, not parametrizable
  • good for static objects redrawn often
  • display lists persist across multiple frames
  • interactive graphics: objects redrawn every frame from

new viewpoint from moving camera

  • can be nested hierarchically
  • snowman example

http://www.lighthouse3d.com/opengl/displaylists

slide-23
SLIDE 23

23

One Snowman

void void drawSnowMan drawSnowMan() () { { glColor3f(1.0f, 1.0f, 1.0f); glColor3f(1.0f, 1.0f, 1.0f); // Draw Body // Draw Body glTranslatef glTranslatef(0.0f ,0.75f, 0.0f); (0.0f ,0.75f, 0.0f); glutSolidSphere glutSolidSphere(0.75f,20,20); (0.75f,20,20); // Draw Head // Draw Head glTranslatef glTranslatef(0.0f, 1.0f, 0.0f); (0.0f, 1.0f, 0.0f); glutSolidSphere glutSolidSphere(0.25f,20,20); (0.25f,20,20); // Draw Nose // Draw Nose glColor3f(1.0f, 0.5f , 0.5f); glColor3f(1.0f, 0.5f , 0.5f); glRotatef glRotatef(0.0f,1.0f, 0.0f, 0.0f); (0.0f,1.0f, 0.0f, 0.0f); glutSolidCone glutSolidCone(0.08f,0.5f,10,2); (0.08f,0.5f,10,2); } } // Draw Eyes // Draw Eyes glPushMatrix glPushMatrix(); (); glColor3f(0.0f,0.0f,0.0f); glColor3f(0.0f,0.0f,0.0f); glTranslatef glTranslatef(0.05f, 0.10f, 0.18f); (0.05f, 0.10f, 0.18f); glutSolidSphere glutSolidSphere(0.05f,10,10); (0.05f,10,10); glTranslatef glTranslatef(-0.1f, 0.0f, 0.0f); (-0.1f, 0.0f, 0.0f); glutSolidSphere glutSolidSphere(0.05f,10,10); (0.05f,10,10); glPopMatrix glPopMatrix(); ();

slide-24
SLIDE 24

24

Instantiate Many Snowmen

// Draw 36 Snowmen // Draw 36 Snowmen for( for(int int i = -3; i < 3; i++) i = -3; i < 3; i++) for( for(int int j=-3; j < 3; j++) { j=-3; j < 3; j++) { glPushMatrix glPushMatrix(); (); glTranslatef(i*10.0, 0, j glTranslatef(i*10.0, 0, j * 10.0); * 10.0); // Call the function to draw a snowman // Call the function to draw a snowman drawSnowMan drawSnowMan(); (); glPopMatrix glPopMatrix(); (); } }

36K polygons, 55 FPS

slide-25
SLIDE 25

25

Making Display Lists

GLuint createDL GLuint createDL() { () { GLuint snowManDL GLuint snowManDL; ; // Create the id for the list // Create the id for the list snowManDL snowManDL = = glGenLists glGenLists(1); (1); glNewList(snowManDL,GL_COMPILE glNewList(snowManDL,GL_COMPILE); ); drawSnowMan drawSnowMan(); (); glEndList glEndList(); (); return( return(snowManDL snowManDL); } ); } snowmanDL = createDL(); snowmanDL = createDL(); for(int i = -3; i < 3; i++) for(int i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { for(int j=-3; j < 3; j++) { glPushMatrix(); glPushMatrix(); glTranslatef(i*10.0, 0, j * 10.0); glTranslatef(i*10.0, 0, j * 10.0); glCallList(Dlid); glCallList(Dlid); glPopMatrix(); } glPopMatrix(); }

36K polygons, 153 FPS

slide-26
SLIDE 26

26

Transforming Normals

slide-27
SLIDE 27

27

Transforming Geometric Objects

  • lines, polygons made up of vertices
  • just transform the vertices, interpolate

between

  • does this work for everything? no!
slide-28
SLIDE 28

28

Computing Normals

  • polygon:
  • assume vertices ordered CCW when viewed

from visible side of polygon

  • normal for a vertex
  • specify polygon orientation
  • used for lighting
  • supplied by model (i.e., sphere),
  • r computed from neighboring polygons

1

P N

2

P

3

P ) ( ) (

1 3 1 2

P P P P N − × − = N

slide-29
SLIDE 29

29

Transforming Normals

  • what is a normal?
  • a direction
  • homogeneous coordinates: w=0 means direction
  • often normalized to unit length
  • vs. points/vectors that are object vertex locations
  • what are normals for?
  • specify orientation of polygonal face
  • used when computing lighting
  • so if points transformed by matrix M, can we just transform

normal vector by M too?

0xyz

111213212223313233'''000001xyzNxNxmmmTNyNy

slide-30
SLIDE 30

30

Transforming Normals

  • translations OK: w=0 means unaffected
  • rotations OK
  • uniform scaling OK
  • these all maintain direction

                          =             1 ' ' '

33 32 31 23 22 21 13 12 11

z y x T m m m T m m m T m m m z y x

z y x

slide-31
SLIDE 31

31

Transforming Normals

  • nonuniform scaling does not work
  • x-y=0 plane
  • line x=y
  • normal: [1,-1,0]
  • direction of line x=-y
  • (ignore normalization for now)
slide-32
SLIDE 32

32

Transforming Normals

  • apply nonuniform scale: stretch along x by 2
  • new plane x = 2y
  • transformed normal: [2,-1,0]
  • normal is direction of line x = -2y or x+2y=0
  • not perpendicular to plane!
  • should be direction of 2x = -y

2 −1             = 2 1 1 1             1 −1            

slide-33
SLIDE 33

33

= ⋅ P N

Planes and Normals

  • plane is all points perpendicular to normal
  • (with dot product)
  • (matrix multiply requires transpose)
  • explicit form: plane =

N TP = 0

N = a b c d             ,P = x y z w            

ax + by + cz + d

slide-34
SLIDE 34

34

MP P = '

P N

QN N = '

NTP = 0 if QTM = I

' ' = P N T ) ( ) ( = MP QN T = MP Q N

T T

I M QT = Q = M−1

( )

T

given M, given M, what should Q be? what should Q be? stay perpendicular stay perpendicular substitute from above substitute from above thus the normal to any surface can be transformed by the inverse transpose of the modelling transformation

Finding Correct Normal Transform

  • transform a plane

(AB)T = BTA T

slide-35
SLIDE 35

35

Assignments

slide-36
SLIDE 36

36

Assignments

  • project 1
  • out today, due 5:59pm Fri Feb 2
  • you should start very soon!
  • build armadillo out of cubes and 4x4 matrices
  • think cartoon, not beauty
  • template code gives you program shell, Makefile
  • http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007/p1.tar.gz
  • written homework 1
  • out today, due 3pm Fri Feb 2
  • theoretical side of material
slide-37
SLIDE 37

37

Real Armadillos

http://www.photogalaxy.com/pic/mattbl-69/armadillo.jpg http://www.phillyist.com/attachments/philly_mike/armadillo.jpg http://biology.clc.uc.edu/graphics/bio106/armadillo.JPG http://www.delargy.com/images/2004_2_Fla/armadillo.JPG http://armadillo.blueprint.org/images/armadillo.bmp http://pelotes.jea.com/ColoringPage/Mammal/Colarma.gif

slide-38
SLIDE 38

38

Articulated Armadillo

slide-39
SLIDE 39

39

Articulated Armadillo

slide-40
SLIDE 40

40

More Fun With Boxes and Matrices:

slide-41
SLIDE 41

41

Lemurs!

slide-42
SLIDE 42

42

Giraffes!

slide-43
SLIDE 43

43

Giraffes!

slide-44
SLIDE 44

44

Kangaroos!

slide-45
SLIDE 45

45

Demo

slide-46
SLIDE 46

46

Project 1 Advice

  • do not model everything first and only then

worry about animating

  • interleave modelling, animation
  • add body part, then animate it
  • discover if on wrong track sooner
  • depenencies: can’t get anim credit if no model
  • use middle body as scene graph root
  • check from all camera angles
slide-47
SLIDE 47

47

Project 1 Advice

  • finish all required parts before
  • going for extra credit
  • playing with lighting or viewing
  • ok to use glRotate, glTranslate, glScale
  • ok to use glutSolidCube, or build your own
  • where to put origin? your choice
  • center of object, range - .5 to +.5
  • corner of object, range 0 to 1
slide-48
SLIDE 48

48

Project 1 Advice

  • visual debugging
  • color cube faces differently
  • colored lines sticking out of glutSolidCube

faces

  • thinking about transformations
  • move physical objects around
  • play with demos
  • Brown scenegraph applets
slide-49
SLIDE 49

49

Project 1 Advice

  • first: jump cut from old to new position
  • all change happens in single frame
  • do last: add smooth transition
  • change happens gradually over 30 frames
  • key click triggers animation loop
  • explicitly redraw 30 times
  • linear interpolation:

each time, param += (new-old)/30

  • example: 5-frame transition
slide-50
SLIDE 50

50

Tail Wag Frame 0

slide-51
SLIDE 51

51

Tail Wag Frame 1

slide-52
SLIDE 52

52

Tail Wag Frame 2

slide-53
SLIDE 53

53

Tail Wag Frame 3

slide-54
SLIDE 54

54

Tail Wag Frame 4

slide-55
SLIDE 55

55

Tail Wag Frame 5

slide-56
SLIDE 56

56

Project 1 Advice

  • transitions
  • safe to linearly interpolate parameters for

glRotate/glTranslate/glScale

  • do not interpolate individual elements of 4x4

matrix!

slide-57
SLIDE 57

57

Style

  • you can lose up to 15% for poor style
  • most critical: reasonable structure
  • yes: parametrized functions
  • no: cut-and-paste with slight changes
  • reasonable names (variables, functions)
  • adequate commenting
  • rule of thumb: what if you had to fix a bug two

years from now?

  • global variables are indeed acceptable
slide-58
SLIDE 58

58

Version Control

  • bad idea: just keep changing same file
  • save off versions often
  • after got one thing to work, before you try starting

something else

  • just before you do something drastic
  • how?
  • not good: commenting out big blocks of code
  • a little better: save off file under new name
  • p1.almostworks.cpp, p1.fixedbug.cpp
  • much better:use version control software
  • strongly recommended
slide-59
SLIDE 59

59

Version Control Software

  • easy to browse previous work
  • easy to revert if needed
  • for maximum benefit, use meaningful comments to

describe what you did

  • “started on tail”, “fixed head breakoff bug”, “leg code

compiles but doesn’t run”

  • useful when you’re working alone
  • critical when you’re working together
  • many choices: RCS, CVS, subversion
  • RCS is a good place to start
  • easy to use, installed on lab machines
slide-60
SLIDE 60

60

RCS Basics

  • setup, just do once in a directory
  • mkdir RCS
  • checkin
  • ci –u p1.cpp
  • checkout
  • co –l p1.cpp
  • see history
  • rcs log p1.cpp
  • compare to previous version
  • rcsdiff p1.cpp
  • checkout old version to stdout
  • co –p1.5 p1.cpp > p1.cpp.5
slide-61
SLIDE 61

61

Graphical File Comparison

  • installed on lab machines
  • xfdiff4 (side by side comparison)
  • xwdiff (in-place, with crossouts)
  • Windows: windiff
  • http://keithdevens.com/files/windiff
  • Macs: FileMerge
  • in /Developer/Applications/Utilities