Title: Last Time
1Last Time
Local Coordinate Space
World Coordinate Space
View Space
3D Screen Space
Display Space
Projection
2Today
- General Orthographic
- Perspective viewing
- Simple case
- Completely general case
3Simple 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 zn
- a far plane at zf , (f lt n)
- a left plane at xl
- a right plane at xr, (rgtl)
- a top plane at yt
- and a bottom plane at yb, (bltt)
y
(l,t,f)
z
x
(r,b,n)
4Rendering 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
5General 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?
6Specifying 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
7Getting 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
8View 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?
9View 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 uupw,
normalized - We have two vectors in a right handed system, so
to get the third vwu
10World 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
11All Together
- We apply a translation and then a rotation, so
the result is - And to go all the way from world to screen
12OpenGL 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
13OpenGL 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-gtcanonical matrix
- Modifies the PROJECTION matrix
- gluLookAt() sets the world-gtview matrix
- Takes an image center point, a point along the
viewing direction and an up vector - Multiplies a world-gtview matrix onto the current
MODELVIEW matrix - You could do this yourself, using glMultMatrix()
with the matrix from the previous slides
14Left 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?vw - 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?uw - 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
15Perspective Projection
- Abstract camera model - box with a small hole in
it
- Pinhole cameras work in practice - camera
obscura, etc
16Distant Objects Are Smaller
17Parallel lines meet
common to draw film plane in front of the focal
point
18Vanishing 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
19Basic 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)
20Basic 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
21Basic Case
yv
P(xv,yv,zv)
P(xs,ys)
d
-zv
View Plane
22Simple Perspective Transformation
- Using homogeneous coordinates we can write
23Perspective 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 zvn, zvf - 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
24Clipping Planes
Left Clip Plane
Near Clip Plane
xv
Far Clip Plane
View Volume
l
n
-zv
f
r
Right Clip Plane
25Where is the Image Plane?
- Notice that it doesnt 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
26Clipping Planes
Left Clip Plane
Near Clip Plane
xv
Far Clip Plane
View Volume
FOV
-zv
f
Right Clip Plane
27OpenGL
- 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
28Perspective 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)
29Mapping 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
30General Perspective
- This matrix leaves points with zn 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
31Complete Perspective Projection
- After applying the perspective matrix, we still
have to map the orthographic view volume to the
canonical view volume
32OpenGL 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
33Near/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