Presentation is loading. Please wait.

Presentation is loading. Please wait.

Last Time Canonical view pipeline Projection Local Coordinate Space

Similar presentations


Presentation on theme: "Last Time Canonical view pipeline Projection Local Coordinate Space"— Presentation transcript:

1 Last Time Canonical view pipeline Projection Local Coordinate Space
World Coordinate Space View Space 3D Screen Space Display Space Projection 10/08/02 (c) 2002 University of Wisconsin, CS 559

2 (c) 2002 University of Wisconsin, CS 559
Today General Orthographic Perspective viewing Simple case Completely general case 10/08/02 (c) 2002 University of Wisconsin, CS 559

3 Simple Orthographic Projection
Specify the region of space that we wish to render as a view volume Assume that world coordinate axes line up with the image plane coordinate axes Viewer is looking in the –z direction, with x to the right and y up The view volume has: a near plane at z=n a far plane at z=f , (f < n) a left plane at x=l a right plane at x=r, (r>l) a top plane at y=t and a bottom plane at y=b, (b<t) y (l,t,f) z x (r,b,n) 10/08/02 (c) 2002 University of Wisconsin, CS 559

4 (c) 2002 University of Wisconsin, CS 559
Rendering the Volume To project, map the view volume onto the canonical view volume After that, we know how to map the view volume to the window The mapping looks similar to the one for canonical→window: 10/08/02 (c) 2002 University of Wisconsin, CS 559

5 General Orthographic Projection
We could look at the world from any direction, not just along –z The image could rotated in any way about the viewing direction: x need not be right, and y need not be up How can we specify the view under these circumstances? 10/08/02 (c) 2002 University of Wisconsin, CS 559

6 (c) 2002 University of Wisconsin, CS 559
Specifying a View The location of the eye in space A point in space for the center of projection, (ex,ey,ez) The direction in which we are looking: gaze direction Specified as a vector: (gx,gy,gz) This vector will be normal to the image plane A direction that we want to appear up in the image (upx,upy,upz), This vector does not have to be perpendicular to n We also need the size of the view volume – l,r,t,b,n,f Specified with respect to the eye and image plane, not the world 10/08/02 (c) 2002 University of Wisconsin, CS 559

7 (c) 2002 University of Wisconsin, CS 559
Getting there… We wish to end up in the “simple” situation, so we need a coordinate system with: A vector toward the viewer One pointing right in the image plane One pointing up in the image plane The origin at the eye We must: Define such a coordinate system, view space Transform points from the world space into view space Apply our simple projection from before 10/08/02 (c) 2002 University of Wisconsin, CS 559

8 (c) 2002 University of Wisconsin, CS 559
View Space Given our camera definition: Which point is the origin of view space? Which direction is the normal to the view plane, w? How do we find the right vector, u? How do we find the up vector, v? Given these points, how do we do the transformation? 10/08/02 (c) 2002 University of Wisconsin, CS 559

9 (c) 2002 University of Wisconsin, CS 559
View Space The origin is at the eye: (ex,ey,ez) The normal vector is the normalized viewing direction: It is actually more general to think of it as the vector perpendicular to the image plane, as you must do in the homework We know which way up should be, and we know we have a right handed system, so u=up×w, normalized: We have two vectors in a right handed system, so to get the third: v=w×u 10/08/02 (c) 2002 University of Wisconsin, CS 559

10 (c) 2002 University of Wisconsin, CS 559
World to View We must translate so the origin is at (ex,ey,ez) To complete the transformation we need to do a rotation After this rotation: The direction u in world space should be the direction (1,0,0) in view space The vector v should be (0,1,0) The vector w should be (0,0,1) The matrix that does that is: 10/08/02 (c) 2002 University of Wisconsin, CS 559

11 (c) 2002 University of Wisconsin, CS 559
All Together We apply a translation and then a rotation, so the result is: And to go all the way from world to screen: 10/08/02 (c) 2002 University of Wisconsin, CS 559

12 OpenGL and Transformations
OpenGL internally stores several matrices that control viewing of the scene The MODELVIEW matrix is intended to capture all the transformations up to the view space The PROJECTION matrix captures the view to screen conversion You also specify the mapping from the canonical view volume into window space Directly through function calls to set up the window Matrix calls multiply some matrix M onto the current matrix C, resulting in CM Set view transformation first, then set transformations from local to world space – last one set is first one applied 10/08/02 (c) 2002 University of Wisconsin, CS 559

13 (c) 2002 University of Wisconsin, CS 559
OpenGL Camera The default OpenGL image plane has u aligned with the x axis, v aligned with y, and n aligned with z Means the default camera looks along the negative z axis Makes it easy to do 2D drawing (no need for any view transformation) glOrtho(…) sets the view->canonical matrix Modifies the PROJECTION matrix gluLookAt(…) sets the world->view matrix Takes an image center point, a point along the viewing direction and an up vector Multiplies a world->view matrix onto the current MODELVIEW matrix You could do this yourself, using glMultMatrix(…) with the matrix from the previous slides 10/08/02 (c) 2002 University of Wisconsin, CS 559

14 Left vs Right Handed View Space
You can define u as right, v as up, and n as toward the viewer: a right handed system uv=w Advantage: Standard mathematical way of doing things You can also define u as right, v as up and n as into the scene: a left handed system vu=w Advantage: Bigger n values mean points are further away OpenGL is right handed Many older systems, notably the Renderman standard developed by Pixar, are left handed 10/08/02 (c) 2002 University of Wisconsin, CS 559

15 Perspective Projection
Abstract camera model - box with a small hole in it Pinhole cameras work in practice - camera obscura, etc 10/08/02 (c) 2002 University of Wisconsin, CS 559

