Transformations IV Week 3, Mon Jan 22
description
Transcript of Transformations IV Week 3, Mon Jan 22
![Page 1: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/1.jpg)
University of British ColumbiaCPSC 314 Computer Graphics
Jan-Apr 2007
Tamara Munzner
http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007
Transformations IV
Week 3, Mon Jan 22
![Page 2: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/2.jpg)
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
![Page 3: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/3.jpg)
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
![Page 4: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/4.jpg)
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
ZX
B
C
A
Y
ZX
B
C
A
(cx, cy, cz,
1)
(ax, ay, az,
1)
(bx, by, bz,
1)
1
0
0
1
1000
0
0
0
)(zzz
yyy
xxx
cba
cba
cba
XR Aaaa zyx )1,,,(
![Page 5: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/5.jpg)
5
Transformation Hierarchies
![Page 6: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/6.jpg)
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 roadroad
stripe1stripe1 stripe2stripe2 ...... car1car1 car2car2 ......
w1w1 w3w3w2w2 w4w4
![Page 7: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/7.jpg)
7
Transformation Hierarchy Example 1
torsotorso
headheadRUarmRUarm
RLarmRLarm
RhandRhand
RUlegRUleg
RLlegRLleg
RfootRfoot
LUarmLUarm
LLarmLLarm
LhandLhand
LUlegLUleg
LLlegLLleg
LfootLfoot
worldworld
trans(0.30,0,0) rot(z, )trans(0.30,0,0) rot(z, )
![Page 8: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/8.jpg)
8
Transformation Hierarchies
• hierarchies don’t fall apart when changed
• transforms apply to graph nodes beneath
![Page 9: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/9.jpg)
9
Demo: Brown Applets
http://www.cs.brown.edu/exploratories/http://www.cs.brown.edu/exploratories/freeSoftware/catalogs/scenegraphs.htmlfreeSoftware/catalogs/scenegraphs.html
![Page 10: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/10.jpg)
10
Transformation Hierarchy Example 2
• draw same 3D data with different transformations: instancing
![Page 11: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/11.jpg)
11
Matrix Stacks
• challenge of avoiding unnecessary computation• using inverse to return to origin
• computing incremental T1 -> T2Object coordinatesObject coordinates
World coordinatesWorld coordinates
TT11(x)(x) TT22(x)(x)
TT33(x)(x)
![Page 12: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/12.jpg)
12
Matrix Stacks
glPushMatrix()glPushMatrix()
glPopMatrix()glPopMatrix()
AA
BB
CC
AA
BB
CC
AA
BB
CC
CC
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)
AA
BB
CC
DD
DrawSquare()DrawSquare()
glTranslate3f(1,0,0)glTranslate3f(1,0,0)
DrawSquare()DrawSquare()
glPushMatrix()glPushMatrix()
glPopMatrix()glPopMatrix()
![Page 13: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/13.jpg)
13
Modularization
• drawing a scaled square• push/pop ensures no coord system change
void drawBlock(float k) {void drawBlock(float k) { glPushMatrix();glPushMatrix();
glScalef(k,k,k);glScalef(k,k,k); glBegin(GL_LINE_LOOP);glBegin(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();}}
![Page 14: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/14.jpg)
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)
![Page 15: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/15.jpg)
15
Transformation Hierarchy Example 3
FFWW
FFhh
FFhh
glLoadIdentity();glLoadIdentity();glTranslatef(4,1,0);glTranslatef(4,1,0);glPushMatrix();glPushMatrix();glRotatef(45,0,0,1);glRotatef(45,0,0,1);glTranslatef(0,2,0);glTranslatef(0,2,0);glScalef(2,1,1);glScalef(2,1,1);glTranslate(1,0,0);glTranslate(1,0,0);glPopMatrix();glPopMatrix();
FF11
FF hh
FF hh
FF hh
FF hh
FFhh
![Page 16: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/16.jpg)
16
Transformation Hierarchy Example 4
4
15 3
2
xx
yy
glTranslate3f(x,y,0);glTranslate3f(x,y,0);glRotatef( ,0,0,1);glRotatef( ,0,0,1);DrawBody();DrawBody();glPushMatrix();glPushMatrix(); glTranslate3f(0,7,0);glTranslate3f(0,7,0); DrawHead();DrawHead();glPopMatrix();glPopMatrix();glPushMatrix();glPushMatrix(); glTranslate(2.5,5.5,0);glTranslate(2.5,5.5,0); glRotatef( ,0,0,1);glRotatef( ,0,0,1); DrawUArm();DrawUArm(); glTranslate(0,-3.5,0);glTranslate(0,-3.5,0); glRotatef( ,0,0,1);glRotatef( ,0,0,1); DrawLArm();DrawLArm();glPopMatrix();glPopMatrix();... (draw other arm)... (draw other arm)
1
2
3
![Page 17: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/17.jpg)
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
![Page 18: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/18.jpg)
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
![Page 19: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/19.jpg)
19
Single Parameter: Complex
• mechanisms not easily expressible with affine transforms
http://www.flying-pig.co.ukhttp://www.flying-pig.co.uk
![Page 20: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/20.jpg)
20
Single Parameter: Complex
• mechanisms not easily expressible with affine transforms
http://www.flying-pig.co.uk/mechanisms/pages/irregular.htmlhttp://www.flying-pig.co.uk/mechanisms/pages/irregular.html
![Page 21: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/21.jpg)
21
Display Lists
![Page 22: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/22.jpg)
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 examplehttp://www.lighthouse3d.com/opengl/displaylists
![Page 23: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/23.jpg)
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(0.0f ,0.75f, 0.0f); glTranslatef(0.0f ,0.75f, 0.0f); glutSolidSphere(0.75f,20,20); glutSolidSphere(0.75f,20,20);
// Draw Head // Draw Head glTranslatef(0.0f, 1.0f, 0.0f); glTranslatef(0.0f, 1.0f, 0.0f); glutSolidSphere(0.25f,20,20); glutSolidSphere(0.25f,20,20);
// Draw Nose // Draw Nose glColor3f(1.0f, 0.5f , 0.5f); glColor3f(1.0f, 0.5f , 0.5f); glRotatef(0.0f,1.0f, 0.0f, 0.0f); glRotatef(0.0f,1.0f, 0.0f, 0.0f); glutSolidCone(0.08f,0.5f,10,2); glutSolidCone(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(0.05f, 0.10f, 0.18f); glTranslatef(0.05f, 0.10f, 0.18f); glutSolidSphere(0.05f,10,10); glutSolidSphere(0.05f,10,10); glTranslatef(-0.1f, 0.0f, 0.0f); glTranslatef(-0.1f, 0.0f, 0.0f); glutSolidSphere(0.05f,10,10); glutSolidSphere(0.05f,10,10); glPopMatrix(); glPopMatrix();
![Page 24: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/24.jpg)
24
Instantiate Many Snowmen
// Draw 36 Snowmen // Draw 36 Snowmen
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);
// Call the function to draw a snowman // Call the function to draw a snowman
drawSnowMan();drawSnowMan();
glPopMatrix(); glPopMatrix();
} } 36K polygons, 55 FPS
![Page 25: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/25.jpg)
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 = glGenLists(1); snowManDL = glGenLists(1); glNewList(snowManDL,GL_COMPILE); glNewList(snowManDL,GL_COMPILE); drawSnowMan(); drawSnowMan(); glEndList(); glEndList(); return(snowManDL); } return(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
![Page 26: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/26.jpg)
26
Transforming Normals
![Page 27: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/27.jpg)
27
Transforming Geometric Objects
• lines, polygons made up of vertices
• just transform the vertices, interpolate between
• does this work for everything? no!
![Page 28: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/28.jpg)
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),
or computed from neighboring polygons
1P
N
2P
3P)()( 1312 PPPPN
N
![Page 29: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/29.jpg)
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?
0
x
y
z
11 12 13
21 22 23
31 32 33
'
'
'
0 00 0 0 1
x
y
z
Nx Nxm m m T
Ny Nym m m T
Nz Nzm m m T
![Page 30: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/30.jpg)
30
Transforming Normals
• translations OK: w=0 means unaffected
• rotations OK
• uniform scaling OK
• these all maintain direction
010000
'
'
'
333231
232221
131211
z
y
x
Tmmm
Tmmm
Tmmm
z
y
x
z
y
x
![Page 31: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/31.jpg)
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)
![Page 32: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/32.jpg)
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
0
0
2 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1
1
0
0
![Page 33: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/33.jpg)
33
0PN
Planes and Normals
• plane is all points perpendicular to normal• (with dot product)
• (matrix multiply requires transpose)
• explicit form: plane =
N T P 0
N
a
b
c
d
,P
x
y
z
w
ax by cz d
![Page 34: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/34.jpg)
34
MPP 'PN QNN '
NTP 0 if QTM I
0'' PN T
0)()( MPQN T
0MPQN TT
IMQT
Q M 1 T
given M,given M,what should Q be?what should Q be?
stay perpendicularstay perpendicular
substitute from abovesubstitute 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
![Page 35: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/35.jpg)
35
Assignments
![Page 36: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/36.jpg)
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
![Page 37: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/37.jpg)
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
![Page 38: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/38.jpg)
38
Articulated Armadillo
![Page 39: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/39.jpg)
39
Articulated Armadillo
![Page 40: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/40.jpg)
40
More Fun With Boxes and Matrices:
![Page 41: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/41.jpg)
41
Lemurs!
![Page 42: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/42.jpg)
42
Giraffes!
![Page 43: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/43.jpg)
43
Giraffes!
![Page 44: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/44.jpg)
44
Kangaroos!
![Page 45: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/45.jpg)
45
Demo
![Page 46: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/46.jpg)
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
![Page 47: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/47.jpg)
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
![Page 48: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/48.jpg)
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
![Page 49: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/49.jpg)
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
![Page 50: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/50.jpg)
50
Tail Wag Frame 0
![Page 51: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/51.jpg)
51
Tail Wag Frame 1
![Page 52: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/52.jpg)
52
Tail Wag Frame 2
![Page 53: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/53.jpg)
53
Tail Wag Frame 3
![Page 54: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/54.jpg)
54
Tail Wag Frame 4
![Page 55: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/55.jpg)
55
Tail Wag Frame 5
![Page 56: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/56.jpg)
56
Project 1 Advice
• transitions• safe to linearly interpolate parameters for
glRotate/glTranslate/glScale
• do not interpolate individual elements of 4x4 matrix!
![Page 57: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/57.jpg)
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
![Page 58: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/58.jpg)
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
![Page 59: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/59.jpg)
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
![Page 60: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/60.jpg)
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
![Page 61: Transformations IV Week 3, Mon Jan 22](https://reader036.fdocuments.in/reader036/viewer/2022062422/56813b3a550346895da40e2b/html5/thumbnails/61.jpg)
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