Tiefentest

Aus DGL Wiki
Version vom 15. Juli 2004, 07:31 Uhr von 63.207.239.54 (Diskussion) ()

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Wenn im letzten Schritt der Grafikpipeline die 3D-Szene in den Framebuffer gerendert wird, muss OpenGL feststellen können, welche Teile der Grafik im Vordergrund stehen und welche Objekte ganz oder teilweise durch andere Objekte verdeckt werden. Zu diesem Zweck wird ein Tiefenpuffer angelegt, der genauso gross wie der Framebuffer ist. Für jeden Pixel auf dem Bildschirm gibt es dann also einen weiteren Wert - den Eintrag im Tiefenpuffer. Im ersten Schritt wird der gesamte Tiefenpuffer auf den größtmöglichen Wert initialisiert (also die maximale Distanz). Sobald dann ein Objekt gerendert wird, wird für jeden Pixel überprüft, ob der Tiefenwert des Pixels dieses Objekts kleiner ist als der Wert im Tiefenpuffer. Ist dies der Fall, wird dieser Pixel in den Framebuffer gezeichnet, ansonsten wird er verworfen.

Dies ist eine einfache und performante Methode, um zu verhindern, dass Objekte die hinter anderen Objekten stehen dennoch angezeigt werden - und das völlig ohne Sortierung der Objekte. Es spielt bei der Verwendung des Tiefentests also keine Rolle, in welcher Reihenfolge die Objekte an die 3D-Pipeline übergeben werden.

Hinweis: Sobald Transparenz verwendet wird, kann der Tiefentest zumindest für diese Teile nicht mehr benutzt werden, da sonst das transparente Objekt ggfs. das dennoch sichtbare Objekt dahinter völlig verbirgt.