3 Buffer in OpenGL

OpenGL verwaltet mehrere Buffer zum Erstellen von Graphiken:

Wir werden uns zunächst nur mit dem color buffer und dem z-buffer beschäftigen.

3.1 Color buffer:

Im color buffer wird das Bild erzeugt. Er ist ein ganz gewöhnliches Pixelarray, meist in rgba. OpenGL verwaltet minde-stens 4 davon, um tatsächliche 3D-Bilder mit double-buffering erzeugen zu können.

3.2 Depth buffer:

Optional kann man in OpenGL zum rendern einen z-buffer verwenden. In den meisten Fällen wird er auch verwendet werden, OpenGL läßt einem hier aber freie Hand, wenn man z.B. mit BSP’s rendern will, kann man den z-buffer auch abschalten:

glDisable (GL_DEPTH_TEST)
glEnable (GL_DEPTH_TEST)

Befehle im Zusammenhang mit dem z-buffer:

Um kurz das beschreiben des z-buffers zu unterbinden:

glDepthMask (GL_TRUE bzw. GL_FALSE)

Um den Wertebereich festzulegen (vordere bzw. hintere z-clipping-plane)

glDepthRange (GLdouble near, GLdouble far)

Um den Wert zum Löschen des z-buffers anzugeben

glClearDepth (float)

Und schließlich kann man auch die Vergleichsfunktion für den z-buffer festlegen:

glDepthFunc (GLenum func)

zulässige Werte für func:

GL_LESS ist der default Wert, der bedeutet, das ein Pixel nur dann gezeichnet wird, wenn sein z-Wert kleiner ist (= näher) als der bereits im z-buffer liegende Wert.

3.3 Löschen von Buffern:

Buffer werden mit dem Befehl glClear (GLbitfield mask) gelöscht.
Mask kann dabei folgende Werte annehmen, bzw. setzt sich aus diesen Werten zusammen:

Man kann natürlich der Reihe nach jeden Buffer einzeln löschen, es empfiehlt sich aber statt dessen alle benötigten Buf-fer auf einmal zu löschen, da manche Hardwarebeschleuniger Buffer parallel löschen können.

Also z.B. glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);