Transformations Angel 4 6 4 8 Angel Interactive

  • Slides: 43
Download presentation
Transformations Angel 4. 6 -4. 8 Angel: Interactive Computer Graphics 5 E © Addison-Wesley

Transformations Angel 4. 6 -4. 8 Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 1

Objectives • Introduce standard transformations – Rotation – Translation – Scaling – Shear •

Objectives • Introduce standard transformations – Rotation – Translation – Scaling – Shear • Derive homogeneous coordinate transformation matrices Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 2

General Transformations • A transformation maps points to other points and/or vectors to other

General Transformations • A transformation maps points to other points and/or vectors to other vectors v=T(u) Q=T(P) Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 3

Affine Transformations • Line preserving • Characteristic of many physically important transformations – Rigid

Affine Transformations • Line preserving • Characteristic of many physically important transformations – Rigid body transformations: rotation, translation – Scaling, shear • Importance in graphics is that we need only transform endpoints of line segments and let implementation draw line segment between the transformed endpoints Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 4

Pipeline Implementation T (from application program) u frame buffer T(u) transformation rasterizer T(v) v

Pipeline Implementation T (from application program) u frame buffer T(u) transformation rasterizer T(v) v u vertices T(u) pixels Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 5

Notation We will be working with both coordinate-free representations of transformations and representations within

Notation We will be working with both coordinate-free representations of transformations and representations within a particular frame P, Q, R: points in an affine space u, v, w: vectors in an affine space a, b, g: scalars p, q, r: representations of points -array of 4 scalars in homogeneous coordinates u, v, w: representations of vectors -array of 4 scalars in homogeneous coordinates Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 6

Translation • Move (translate, displace) a point to a new location P’ d P

Translation • Move (translate, displace) a point to a new location P’ d P • Displacement determined by a vector d – Three degrees of freedom – P’=P+d Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 7

How many ways? • Although we can move a point to a new location

How many ways? • Although we can move a point to a new location in infinite ways, when we move many points there is usually one way object translation: every point displaced by same vector Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 8

