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:
- Verwenden der Projektionsmatrix
Ссылка
- Verwendung von "logarithmischen Tiefenpuffern"
Ссылка
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
- 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.
- Kann mir jemand erklären, wie wir Projection Matrix verwenden können, um das Problem zu beheben? Und wie funktioniert es?
- Gibt es noch andere ähnlich wirksame Möglichkeiten, das Z-Kampfproblem zu lösen?
Danke!