1 / 28

Viewing and Transformation

Viewing and Transformation. The Camera Analogy 1/2. Set up tripod and pointing the camera at the scene (viewing transformation). Arrange the scene to be photographed into the desired composition (modeling transformation). The Camera Analogy 2/2. Choose a camera lens or adjust the zoom

zaria
Download Presentation

Viewing and Transformation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Viewing and Transformation Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  2. The Camera Analogy1/2 • Set up tripod and pointing the camera at the scene(viewing transformation). • Arrange the scene to be photographed into the desired composition (modeling transformation). Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  3. The Camera Analogy2/2 • Choose a camera lens or adjust the zoom (projection transformation). • Determine how large you want the final photograph to be (viewport transformation). Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  4. Overview Modelview Matrix Projection Matrix Viewport Transformation Perspective Division Vertex X Y Z W X Y eye coordinates clip coordinates normalized device coordinates window coordinates Object coordinates TODO: 1. Switch matrix mode to GL_PROJECTION and call glLoadIdentity(). 2. Call gluPerspective() if you want perspective projection. 3. Call gluOrtho2D() if you want orthogonal projection. TODO: 1. Call glViewport(). TODO: 1. Switch matrix mode to GL_MODELVIEW and call glLoadIdentity(). 2. Call gluLookAt(). 3. Your own modeling transformations. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  5. //Rotate then translate: glTranslatef( 1,0,0 ); glRotatef(45.0, 0,0,1 ); drawObject(); Matrices in OpenGL X Y Z W • Consider a transformation: (T1T2…Tn)。 (multiply object coordinate by Tn first, then Tn-1 …until T1 ), To build the transformation matrix: (T1T2…Tn) we shall multiply identity matrix by T1 then T2…until Tn, as: I。T1。T2。…。T3. • Thus, the order of issuing commands shall be inversed. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  6. Viewing Transformations1/2 • To positioning and aiming the camera. • Use gluLookAt() to indicate where the camera is placed and aimed. • If gluLookAt() was not called, the camera has a default position at the origin, points down the negative Z-axis, and an up-vector of positive Y-axis. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  7. Viewing Transformations2/2 • gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdoubpe upz ); • eyex, eyey, eyez is where the camera is positioned. • centerx, centery, centerz is where the camera looks at. • Upx, upy, upz is the up-vector of the camera. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  8. Modeling Transformations1/5 • To position and orient the models. • Perform rotate, translate, scale and combinations of these transformations. • In OpenGL, modeling and viewing transformation are combined into the modelview matrix before the transformation are applied. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  9. Modeling Transformations2/5 • glTranslate{fd}( TYPE x,TYPE y,TYPE z ); • Multiplies current matrix by a matrix that moves an object by x,y,z glTranslatef( 0, 0, -1 ); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  10. Modeling Transformations3/5 • glRotate{fd}( TYPR angle,TYPE x,TYPR y,TYPE z ); • Multiplies current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from origin to (x,y,z) with angle as the degrees. glRotatef( 45.0, 0, 0, 1); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  11. Modeling Transformations4/5 • glScale{fd}( TYPE x,TYPE y,TYPE z ); • Multiplies current matrix by a matrix that scales an object along axes. glScalef( 2.0, -0.5, 1.0 ); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  12. Modeling Transformations5/5 • The order of transformations is critical. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  13. Projection Transformations1/5 • Determine what the field of view(or viewing volume) is and how objects are projected onto the screen. • Two types of projections are provided: • Perspective projection • Orthographic projection Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  14. Projection Transformations2/5 • Perspective Projection • glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far ); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  15. Projection Transformations3/5 • gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far ); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  16. Projection Transformations4/5 • Orthographic Projection • glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far ); • gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); • For 2D projection matrix • The Z coordinates for objects are assumed to lie between –1.0 and 1.0. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  17. Projection Transformations5/5 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  18. Viewport Transformations • Transform the final image into some region of the window. • The viewport is measured in window coordinates. • glViewport( GLint x, GLint y, GLsizei width, GLsizei height ); • Initial values are (0, 0, winWidth, winHeight). Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  19. Matrix Manipulation1/3 • glMatrixMode( GLenum mode ); • Switch between modelview, projection, texture matrix mode.(GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE) • Each matrix mode has its own matrix stack. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  20. Matrix Manipulation2/3 • glLoadIdentity(); • Set current matrix to the 4x4 identity matrix. • glLoadMatrix{f,d}( const TYPE* m ); • Replaces current matrix by a user defined matrix. • The user defined matrix m is a 4x4 array. • glMultMatrix{f,d}( const TYPE* m ); • Multiplies current matrix by a user defined matrix. • The user defined matrix m is a 4x4 array. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  21. Matrix Manipulation3/3 • glPushMatrix(); • Push current matrix into matrix stack. • glPopMatrix(); • Pop matrix from matrix stack. • These stack operations of matrix is very useful for constructing a hierarchical structure. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  22. Transformation Program1/6 #include <GL/glut.h> static GLfloat year=0.0f, day=0.0f; void init() { glClearColor(0.0, 0.0, 0.0, 0.0); } void GL_display() { // clear the buffer glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glPushMatrix(); glutWireSphere(1.0, 20, 16); // the Sun glRotatef(year, 0.0, 1.0, 0.0); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  23. Transformation Program2/6 glTranslatef(3.0, 0.0, 0.0); glRotatef(day, 0.0, 1.0, 0.0); glutWireSphere(0.5, 10, 8); // the Planet glPopMatrix(); // swap the front and back buffers glutSwapBuffers(); } void GL_reshape(GLsizei w, GLsizei h) { // viewport transformation glViewport(0, 0, w, h); // projection transformation glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 1.0, 20.0); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  24. Transformation Program3/6 // viewing and modeling transformation glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 3.0, 5.0, // eye 0.0, 0.0, 0.0, // center 0.0, 1.0, 0.0); // up } // GLUT idle function void GL_idle() { day += 10.0; if(day > 360.0) day -= 360.0; year += 1.0; if(year > 360.0) year -= 360.0; // recall GL_display() function glutPostRedisplay(); } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  25. Transformation Program4/6 // GLUT keyboard function void GL_keyboard(unsigned char key, int x, int y) { switch(key) { case 'd': day += 10.0; if(day > 360.0) day -= 360.0; glutPostRedisplay(); break; case 'y': year += 1.0; if(year > 360.0) year -= 360.0; glutPostRedisplay(); break; case 'a': // assign idle function glutIdleFunc(GL_idle); break; case 'A': glutIdleFunc(0); break; case 27: exit(0); } } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  26. Transformation Program5/6 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitWindowSize(500, 500); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutCreateWindow("Planet"); init(); glutDisplayFunc(GL_display); glutReshapeFunc(GL_reshape); glutKeyboardFunc(GL_keyboard); glutMainLoop(); } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  27. Transformation Program6/6 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  28. Any Question? ? Tan-Chi Ho, CGGM Lab., CSIE of NCTU

More Related