CS 543: Computer Graphics Lecture 7 (Part I): Projection Emmanuel

CS 543: Computer Graphics Lecture 7 (Part I): Projection Emmanuel

CS 543: Computer Graphics Lecture 7 (Part I): Projection Emmanuel Agu 3D Viewing and View Volume n Recall: 3D viewing set up Projection Transformation n View volume can have different shapes (different looks) n Different types of projection: parallel, perspective, orthographic, etc n Important to control n Projection type: perspective or orthographic, etc. n Field of view and image aspect ratio n Near and far clipping planes Perspective Projection n Similar to real world n Characterized by object foreshortening n Objects appear larger if they are closer to camera n Need: n Projection center n Projection plane n Projection: Connecting the object to the projection center camera projection plane Projection? Projectors Object in 3 space Projected image VRP COP Orthographic Projection n No foreshortening effect – distance from camera does not matter n The projection center is at infinite n Projection calculation – just drop z coordinates Field of View n Determine how much of the world is taken into the picture n Larger field of view = smaller object projection size center of projection field of view (view angle) y y z q z x Near and Far Clipping Planes n Only objects between near and far planes are drawn n Near plane + far plane + field of view = Viewing Frustum Near plane Far plane y z x Viewing Frustrum n 3D counterpart of 2D world clip window n Objects outside the frustum are clipped Near plane Far plane y z x Viewing Frustum Projection Transformation n In OpenGL: n Set the matrix mode to GL_PROJECTION n Perspective projection: use • gluPerspective(fovy, aspect, near, far) or • glFrustum(left, right, bottom, top, near, far) n Orthographic: • glOrtho(left, right, bottom, top, near, far) gluPerspective(fovy, aspect, near, far) n Aspect ratio is used to calculate the window width y y w z fovy z h eye x Aspect = w / h near far glFrustum(left, right, bottom, top, near, far) n Can use this function in place of gluPerspective() left top y z x right bottom near far glOrtho(left, right, bottom, top, near, far) n For orthographic projection top left y z x bottom right near far Example: Projection Transformation void display() { glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fovy, aspect, near, far); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0,0,1,0,0,0,0,1,0); display_all(); // your display routine } Demo n Nate Robbins demo on projection Projection Transformation n Projection – map the object from 3D space to 2D screen y y z z x x Perspective: gluPerspective() Parallel: glOrtho() Parallel Projection n After transforming the object to the eye space, parallel projection is relatively easy – we could just drop the Z n Xp = x n Yp = y n Zp = -d (Xp, Yp) n We actually want to keep Z – why? y (x,y,z) z x Parallel Projection n OpenGL maps (projects) everything in the visible volume into a canonical view volume (xmax, ymax, far) (1, 1, -1) (xmin, ymin, near) (-1, -1, 1) Canonical View Volume glOrtho(xmin, xmax, ymin, ymax,near, far) Projection: Need to build 4x4 matrix to do mapping from actual view volume to CVV Parallel Projection: glOrtho n Parallel projection can be broken down into two parts n Translation which centers view volume at origin n Scaling which reduces cuboid of arbitrary dimensions to canonical cube (dimension 2, centered at origin) Parallel Projection: glOrtho n Translation sequence moves midpoint of view volume to coincide with origin: n E.g. midpoint of x = (xmax + xmin)/2 n Thus translation factors: -(xmax+xmin)/2, -(ymax+ymin)/2, -(far+near)/2 n And translation matrix M1: æ 1 0 0 - ( x max + x min) / 2 ö ç ÷ ç 0 1 0 - ( y max + y min) / 2 ÷ ç 0 0 1 - ( z max + z min) / 2 ÷ ç ÷ ç ÷ è 0 0 0 1 ø Parallel Projection: glOrtho n Scaling factor is ratio of cube dimension to Ortho view volume dimension n Scaling factors: 2/(xmax-xmin), 2/(ymax-ymin), 2/(zmax-zmin) n Scaling Matrix M2: æ 2 ö ç 0 0 0÷ ç x max- x min ÷ 2 ç 0 0 0÷ ç y max- y min ÷ ç 2 ÷ ç 0 0 0÷ z max- z min ç ÷ è 0 0 0 1ø Parallel Projection: glOrtho Concatenating M1xM2, we get transform matrix used by glOrtho æ 2 ö ç 0 0 0÷ æ 1 0 0 - ( x max + x min) / 2 ö ç x max- x min ÷ ç ÷ 2 ç 0 0 0÷ ç 0 1 0 - ( y max + y min) / 2 ÷ ç y max- y min ÷ X ç ÷ ç 2 ÷ 0 0 1 - ( z max + z min) / 2 ç 0 0 0÷ ç ÷ z max- z min ç ÷ ç ÷ è 0 0 0 1 ø è 0 0 0 1ø æ2 /(x max- x min) 0 0 - (x max+ x min) /(x max- x min)ö ç ÷ ç 0 2 /(y max- y min) 0 - (y max+ min) /(y max- min) ÷ M 2´ M1 = ç 0 0 2 /(z max- z min) - (z max+ z min) /(z max- z min)÷ ç ÷ ç ÷ è 0 0 0 1 ø Refer: Hill, 7.6.2 Perspective Projection: Classical n Side view: y z x Projection plane y (x,y,z) Based on similar triangle: (x’,y’,z’) (0,0,0) y -z = z y’ d d d -z y’ = y x -z Eye (projection center) Perspective Projection: Classical n So (x*,y*) the projection of point, (x,y,z) unto the near plane N is given as: æ Px Py ö (x*, y *) = ç N , N ÷ è - Pz - Pz ø n Numerical example: Q. Where on the viewplane does P = (1, 0.5, -1.5) lie for a near plane at N = 1? n (x*, y*) = (1 x 1/1.5, 1 x 0.5/1.5) = (0.666, 0.333) Pseudodepth n Classical perspective projection projects (x,y) coordinates, drops z coordinates n But we need z to find closest object (depth testing) n Keeping actual distance of P from eye is cumbersome and slow 2 2 2 dis tan ce = (Px + Py + Pz ) n Introduce pseudodepth: all we need is measure of which objects are further if two points project to same (x,y) æ Px Py aPz + b ö (x*, y*, z *) = ç N , N , ÷ è - Pz - Pz - Pz ø n Choose a, b so that pseudodepth varies from –1 to 1 (canonical cube) Pseudodepth n Solving: aP + b z* = z - Pz n For two conditions, z* = -1 when Pz = -N and z* = 1 when Pz = -F, we can set up two simultaneuous equations n Solving: - (F + N) - 2FN a = b = F - N F - N Homogenous Coordinates n Would like to express projection as 4x4 transform matrix n Previously, homogeneous coordinates of the point P = (Px,Py,Pz) was (Px,Py,Pz,1) n Introduce arbitrary scaling factor, w, so that P = (wPx, wPy, wPz, w) (Note: w is non-zero) n For example, the point P = (2,4,6) can be expressed as n (2,4,6,1) n or (4,8,12,2) where w=2 n or (6,12,18,3) where w = 3 n So, to convert from homogeneous back to ordinary coordinates, divide all four terms by last component and discard 4th term Perspective Projection n Same for x. So we have: x’ = x x d / -z y’ = y x d / - z z’ = -d n Put in a matrix form: æ x ö æ 1 0 0 0 öæ x ö æ x' ö ç - d ( ) ÷ ç ÷ç ÷ ç ÷ z 0 1 0 0 ç y ÷ ç ÷ç y ÷ ç y ' ÷ - d çæ ÷ö ç ÷ = Þ ç z ÷ 0 0 1 0 ç z ÷ ç z ' ÷ è ø ç ÷ç ÷ ç ÷ ç - d ÷ 1 ç ÷ ç 0 0 ( ) 1 ÷ç 1 ÷ ç - z / d ÷ ç ÷ è - d øè ø è ø è 1 ø OpenGL assumes d = 1, i.e. the image plane is at z = -1 Perspective Projection n We are not done yet. n Need to modify the projection matrix to include a and b x’ 1 0 0 0 x y’ = 0 1 0 0 y z’ 0 0 a b z y w 0 0 (1/-d) 0 1 z x We have already solved a and b Z = 1 z = -1 Perspective Projection n Not done yet. OpenGL also normalizes the x and y ranges of the viewing frustum to [-1, 1] (translate and scale) n So, as in ortho to arrive at final projection matrix n we translate by n –(xmax + xmin)/2 in x n -(ymax + ymin)/2 in y n Scale by: n 2/(xmax – xmin) in x n 2/(ymax – ymin) in y Perspective Projection n Final Projection Matrix: æ 2N x max+ x min ö ç 0 0 ÷ ç x max- x min x max- x min ÷ 2N y max+ y min ç 0 0 ÷ ç y max- y min y max- y min ÷ ç - (F + N) - 2FN ÷ ç 0 0 ÷ F - N F - N ç ÷ è 0 0 -1 0 ø glFrustum(xmin, xmax, ymin, ymax, N, F) N = near plane, F = far plane Perspective Projection n After perspective projection, viewing frustum is also projected into a canonical view volume (like in parallel projection) (1, 1, -1) y z x (-1, -1, 1) Canonical View Volume References n Hill, chapter 7.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    33 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us