16 Distant Objects Are Smaller
10/08/02 (c) 2002 University of Wisconsin, CS 559

17 (c) 2002 University of Wisconsin, CS 559
Parallel lines meet common to draw film plane in front of the focal point 10/08/02 (c) 2002 University of Wisconsin, CS 559

18 (c) 2002 University of Wisconsin, CS 559
Vanishing points Each set of parallel lines (=direction) meets at a different point: The vanishing point for this direction Classic artistic perspective is 3-point persepctive Sets of parallel lines on the same plane lead to collinear vanishing points: the horizon for that plane Good way to spot faked images 10/08/02 (c) 2002 University of Wisconsin, CS 559

19 Basic Perspective Projection
Assume you have transformed to view space, with x to the right, y up, and z back toward the viewer Assume the origin of view space is at the center of projection (the eye) Define a focal distance, d, and put the image plane there (note d is negative) 10/08/02 (c) 2002 University of Wisconsin, CS 559

20 Basic Perspective Projection
If you know P(xv,yv,zv) and d, what is P(xs,ys)? Where does a point in view space end up on the screen? P(xv,yv,zv) P(xs,ys) yv d -zv xv 10/08/02 (c) 2002 University of Wisconsin, CS 559

21 (c) 2002 University of Wisconsin, CS 559
Basic Case Similar triangles gives: yv P(xv,yv,zv) P(xs,ys) d -zv View Plane 10/08/02 (c) 2002 University of Wisconsin, CS 559

22 Simple Perspective Transformation
Using homogeneous coordinates we can write: 10/08/02 (c) 2002 University of Wisconsin, CS 559

23 Perspective View Volume
Recall the orthographic view volume, defined by a near, far, left, right, top and bottom plane The perspective view volume is also defined by near, far, left, right, top and bottom planes – the clip planes Near and far planes are parallel to the image plane: zv=n, zv=f Other planes all pass through the center of projection (the origin of view space) The left and right planes intersect the image plane in vertical lines The top and bottom planes intersect in horizontal lines 10/08/02 (c) 2002 University of Wisconsin, CS 559

24 (c) 2002 University of Wisconsin, CS 559
Clipping Planes Left Clip Plane Near Clip Plane xv Far Clip Plane View Volume l n -zv f r Right Clip Plane 10/08/02 (c) 2002 University of Wisconsin, CS 559

25 Where is the Image Plane?
Notice that it doesn’t really matter where the image plane is located, once you define the view volume You can move it forward and backward along the z axis and still get the same image, only scaled But we need to know where it is to define the clipping planes Assume the left/right/top/bottom planes are defined according to where they cut the near clip plane Or, define the left/right and top/bottom clip planes by the field of view 10/08/02 (c) 2002 University of Wisconsin, CS 559

26 (c) 2002 University of Wisconsin, CS 559
Clipping Planes Left Clip Plane Near Clip Plane xv Far Clip Plane View Volume FOV -zv f Right Clip Plane 10/08/02 (c) 2002 University of Wisconsin, CS 559

27 (c) 2002 University of Wisconsin, CS 559
OpenGL gluPerspective(…) Field of view in the y direction (vertical field-of-view) Aspect ratio (should match window aspect ratio) Near and far clipping planes Defines a symmetric view volume glFrustum(…) Give the near and far clip plane, and places where the other clip planes cross the near plane Defines the general case Used for stereo viewing, mostly 10/08/02 (c) 2002 University of Wisconsin, CS 559

28 Perspective Projection Matrices
We want a matrix that will take points in our perspective view volume and transform them into the orthographic view volume This matrix will go in our pipeline just before the orthographic projection matrix (r,t,n) (l,b,n) (r,t,n) (l,b,n) 10/08/02 (c) 2002 University of Wisconsin, CS 559

29 (c) 2002 University of Wisconsin, CS 559
Mapping Lines We want to map all the lines through the center of projection to parallel lines Points on lines through the center of projection map to the same point on the image Points on parallel lines map orthographically to the same point on the image If we convert the perspective case to the orthographic case, we can use all our existing methods The intersection points of lines with the near clip plane should not change The matrix that does this, not surprisingly, looks like the matrix for our simple perspective case 10/08/02 (c) 2002 University of Wisconsin, CS 559

30 (c) 2002 University of Wisconsin, CS 559
General Perspective This matrix leaves points with z=n unchanged It is just like the simple projection matrix, but it does some extra things to z to map the depth properly We can multiply a homogenous matrix by any number without changing the final point, so the two matrices above have the same effect 10/08/02 (c) 2002 University of Wisconsin, CS 559

31 Complete Perspective Projection
After applying the perspective matrix, we still have to map the orthographic view volume to the canonical view volume: 10/08/02 (c) 2002 University of Wisconsin, CS 559

32 OpenGL Perspective Projection
For OpenGL you give the distance to the near and far clipping planes The total perspective projection matrix resulting from a glFrustum call is: 10/08/02 (c) 2002 University of Wisconsin, CS 559

33 Near/Far and Depth Resolution
It may seem sensible to specify a very near clipping plane and a very far clipping plane Sure to contain entire scene But, a bad idea: OpenGL only has a finite number of bits to store screen depth Too large a range reduces resolution in depth - wrong thing may be considered “in front” See Shirley for a more complete explanation Always place the near plane as far from the viewer as possible, and the far plane as close as possible 10/08/02 (c) 2002 University of Wisconsin, CS 559


Download ppt "Last Time Canonical view pipeline Projection Local Coordinate Space"

Similar presentations


Ads by Google