Z-Puffer
← Painters Algorithm | ● | Z-Buffer Fighting →
QQuizfrage: Zeichnen wir von hinten nach vorne?
Nein - Verdeckungsberechnung mit dem Z-Buffer:
Speichern der normalisierten (nicht homogenisierten) Tiefe z für alle projizierten Punkte (bzw. Fragmente) im Z-Puffer als “Grauwerte”:
Frame-Buffer | Z-Buffer |
- Alle Fragmente auf einem Sichtstrahls haben dieselbe Position auf dem Bildschirm
- Wenn die aktuelle Tiefe z eines Fragments kleiner als die des entsprechenden Wertes im Puffer ist, dann
- ist der Punkt sichtbar (d.h. nicht verdeckt)
- wird der Bildpunkt gezeichnet (d.h. Farbwerte werden überschrieben)
- und der Tiefenwert im Z-Puffer aktualisiert.
- Ansonsten wird der Bildpunkt
- nicht gezeichnet
- und der Z-Puffer nicht aktualisiert
- weil das Fragment verdeckt ist.
- Wenn die aktuelle Tiefe z eines Fragments kleiner als die des entsprechenden Wertes im Puffer ist, dann
Das Ergebnis des Z-Puffer Algorithmus ist unabhängig von der Reihenfolge der Dreiecke, d.h. es ist egal, in welcher Reihenfolge die Dreiecke gezeichnet werden.
Im Gegensatz zum sog. Painters-Algorithm, bei dem die Objekte tiefengestaffelt von hinten nach vorne gemalt werden. Hier ist die Reihenfolge nicht unabhängig von der Betrachterposition.
Z-Puffer muss im Rendering Kontext angelegt werden (Standard mit LGL) und belegt zusätzlich Speicher neben RGB.
Mit LGL: Ctrl-z
← Painters Algorithm | ● | Z-Buffer Fighting →