Ich arbeite an einem Front-to-Back-Renderer für eine 2D-Engine mit einer orthografischen Projektion. Ich möchte den Tiefenpuffer verwenden, um ein Überziehen zu vermeiden. Ich habe einen 16-Bit-Tiefenpuffer, eine Kamera bei Z = 100 mit Blick auf Z = 0, zNear ist 1 und zFar ist 1000. Jedes gerenderte Sprite setzt seine Z-Koordinaten auf immer weiter entfernte Werte, sodass der Tiefentest das Rendern überspringen kann alles was darunter ist.
Mir ist jedoch bewusst, dass die Art und Weise, wie Z-Positionen mit Z-Pufferwerten enden, nicht linear ist. Ich möchte die volle Auflösung des 16-Bit-Tiefenpuffers nutzen, dh 65536 eindeutige Werte zulassen. Daher möchte ich für jedes gerenderte Sprite die Z-Position auf die nächste Position erhöhen, um sie mit dem nächsten eindeutigen Tiefenpufferwert zu korrelieren.
Mit anderen Worten, ich möchte einen inkrementierenden Index (0, 1, 2, 3 ...) des eingezogenen Sprites an die entsprechende Z-Position für jedes Sprite drehen, um einen eindeutigen Tiefenpufferwert zu erhalten. Ich bin mir nicht sicher, welche Mathematik dahinter steckt. Was ist die Berechnung, um dies zu tun?
Hinweis: Ich arbeite in WebGL (im Grunde OpenGL ES 2) und muss eine breite Palette von Hardware unterstützen. Erweiterungen wie gl_FragDepth erleichtern dies möglicherweise, können es jedoch aus Kompatibilitätsgründen nicht verwenden.