Learn something new every day More Info... by email
The OpenGL® depth buffer is one of the more misunderstood, complex and ultimately useful tools available to a three-dimensional (3D) graphics programmer. There are several ways the buffer can be optimized so the frame rate for a program can be increased, including properly setting the near and far clipping planes. Other tips include clearing the buffer between renders and avoiding scene compositions that can cause the depth to be an issue by placing objects too close together. Some two-dimensional (2D) graphics tricks can be performed easily and efficiently by using the OpenGL® depth buffer. The graphics card that is being used also can sometimes be an issue with depth, so using the correct setting can help to increase speed and reduce needless processing cycles.
One of the first issues that can affect the performance of the OpenGL® depth buffer, also called the Z buffer after the letter that traditionally marks the Cartesian depth plane, is the placement of the near and far clipping planes. These planes define the bounds of what should and should not be rendered in a scene, and their values indicate the distance from the viewer where the clipping should start and end, respectively. An intuitive thought would be to begin rendering at the point where the viewer is, setting the near plane to zero, but this is actually not correct. In fact, OpenGL® does not allow the near plane to be set to zero. If the value of the near plane is very small, a fraction of one for example, then the renderer might not show anything at all or it might fail to sort the depth buffer correctly.
This occurs because the closer an object is to the viewer, the more accurately OpenGL® calculates the position of the object. As the distance to the viewer gets closer to zero, the accuracy calculated increases exponentially. This slows down the rendering time and can lead to odd graphical artifacts and other problems, aside from the fact that the level of accuracy calculated is rarely ever needed.
When rendering 2D graphics, the OpenGL® depth buffer can help to make some operations easier. Using the depth buffer to slightly offset quads that are being used as tiles in a composition can help elements of a tiled scene to move smoothly around without spawning strange effects in the image caused by two polygons overlapping each other in the same plane. Similarly, prepared elements can be hidden out of the field of view or behind the far clipping plane so they can be quickly brought into the scene, possibly even utilizing transformations and rotations to give a special fade in or out effect.
Finally, while the OpenGL® depth buffer can support different hardware sizes for the buffer, it is best to use the 16-bit version. This is because, in most scenes, using a 32-bit buffer can slow the rendering time down. Also, not all graphics cards support 32-bit depth buffers, so dropping down to the lowest common denominator means more people will be able to run the 3D program as it was written.