Back-face Culling

[Hill: 406.407. Foley & van Dam: p. 663-664]

Back-face culling directly eliminates polygons not facing the viewer.


Back-Face Culling in VCS

Back-face culling can be performed in either VCS or NDCS. We'll first discuss face-culling in VCS.

A first attempt at performing back-face culling might directly use the z-component of the surface normal, as expressed in VCS. This does not always work, however.


A better strategy is to construct the plane equation for the polygon and to test whether the eye-point falls above or below this plane.
Plane(Peye)<0 implies the eyepoint is below the plane containing the polygon and that the polygon should thus be culled.

Summary for VCS culling

Face Culling in NDCS

In NDCS, the z-component of the surface normal does reflect the true visibility, as desired. If the z-component is positive, the normal points away from the eye and the polygon should thus be culled.

Computing Surface Normals

[Hill: 347-350]
In order to do the face culling, we need a surface normal.


Method 1
Use the cross-product of two polygon edges. The order in which vertices are stored should be consistent. For example, if polygon vertices are stored in CCW order when viewed from above the `front face', then we could use
  N = ( P2 - P1 ) x ( P3 - P2 )

Method 2
A more robust method is to use the projected area onto the yz, xz, and yz planes. To see that areas can be used to calculate a normal, first consider the 2D case.


The areas for the required 3D projections (and thus the components of the normal) can be calculated as follows: