Drawing Coplanar Primitives Widthout Polygon Offset
You can simulate the effects of polygon offset by tinkering with glDepthRange(). For example, you might code the following:
glDepthRange (0.1, 1.0); /* Draw underlying geometry */ glDepthRange (0.0, 0.9); /* Draw overlying geometry */
This code provides a fixed offset in Z, but doesn't account for the polygon slope. It's roughly equivalent to using glPolygonOffset with a factor parameter of 0.0.
You can render coplanar primitives with the Stencil buffer in many creative ways. The OpenGL Programming Guide outlines one well-know method. The algorithm for drawing a polygon and its outline is as follows:
- Draw the outline into the color, depth, and stencil buffers.
- Draw the filled primitive into the color buffer and depth buffer, but only where the stencil buffer is clear.
- Mask off the color and depth buffers, and render the outline to clear the stencil buffer.
On some SGI OpenGL platforms, an application can use the SGIX_reference_plane extension. With this extension, the user specifies a plane equation in object coordinates corresponding to a set of coplanar primitives. You can enable or disable the plane. When the plane is enabled, all fragment Z values will derive from the specified plane equation. Thus, for any given fragment XY location, the depth value is guaranteed to be identical regardless of which primitive rendered it.