To main page |

Hidden Objects

Hidden objects typically refers to the objects that are behind some other object in the current view. (It may also refer to objects, that are hidden right now because of some other condition)

How OpenGL draws triangles/objects

The OpenGL approach to hidden object (actually hidden pixels) is depth-testing in the screen space. The point being drawn is transformed to screen space coordinates, and then it's screen space z-coordinate is tested against the z-coordinate in the current buffer. Whether the point would be drawn is decided by depth function currently in use. Typically it's GL_LESS, which means point would be drawn only if it's z-coordinate is LESS than the z-coordinate of point in buffer.

So let's say the buffer contains some plane, that is far away, and it's screen space z-coordinate is 0.8. Of course you specify world space x,y,z coordinates, that are translated internally by OpenGL to screen space. Now you try to draw one plane that is further away with z-coordinate of 0.9 and one that is closer with z=0.1 . OpenGL call will test each point during the rasterization process with depth function and draw the pixels of closer (z=0.1) plane and discard pixels of the farther (z=0.9) plane.

The idea of comparing each pixel to each other means that it's costly process. There are more effective algorithms to determine whether object is visible and should the programmer even start the drawing process for some object. However the GPU usually consist of many parallel processing units, which mean that tens of thousands of pixels are drawn and tested simultaneously, therefore those algorithms, which are typically done on CPU should be very-very effective, since modern CPUs have only 1 to 4 parallel processing units and usually only one of them is active; parallel programming isn't easy on CPU yet.

Other algortihms

Effective algorithms:
* Occlusion culling

Ineffective algorithms (nowadays), but still those should be studied for general expansion of your knowledge:
* Hidden lines removal

GPU will also do the frustum culling without any special programming required.