Computer Graphics Zhen Jiang West Chester University
Topics Projection Visibility
Projection Film Plane Pinhole Multiple rays of projection
Projection Film Plane Pinhole One ray of projection
Projection Field of View Film Plane Field of View Pinhole Focal Length
Projection Film Plane Field of View Pinhole Focal Length
Projection Varying distance to film plane What does this do? Varying distance to film plane What does this do? Film Plane d1d1 Field of View Pinhole d2d2
Projection We use –Center of Projection (COP) –Projection Plane We use –Center of Projection (COP) –Projection Plane COP Projection Plane
Projection Perspective vs. Orthographic Views Perspective When COP at infinity, Orthographic View
Projection One-point Perpective –One Vanishing Point Two-point Perspective –Two Vanishing Points One-point Perpective –One Vanishing Point Two-point Perspective –Two Vanishing Points
Projection Our camera must model perspective
Projection How tall should this bunny be? COP Projection Plane
Projection d P (x, y, z)X Z View plane (0,0,0)x’ = ?
Projection Desired result for a point [x, y, z, 1]T projected onto the view plane: What could a matrix look like to do this? Desired result for a point [x, y, z, 1]T projected onto the view plane: What could a matrix look like to do this?
Projection
Projection Example: Or, in 3-D coordinates: Example: Or, in 3-D coordinates:
Projection Orthographic Camera Projection Orthographic Camera Projection
Projection glFrustum – for perspective projections –xmin –xmax –ymin –ymax –near –far glFrustum – for perspective projections –xmin –xmax –ymin –ymax –near –far –Camera looks along –z –min/max need not be symmetric about any axis –near and far planes are parallel to plane z=0 –Camera looks along –z –min/max need not be symmetric about any axis –near and far planes are parallel to plane z=0
Projection gluPerspective – for perspective projections –fovy –aspect –near –far gluPerspective – for perspective projections –fovy –aspect –near –far –fovy is the angle between top and bottom of viewing volume –aspect is ratio of width over height –This volume is symmetrical –View plane is parallel to camera –fovy is the angle between top and bottom of viewing volume –aspect is ratio of width over height –This volume is symmetrical –View plane is parallel to camera
Projection glOrtho – for orthographic projections –left –right –bottom –top –near –far glOrtho – for orthographic projections –left –right –bottom –top –near –far –(left, bottom) and (right, top) define dimensions of projection plane –near and far used to clip –(left, bottom) and (right, top) define dimensions of projection plane –near and far used to clip
Visibility Why might a polygon be invisible? –Polygon outside the field of view –Polygon is backfacing –Polygon is occluded by object(s) nearer the viewpoint For efficiency reasons, we want to avoid spending work on polygons outside field of view or backfacing For efficiency and correctness reasons, we need to know when polygons are occluded Why might a polygon be invisible? –Polygon outside the field of view –Polygon is backfacing –Polygon is occluded by object(s) nearer the viewpoint For efficiency reasons, we want to avoid spending work on polygons outside field of view or backfacing For efficiency and correctness reasons, we need to know when polygons are occluded
Visibility Remove polygons entirely outside frustum –Note that this includes polygons “behind” eye (actually behind near plane) Pass through polygons entirely inside frustum Modify remaining polygons to include only portions intersecting view frustum Remove polygons entirely outside frustum –Note that this includes polygons “behind” eye (actually behind near plane) Pass through polygons entirely inside frustum Modify remaining polygons to include only portions intersecting view frustum
Visibility Most objects in scene are typically “solid” More rigorously: compact, orientable manifolds –Must not cut through itself –Must have two distinct sides A sphere is orientable since it has two sides, 'inside' and 'outside'. A Mobius strip or a Klein bottle is not orientable –Cannot “walk” from one side to the other A sphere is a closed manifold whereas a plane is not Most objects in scene are typically “solid” More rigorously: compact, orientable manifolds –Must not cut through itself –Must have two distinct sides A sphere is orientable since it has two sides, 'inside' and 'outside'. A Mobius strip or a Klein bottle is not orientable –Cannot “walk” from one side to the other A sphere is a closed manifold whereas a plane is not
Visibility For most interesting scenes, some polygons will overlap: To show the correct image, we need to determine which polygons occlude which For most interesting scenes, some polygons will overlap: To show the correct image, we need to determine which polygons occlude which
Visibility Simple approach: display the polygons from back to front, “painting over” previous polygons: –Draw blue, then green, then orange Will this work in the general case? Simple approach: display the polygons from back to front, “painting over” previous polygons: –Draw blue, then green, then orange Will this work in the general case?
Visibility Intersecting polygons present a problem Even non-intersecting polygons can form a cycle with no valid visibility order: Intersecting polygons present a problem Even non-intersecting polygons can form a cycle with no valid visibility order:
Visibility Early visibility algorithms computed the set of visible polygon fragments directly, then showed the fragments to a display:
Visibility So, for about a decade (late 60s to late 70s) there was intense interest in finding efficient algorithms for hidden surface removal Examples: –Binary Space-Partition (BSP) Trees –The Z-buffer Algorithm So, for about a decade (late 60s to late 70s) there was intense interest in finding efficient algorithms for hidden surface removal Examples: –Binary Space-Partition (BSP) Trees –The Z-buffer Algorithm
Visibility We know how to rasterize polygons into an image discretized into pixels:
Visibility What happens if multiple primitives occupy the same pixel on the screen? Which is allowed to paint the pixel?
Visibility Simple!!! Easy to implement in hardware Polygons can be processed in arbitrary order Easily handles polygon interpenetration Simple!!! Easy to implement in hardware Polygons can be processed in arbitrary order Easily handles polygon interpenetration
Visibility Lots of memory (e.g. 1280x1024x32 bits) –With 16 bits cannot discern millimeter differences in objects at 1 km distance Read-Modify-Write in inner loop requires fast memory Hard to do analysisi –We don’t know which polygon to map pixel back to Shared edges are handled inconsistently –Ordering dependent Hard to simulate translucent polygons –We throw away color of polygons behind closest one Lots of memory (e.g. 1280x1024x32 bits) –With 16 bits cannot discern millimeter differences in objects at 1 km distance Read-Modify-Write in inner loop requires fast memory Hard to do analysisi –We don’t know which polygon to map pixel back to Shared edges are handled inconsistently –Ordering dependent Hard to simulate translucent polygons –We throw away color of polygons behind closest one