CS488 - Introduction to Computer Graphics - Lecture 13


Projecting a Polygon

Lines project to lines so projecting the vertices projects a polygon in 3D to a polygon on the view plane.


Sooner or later almost all polygons are converted to triangles

Scan Conversion

Scan converting a triangle (in 2D)

  1. Start at the scan line of the uppermost vertex
  2. Until you get to the middle vertex
  3. Until you get to the lowest vertex

Scan converting a polygon (in 2D)

sort vertices in direction perpendicular to the scan lines
for each scan line
   if scan line contains the next vertex
      update and sort edge list
   inside = false
   for each pixel
      if on next edge
         inside = !inside
      if (inside)
         paint pixel

Exercise. Expand "update and sort edge list" to make this a working algorithm.

Exercise. Hand execute your expanded algorithm on a triangle to make sure that you understand how it works.

Exercise. Hand execute your expanded algorithm on a non-convex polygon.

Hidden Surface Removal

Every polygon, in 3D, has two sides

It is very convenient to assume that surfaces are closed

Then we can say that every polygon has only a single side with visual properties

Backface Culling

Do not render any polygon with n.E < 0.

Does not handle occlusion, so we need to finish off with one of the following algorithms.

Painter's Algorithm

Sort polygons back to front, then render backmost first.

Warnock's Algorithm

Divide and conquer

  1. Start with whole window
  2. Divide into four subwindows
  3. For each window
  4. exit

Warnock's algorithm is

Depth-Buffer Algorithm (also called zed-buffer)

Use a second frame buffer with depth values stored in it

  1. Initalize depth-buffer to far plane distance
  2. If a pixel has z less than the current depth buffer value

The depth buffer algorithm is

  1. easy to implement
  2. fast, O(n)
  3. no longer memory-intensive, though it used to be

Almost all graphics cards have hardware depth buffers.

Using the depth buffer may be hard the first time.

Return to: