z' -> (z*(zf + zn) -2*zf*zn ) / z*(zf - zn)
As zn -> 0 what happens?
Note the possible numeric problems.
Adding extra vertices removes the problems
Clipping a polygon reduces to clipping edges against
The clipping algorithm takes an ordered set of vertices [vi] and produces an ordered set of vertices [wi]. It relies on the following
The algorithm is
for each edge of clipping region for each edge of polygon // must be in sequence clip edge against region switch (result of clip) case "all inside" output leading vertex of edge case "all outside" do nothing case "cross edge leaving region" output crossing point case "cross entering region" output crossing point output leading vertex of edge
Exercise. Hand execute this algorithm on several cases to make sure that you understand exactly how it works.
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 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 pixelt
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.
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
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
Sort polygons back to front, then render backmost first.
Divide and conquer
then paint the window
Warnock's algorithm is
Use a second frame buffer with depth values stored in it
The depth buffer algorithm is
Almost all graphics cards have hardware depth buffers.
Using the depth buffer may be hard the first time.
For assignment 3 you need to be able to rotate with the mouse
The virtual trackball
You need to modify the sample code.
For assignment 3 you need to be able to select graphical objects with the mouse
The simple principle
For the assignment let GL do it for you.
See the notes.