vertex array object (VAO)

Vertex array objects are OpenGL Objects that store all of the state needed to make one or more draw calls. This includes attribute array setup information (from glVertexAttribArray), buffer objects used for attribute arrays, and the GL_ELEMENT_ARRAY_BUFFER binding, which is a buffer object that stores the index arrays, if needed.

array drawing

Rendering a contiguous range of vertices pulled from the currently bound attribute arrays (within the vertex array object). The vertices are sent in order from first to last in the range.

indexed drawing

Rendering an arbitrary set of vertices pulled from the currently bound attribute arrays. The set of vertices is defined by the element array. The vertices are rendered in the order specified by the element array.

element array, index array

A list of indices, stored within a buffer object, that refer to elements in the currently bound attribute arrays.

hidden surface elimination

The ability to render a scene such that objects that are behind other objects do not show through them. There are several methods available for achieving this.

depth sorting

Rendering objects or triangles in an order based on their Z-depth from the camera. An attempt at hidden surface elimination.

depth buffer, z-buffer

An image in the framebuffer that conceptually stores the distance of the pixel from the camera zNear plane. The depth buffer stores only one-dimensional values, instead of the 4-dimensional colors of the regular image buffer. Depth values are usually restricted to the range [0, 1].

depth test

The process of testing the incoming fragment's depth value against the depth value from the depth buffer for the pixel that the fragment would overwrite. If the test passes, then the fragment is written. If the test fails, the fragment is not written. This, combined with a depth buffer, can be used as a good method of hidden surface elimination.

range zNear, range zFar

The mapping from NDC-space Z coordinate [-1, 1] to window-space Z coordinates [0, 1]. This mapping is set with the glDepthRange function. These are specified in window-space coordinates. The -1 Z coordinate in NDC space maps to range zNear, and the 1 maps to range zFar. The range zNear does not have to be less than the range zFar.

homogeneous coordinate system

A 4-dimensional coordinate system used to represent a 3-dimensional position. To compute the 3D position, the fourth coordinate is divided into the other 3. This kind of coordinate system allows mathematics to function in the presence of what would be undefined values otherwise. Namely division by zero.


The act of breaking a single triangle into one or more smaller ones so that they all fit within the visible region. Actual clipping, generating new vertices and such, is not often done by hardware; instead they usually try to cull fragments that are outside of the viewing area.

depth clamping

A rendering mode where clipping is turned off and the Z value of fragments is clamped to the depth range. This is used to prevent clipping from punching holes in objects, though it is not a foolproof solution.

Fork me on GitHub