Last Time - PowerPoint PPT Presentation

About This Presentation
Title:

Last Time

Description:

Specify the region of space that we wish to render as a view volume ... How can we specify the view under these circumstances? 10/08/02 ... – PowerPoint PPT presentation

Number of Views:67
Avg rating:3.0/5.0
Slides: 34
Provided by: Stephen787
Category:
Tags: last | the | time | view

less

Transcript and Presenter's Notes

Title: Last Time


1
Last Time
  • Canonical view pipeline

Local Coordinate Space
World Coordinate Space
View Space
3D Screen Space
Display Space
Projection
2
Today
  • General Orthographic
  • Perspective viewing
  • Simple case
  • Completely general case

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 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)
4
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

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?

6
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

7
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

8
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?

9
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 uupw,
    normalized
  • We have two vectors in a right handed system, so
    to get the third vwu

10
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

11
All Together
  • We apply a translation and then a rotation, so
    the result is
  • And to go all the way from world to screen

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

13
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-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

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?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

15
Perspective Projection
  • Abstract camera model - box with a small hole in
    it
  • Pinhole cameras work in practice - camera
    obscura, etc

16
Distant Objects Are Smaller
17
Parallel lines meet
common to draw film plane in front of the focal
point
18
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

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)

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
21
Basic Case
  • Similar triangles gives

yv
P(xv,yv,zv)
P(xs,ys)
d
-zv
View Plane
22
Simple Perspective Transformation
  • Using homogeneous coordinates we can write

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 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

24
Clipping Planes
Left Clip Plane
Near Clip Plane
xv
Far Clip Plane
View Volume
l
n
-zv
f
r
Right Clip Plane
25
Where 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

26
Clipping Planes
Left Clip Plane
Near Clip Plane
xv
Far Clip Plane
View Volume
FOV
-zv
f
Right Clip Plane
27
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

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)
29
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

30
General 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

31
Complete Perspective Projection
  • After applying the perspective matrix, we still
    have to map the orthographic view volume to the
    canonical view volume

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

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
Write a Comment
User Comments (0)
About PowerShow.com