Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 91.427 Computer Graphics I, Fall 2010 OpenGL Transformations.

Similar presentations


Presentation on theme: "1 91.427 Computer Graphics I, Fall 2010 OpenGL Transformations."— Presentation transcript:

1 1 91.427 Computer Graphics I, Fall 2010 OpenGL Transformations

2 2 91.427 Computer Graphics I, Fall 2010 Objectives Learn how to carry out transformations in OpenGL ­Rotation ­Translation ­Scaling Introduce OpenGL matrix modes ­Model-view ­Projection

3 3 91.427 Computer Graphics I, Fall 2010 OpenGL Matrices In OpenGL 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 manipulate by ­glMatrixMode(GL_MODELVIEW); ­glMatrixMode(GL_PROJECTION);

4 4 91.427 Computer Graphics I, Fall 2010 Current Transformation Matrix (CTM) Conceptually: 4 x 4 homogeneous coordinate matrix, the current transformation matrix (CTM) part of state applied to all vertices passing down pipeline CTM defined in user program and loaded into transformation unit CTMvertices p p’ = Cp C

5 5 91.427 Computer Graphics I, Fall 2010 CTM operations CTM altered by loading new / postmutiplication Load identity matrix: C  I Load arbitrary matrix: C  M Load translation matrix: C  T Load rotation matrix: C  R Load scaling matrix: C  S Postmultiply by arbitrary matrix: C  CM Postmultiply by translation matrix: C  CT Postmultiply by rotation matrix: C  C R Postmultiply by scaling matrix: C  C S

6 6 91.427 Computer Graphics I, Fall 2010 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 consequence of doing postmultiplications. Let’s try again.

7 7 91.427 Computer Graphics I, Fall 2010 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 Each operation corresponds to one function call in program Note that last operation specified is first executed Doubts? Use parentheses to disambiguate

8 8 91.427 Computer Graphics I, Fall 2010 CTM in OpenGL OpenGL has model-view and projection matrix in pipeline concatenated to form CTM Can manipulate each by first setting correct matrix mode

9 9 91.427 Computer Graphics I, Fall 2010 Rotation, Translation, Scaling glRotatef(theta, vx, vy, vz) glTranslatef(dx, dy, dz) glScalef( sx, sy, sz) glLoadIdentity() Load identity matrix: Multiply on right: theta in degrees, ( vx, vy, vz ) define axis of rotation Each has float (f) and double (d) format ( glScaled )

10 10 91.427 Computer Graphics I, Fall 2010 Example Rotation about z axis by 30 degrees with fixed point of (1.0, 2.0, 3.0) Remember that last matrix specified is first applied glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(1.0, 2.0, 3.0); glRotatef(30.0, 0.0, 0.0, 1.0); glTranslatef(-1.0, -2.0, -3.0);

11 11 91.427 Computer Graphics I, Fall 2010 Arbitrary Matrices Can load and multiply by matrices defined in application program Matrix m is one dimension array of 16 elements = components of desired 4 x 4 matrix stored by columns In glMultMatrixf, m multiplies existing matrix on right glLoadMatrixf(m) glMultMatrixf(m)

12 12 91.427 Computer Graphics I, Fall 2010 Matrix Stacks Often want to save xformation matrices for use later ­Traversing hierarchical data structures (Chapter 10) ­Avoiding state changes when executing display lists OpenGL maintains stacks for each type of matrix ­Access present type (as set by glMatrixMode) by glPushMatrix() glPopMatrix()

13 13 91.427 Computer Graphics I, Fall 2010 Reading Back Matrices Can also access matrices (and other parts of state) by query functions For matrices, use as glGetIntegerv glGetFloatv glGetBooleanv glGetDoublev glIsEnabled double m[16]; glGetFloatv(GL_MODELVIEW, m);

14 14 91.427 Computer Graphics I, Fall 2010 Using Transformations Example: use idle function to rotate cube mouse function to change dir. of rot. Start with program that draws cube ( colorcube.c ) in standard way ­Centered at origin ­Sides aligned with axes ­Will discuss modeling later

15 15 91.427 Computer Graphics I, Fall 2010 main.c void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutCreateWindow("colorcube"); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutIdleFunc(spinCube); glutMouseFunc(mouse); glEnable(GL_DEPTH_TEST); glutMainLoop(); }

16 16 91.427 Computer Graphics I, Fall 2010 Idle and Mouse callbacks void spinCube() { theta[axis] += 2.0; if( theta[axis] > 360.0 ) theta[axis] -= 360.0; glutPostRedisplay(); } 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; }

17 17 91.427 Computer Graphics I, Fall 2010 Display callback void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(theta[0], 1.0, 0.0, 0.0); glRotatef(theta[1], 0.0, 1.0, 0.0); glRotatef(theta[2], 0.0, 0.0, 1.0); colorcube(); glutSwapBuffers(); } Note: fixed form of callbacks ==> variables such as theta and axis must be defined as globals Camera information is in standard reshape callback

18 18 91.427 Computer Graphics I, Fall 2010 Using the Model-view Matrix In OpenGL model-view matrix used to ­Position camera Can be done by rotations and translations but often easier to use gluLookAt ­Build models of objects Projection matrix used to define view volume, and select camera lens

19 19 91.427 Computer Graphics I, Fall 2010 Model-view and Projection Matrices Both manipulated by same functions But have to be careful because incremental changes always made by postmultiplication ­E.g., rotating model-view and projection matrices by same matrix not equivalent operations ­Postmultiplication of model-view matrix equivalent to premultiplication of projection matrix

20 20 91.427 Computer Graphics I, Fall 2010 Smooth Rotation Practical standpoint: often want to use transformations to move and reorient object smoothly ­Problem: find sequence of model-view matrices M 0, M 1,….., M n so that when applied successively to one or more objects see smooth transition For orientating object, can use the fact that every rotation corresponds to part of great circle on sphere ­Find axis of rotation and angle ­Virtual trackball (see text)

21 21 91.427 Computer Graphics I, Fall 2010 Incremental Rotation Consider two approaches ­For sequence of rotation matrices R 0, R 1,….., R n, find Euler angles for each and use R i = R iz R iy R ix Not very efficient ­Use final positions to determine axis and angle of rotation ­then increment only angle Quaternions can be more efficient than either

22 22 91.427 Computer Graphics I, Fall 2010 Quaternions Extension of imaginary numbers from 2- to 3-d Requires one real and three imaginary components i, j, k Quaternions can express rotations on sphere smoothly and efficiently Process: ­Model-view matrix  quaternion ­Carry out operations with quaternions ­Quaternion  Model-view matrix q = q 0 + q 1 i +q 2 j +q 3 k

23 23 91.427 Computer Graphics I, Fall 2010 Interfaces One major problem in interactive computer graphics: how to use 2-d devices ­E.g., mouse to interface with 3-d objects Example: how to form instance matrix? Some alternatives ­Virtual trackball ­3D input devices E.g., spaceball ­Use areas of screen Distance from center controls angle, position, scale depending on mouse button depressed


Download ppt "1 91.427 Computer Graphics I, Fall 2010 OpenGL Transformations."

Similar presentations


Ads by Google