Translation Using Representations Using the homogeneous coordinate representation in some frame p=[ x y

Translation Using Representations Using the homogeneous coordinate representation in some frame p=[ x y z 1]T p’=[x’ y’ z’ 1]T d=[dx dy dz 0]T Hence p’ = p + d or x’=x+dx note that this expression is in four dimensions and expresses y’=y+dy point = vector + point z’=z+dz Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 9

Translation Matrix We can also express translation using a 4 x 4 matrix T

Translation Matrix We can also express translation using a 4 x 4 matrix T in homogeneous coordinates p’=Tp where T = T(dx, dy, dz) = This form is better for implementation because all affine transformations can be expressed this way and multiple transformations can be concatenated together Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 10

Rotation (2 D) Consider rotation about the origin by q degrees – radius stays

Rotation (2 D) Consider rotation about the origin by q degrees – radius stays the same, angle increases by q x' = r cos (f + q) y' = r sin (f + q) x' = x cos q – y sin q y' = x sin q + y cos q x = r cos f y = r sin f Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 11

Rotation about the z axis • Rotation about z axis in three dimensions leaves

Rotation about the z axis • Rotation about z axis in three dimensions leaves all points with the same z – Equivalent to rotation in two dimensions in planes of constant z x’ = x cos q – y sin q y’ = x sin q + y cos q z’ = z – or in homogeneous coordinates p’=Rz(q)p Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 12

Rotation Matrix R = Rz(q) = Angel: Interactive Computer Graphics 5 E © Addison-Wesley

Rotation Matrix R = Rz(q) = Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 13

Rotation about x and y axes • Same argument as for rotation about z

Rotation about x and y axes • Same argument as for rotation about z axis – For rotation about x axis, x is unchanged – For rotation about y axis, y is unchanged R = Rx(q) = Ry(q) = Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 14

Scaling Expand or contract along each axis (fixed point of origin) x’=sxx y’=syx z’=szx

Scaling Expand or contract along each axis (fixed point of origin) x’=sxx y’=syx z’=szx p’=Sp S = S(sx, sy, sz) = Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 15

Reflection corresponds to negative scale factors sx = -1 sy = 1 original sx

Reflection corresponds to negative scale factors sx = -1 sy = 1 original sx = -1 sy = -1 sx = 1 sy = -1 Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 16

Inverses • Although we could compute inverse matrices by general formulas, we can use

Inverses • Although we could compute inverse matrices by general formulas, we can use simple geometric observations – Translation: T-1(dx, dy, dz) = T(-dx, -dy, -dz) – Rotation: R -1(q) = R(-q) • Holds for any rotation matrix • Note that since cos(-q) = cos(q) and sin(-q)=sin(q) R -1(q) = R T(q) – Scaling: S-1(sx, sy, sz) = S(1/sx, 1/sy, 1/sz) Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 17

Shear • Helpful to add one more basic transformation • Equivalent to pulling faces

Shear • Helpful to add one more basic transformation • Equivalent to pulling faces in opposite directions Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 18

Shear Matrix • Consider simple shear along x axis x’ = x + y

Shear Matrix • Consider simple shear along x axis x’ = x + y cot q y’ = y z’ = z H(q) = Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 19

Transformations Angel 4. 9 -4. 10 Angel: Interactive Computer Graphics 5 E © Addison-Wesley

Transformations Angel 4. 9 -4. 10 Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 20

Objectives • Learn how to carry out transformations in Open. GL – Rotation –

Objectives • Learn how to carry out transformations in Open. GL – Rotation – Translation – Scaling • Introduce Open. GL matrix modes – Model-view – Projection Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 21

Concatenation • We can form arbitrary affine transformation matrices by multiplying together rotation, translation,

Concatenation • We can form arbitrary affine transformation matrices by multiplying together rotation, translation, and scaling matrices • Because the same transformation is applied to many vertices, the cost of forming a matrix M=ABCD is not significant compared to the cost of computing Mp for many vertices p • The difficult part is how to form a desired transformation from the specifications in the application Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 22

Order of Transformations • Note that matrix on the right is the first applied

Order of Transformations • Note that matrix on the right is the first applied • Mathematically, the following are equivalent p’ = ABCp = A(B(Cp)) • Note many references use column matrices to represent points. In terms of column matrices p’T = p. TCTBTAT Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 23

General Rotation About the Origin A rotation by q about an arbitrary axis can

General Rotation About the Origin A rotation by q about an arbitrary axis can be decomposed into the concatenation of rotations about the x, y, and z axes R(q) = Rz(qz) Ry(qy) Rx(qx) y qx qy qz are called the Euler angles Note that rotations do not commute We can use rotations in another order but with different angles q v x z Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 24

Rotation About a Fixed Point other than the Origin Move fixed point to origin

Rotation About a Fixed Point other than the Origin Move fixed point to origin Rotate Move fixed point back M = T(pf) R(q) T(-pf) Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 25

Instancing • In modeling, we often start with a simple object centered at the

Instancing • In modeling, we often start with a simple object centered at the origin, oriented with the axis, and at a standard size • We apply an instance transformation to its vertices to Scale Orient Locate Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 26

Open. GL Matrices • In Open. GL matrices are part of the state •

Open. GL Matrices • In Open. GL matrices are part of the state • Multiple types – Model-View (GL_MODELVIEW) – Projection (GL_PROJECTION) – Texture (GL_TEXTURE) (ignore for now) – Color(GL_COLOR) (ignore for now) • Single set of functions for manipulation • Select which to manipulated by – gl. Matrix. Mode(GL_MODELVIEW); – gl. Matrix. Mode(GL_PROJECTION); Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 27

Current Transformation Matrix (CTM) • Conceptually there is a 4 x 4 homogeneous coordinate

Current Transformation Matrix (CTM) • Conceptually there is a 4 x 4 homogeneous coordinate matrix, the current transformation matrix (CTM) that is part of the state and is applied to all vertices that pass down the pipeline • The CTM is defined in the user program and loaded into a transformation unit C p vertices CTM p’=Cp vertices Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 28

CTM operations • The CTM can be altered either by loading a new CTM

CTM operations • The CTM can be altered either by loading a new CTM or by postmutiplication Load an identity matrix: C I Load an arbitrary matrix: C M Load a translation matrix: C T Load a rotation matrix: C R Load a scaling matrix: C S Postmultiply by an arbitrary matrix: C CM Postmultiply by a translation matrix: C CT Postmultiply by a rotation matrix: C C R Postmultiply by a scaling matrix: C C S Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 29

Rotation about a Fixed Point • • Start with identity matrix: C I Move

Rotation about a Fixed Point • • Start with identity matrix: C I Move fixed point to origin: C CT Rotate: C CR Move fixed point back: C CT -1 • Result: C = TR T – 1 which is backwards. • This result is a consequence of doing postmultiplications. • Let’s try again. Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 30

Reversing the Order • We want C = T – 1 R T •

Reversing the Order • We want C = T – 1 R T • so we must do the operations in the following order • • C I C CT -1 C CR C CT Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 31

CTM in Open. GL • Open. GL has a model-view and a projection matrix

CTM in Open. GL • Open. GL has a model-view and a projection matrix in the pipeline which are concatenated together to form the CTM • Can manipulate each by first setting the correct matrix mode Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 32

Rotation, Translation, Scaling Load an identity matrix: gl. Load. Identity() Multiply on right: gl.

Rotation, Translation, Scaling Load an identity matrix: gl. Load. Identity() Multiply on right: gl. Rotatef(theta, vx, vy, vz) theta in degrees, (vx, vy, vz) define axis of rotation gl. Translatef(dx, dy, dz) gl. Scalef( sx, sy, sz) Each has a float (f) and double (d) format (gl. Scaled) Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 33

Example • Rotation about z axis by 30 degrees with a fixed point of

Example • Rotation about z axis by 30 degrees with a fixed point of (1. 0, 2. 0, 3. 0) gl. Matrix. Mode(GL_MODELVIEW); gl. Load. Identity(); gl. Translatef(1. 0, 2. 0, 3. 0); gl. Rotatef(30. 0, 1. 0); gl. Translatef(-1. 0, -2. 0, -3. 0); • Remember that last matrix specified in the program is the first applied Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 34

Arbitrary Matrices • Can load and multiply by matrices defined in the application program

Arbitrary Matrices • Can load and multiply by matrices defined in the application program gl. Load. Matrixf(m) gl. Mult. Matrixf(m) • The matrix m is a one dimension array of 16 elements which are the components of the desired 4 x 4 matrix stored by columns • In gl. Mult. Matrixf, m multiplies the existing matrix on the right Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 35

Matrix Stacks • In many situations we want to save transformation matrices for use

Matrix Stacks • In many situations we want to save transformation matrices for use later – Traversing hierarchical data structures (Chapter 10) – Avoiding state changes when executing display lists • Open. GL maintains stacks for each type of matrix – Access present type (as set by gl. Matrix. Mode) by gl. Push. Matrix() gl. Pop. Matrix() Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 36

Reading Back Matrices • Can also access matrices (and other parts of the state)

Reading Back Matrices • Can also access matrices (and other parts of the state) by query functions gl. Get. Integerv gl. Get. Floatv gl. Get. Booleanv gl. Get. Doublev gl. Is. Enabled • For matrices, we use as double m[16]; gl. Get. Floatv(GL_MODELVIEW, m); Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 37

Using Transformations • Example: use idle function to rotate a cube and mouse function

Using Transformations • Example: use idle function to rotate a cube and mouse function to change direction of rotation • Start with a program that draws a cube (colorcube. c) in a standard way – Centered at origin – Sides aligned with axes – We did this previously Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 38

main. c void main(int argc, char **argv) { glut. Init(&argc, argv); glut. Init. Display.

main. c void main(int argc, char **argv) { glut. Init(&argc, argv); glut. Init. Display. Mode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glut. Init. Window. Size(500, 500); glut. Create. Window("colorcube"); glut. Reshape. Func(my. Reshape); glut. Display. Func(display); glut. Idle. Func(spin. Cube); glut. Mouse. Func(mouse); gl. Enable(GL_DEPTH_TEST); glut. Main. Loop(); } Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 39

Idle and Mouse callbacks void spin. Cube() { theta[axis] += 2. 0; if( theta[axis]

Idle and Mouse callbacks void spin. Cube() { theta[axis] += 2. 0; if( theta[axis] > 360. 0 ) theta[axis] -= 360. 0; glut. Post. Redisplay(); } void mouse(int btn, int state, int x, int y) { if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0; if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1; if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2; } Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 40

Display callback void display() { gl. Clear(GL_COLOR_BUFFER_BIT | gl. Load. Identity(); gl. Rotatef(theta[0], 1.

Display callback void display() { gl. Clear(GL_COLOR_BUFFER_BIT | gl. Load. Identity(); gl. Rotatef(theta[0], 1. 0, 0. 0, gl. Rotatef(theta[1], 0. 0, 1. 0, gl. Rotatef(theta[2], 0. 0, colorcube(); glut. Swap. Buffers(); } GL_DEPTH_BUFFER_BIT); 0. 0); 1. 0); Note that because of fixed from of callbacks, variables such as theta and axis must be defined as globals Camera information is in standard reshape callback Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 41

Using the Model-view Matrix • In Open. GL the model-view matrix is used to

Using the Model-view Matrix • In Open. GL the model-view matrix is used to – Position the camera • Can be done by rotations and translations but is often easier to use glu. Look. At – Build models of objects • The projection matrix is used to define the view volume and to select a camera lens Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 42

Model-view and Projection Matrices • Although both are manipulated by the same functions, we

Model-view and Projection Matrices • Although both are manipulated by the same functions, we have to be careful because incremental changes are always made by postmultiplication – For example, rotating model-view and projection matrices by the same matrix are not equivalent operations. Postmultiplication of the model-view matrix is equivalent to premultiplication of the projection matrix Angel: Interactive Computer Graphics 5 E © Addison-Wesley 2009 43