Z-Bekämpfung von Lösungen in der Tiefe Test in OpenGL - wie funktionieren sie?

8

Beschreibung

Ich hatte große Probleme mit Z-Fighting in OpenGL und ich habe einige Zeit damit verbracht, Lösungen für dieses Problem zu finden. Einige von denen, die ich gefunden habe und ich verstehe und mag nicht:

  • Verschieben von Polygonen voneinander (wie glPolygonOffset in OpenGL)
  • Teilen der Szene nach Z-Koordinate und Zeichnen von Teilen der Szene mit separaten sauberen Z-Puffern.

Die, die ich nicht verstehe:

Ich habe den zweiten in meinem Programm implementiert, indem ich ihn einfach in den Vertex-Shader eines Balles (es z-kämpfte mit dem Boden) gesetzt habe:

%Vor%

und es hat funktioniert!

Aktuelle Fragen

  1. Kann mir jemand erklären, wie das Ändern der Z-Koordinate des Scheitelpunkts im Vertex-Shader das Problem gelöst hat OHNE den Scheitelpunkt sichtbar zu bewegen? (Die Szene sieht für das menschliche Auge gleich aus). Wie hat sich die Verteilung der Z-Tiefenwerte verändert? Ich schätze, mir fehlt etwas Wissen über Rendering Pipeline.
  2. Kann mir jemand erklären, wie wir Projection Matrix verwenden können, um das Problem zu beheben? Und wie funktioniert es?
  3. Gibt es noch andere ähnlich wirksame Möglichkeiten, das Z-Kampfproblem zu lösen?

Danke!

    
michal.ciurus 10.06.2014, 13:17
quelle

1 Antwort

2

Vielleicht gibt es ein Problem mit der Genauigkeit des Tiefenpuffers? Bei Verwendung eines 16-Bit-Puffers wird wahrscheinlich Z-Kämpfen auftreten. Sie können es überprüfen mit:

%Vor%     
jr_ 18.06.2014 08:43
quelle