overview of OpenGL
OpenGL extensions
Chapter 120
if (result) {
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE);
renderPart(i);
glDepthMask(GL_FALSE);
glColorMask (GL_FALSE, GL_FALSE, GL_FALSE);
}
}
/* Disable Occlusion Culling test */
glDisable(GL_OCCLUSION_TEST_HP);
/* Turn on writes to depth and color buffers */
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE);
The key idea behind occlusion culling is that the bounding box is much
simpler (i.e., fewer vertices) than the part itself. Occlusion culling
provides a quick means to test non-visibility of a part by testing its
bounding box.
It should also be noted that this occlusion culling functionality is very
useful for viewing frustum culling. If a part’s bounding box is not visible
for any reason (not just because it’s occluded in the Z-buffer) this test will
give correct results.
To maximize the probability that an object is occluded by other objects in
a scene, the database should be sorted and rendered from front to back.
Also, the database may be sorted hierarchically such that the outer
objects are rendered first and the inner are rendered last. An example
would be rendering the body of an automobile first and the engine and
transmission last. In this way, the engine would not be rendered due to
the bounding box test indicating that the engine is not visible.
For related information, see the functions: glGet, glEnable, glDisable,
and glIsEnabled.
Table 1-9 Enumerated Types for Occlusion
Extended Area Enumerated Type Description
Enable.Disable/IsEnabled GL_OCCLUSION_TEST_HP
Default: Disabled
pname variable.
Get* GL_OCCLUSION_TEST_RESULT_HP
Default: Zero (0)
pname variable
OGLImp.book Page 20 Tuesday, February 14, 2006 9:15 AM