Computergrafik

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-BufferZ-Buffer
RGBMapDepthMAP
  • 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.

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.

glEnable(GL_DEPTH_TEST);

Mit LGL: Ctrl-z

Painters Algorithm | | Z-Buffer Fighting

Options: