opengl projection tutorial view frustum
play

OpenGL Projection Tutorial View Frustum y=top y FOV -z z=-near - PDF document

Utah School of Computing Spring 2013 OpenGL Projection Tutorial View Frustum y=top y FOV -z z=-near Parameterized by: [ glFrustum ] z=-far left,right,top,bottom (generally symmetric) near,far Or, when symmetric, by: [


  1. Utah School of Computing Spring 2013 OpenGL Projection Tutorial View Frustum y=top y FOV -z z=-near Parameterized by: [ glFrustum ] z=-far • left,right,top,bottom (generally symmetric) • near,far Or, when symmetric, by: [ gluPerspective ] • Field of view (FOV), aspect ratio • near,far • Aspect ratio is the x/y ratio of the final displayed image. Common values: • 4/3 for TV & old movies; 1.66 for cartoons & European movies; 16/9 for American movies & HDTV; 2.35 for epic movies aspect ratio= right  left top  bottom  right top tan( FOV / 2)  top near Spring 2008 Utah School of Computing 1 OpenGL gluPerspective to glFrustum • gluPerspective( … ) • As noted previously, glu functions don’t add basic functionality, they are just more convenient – Field of view in the y direction, FOV , (vertical field-of-view) – So how does gluPerspective convert to glFrustum ? – Aspect ratio, a , should match window aspect ratio – Symmetric, so only need t and l – Near and far clipping planes, n and f – Defines a symmetric view volume y • glFrustum( … ) ? t – Give the near and far clip plane, and places where the other clip planes cross the near plane FOV / 2 – Defines the general case z n – Used for stereo viewing, mostly Demo Projection Tutor Viewing System PDFs Computer Graphics CS5600

  2. Utah School of Computing Spring 2013 3D Projection 3D Projection y y Projection Projection Plane Plane (x,y,z) (x,y,z) (x’,y’,-d) h  z     (x’,y’,-d) p d h ' '  X X d * X Y Y d * Y       z ' ' Y X Z d Z Z d Z     p d Utah School of Computing 7 Utah School of Computing 8 3D Projection 3D Projection                 1 0 0 0 x x * d 1 0 0 0 x x * d x x               z   z 0 1 0 0 y y * d 0 1 0 0 y y * d y   y                     Proj Proj z z                 0 0 1 0 z 0 0 1 0 z z z d d                 1 z 1 z 0 0 0 0 0 0   1       1             1     1     d d d d How many vanishing points? Utah School of Computing 9 Utah School of Computing 10 Canonical View Volume PDF of OpenGL projection Computer Graphics CS5600

  3. Utah School of Computing Spring 2013 Canonical to Window Complete Perspective Projection • Canonical Viewing Volume (what is it?) • After applying the perspective matrix, we map the orthographic view volume to the canonical view volume: • To Window      2 r l       0 0    n n 1   x x r l r l   n 0 0 0 0 0          2 2  2 t b    0 n 0 0 0 0              n n 1 M M M   t b t b  y y       persp O P 0 0   0 0 n f nf M 2   window     2 2 0 0 0      0 0 1 0    n f  0 0 1 0    0 0 0 1      0 0 0 1   M M M M M M M M sys window persp view sys window persp view Complete Perspective Projection Full OpenGL Ortho Projection • After applying the perspective matrix, we map the orthographic view volume to the canonical view volume:      2 r l  0 0        r l r l   n 0 0 0         2 t b  0 0 0 n 0 0             M M M t b t b       persp O P   0 0 n f nf 2     0 0 0      0 0 1 0  n f      0 0 0 1  M M M M sys window persp view glViewport() glufrustum() gluLookAt() Full OpenGL Perspective Proj GL Matrix Example // Clear screen glClear(GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT); // Set up projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fov,aspect,nearclip,farclip); // Set up camera view glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(eye.x,eye.y,eye.z,target.x,target.y,target.z,0,1,0); // Draw all objects for(each object) { glPushMatrix(); glTranslatef(pos[i].x,pos[i].y,pos[i].z); glRotatef(axis[i].x,axis[i].y,axis[i].z,angle[i]); Model[i]->Draw(); glPopMatrix(); } // Finish glFlush(); glSwapBuffers(); Computer Graphics CS5600

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend