Warum teile ich Z in einer perspektivischen Projektion in OpenGL mit W?

8

Ich denke, das ist eher eine mathematische Frage als eine OpenGL, aber ich schweife ab. Wie auch immer, wenn der ganze Zweck der Teilung der Perspektive darin besteht, brauchbare X- und Y-Koordinaten zu erhalten, warum sollte man z durch w teilen? Auch wie bekomme ich w an erster Stelle?

    
Nooble 30.08.2014, 16:44
quelle

1 Antwort

12

Tatsächlich hat die Erklärung viel mehr mit den Einschränkungen des Tiefenpuffers zu tun als mit Mathe.

Im einfachsten Fall ist der Tiefenpuffer eine Textur, bei der jedem Bildschirmpixel ein Graustufenwert zugewiesen wird, der von der Entfernung zur Kamera abhängt. So können visuelle Effekte leicht mit der Entfernung verändert werden. Quelle

Genauer gesagt ist ein Tiefenpuffer eine Textur, die für jedes Fragment , wobei gilt:

  • Z ist der Abstand von der nahen Clipping-Ebene zum Fragment.
  • W ist die Entfernung von der Kamera zum Fragment.

Im folgenden Diagramm wird die Beziehung zwischen z , w und z / w und n entspricht dem Parameter zNear , der an gluPerspective oder eine äquivalente Funktion, und f ist gleich dem Parameter zFar , der an dieselbe Funktion übergeben wird.

Auf einen Blick sieht dieses System nicht intuitiv aus. Aber als Ergebnis ist z / w immer ein Fließkommawert zwischen 0 und 1 (0 / n und f <) / em> / f ) und kann daher als einzelner Kanal einer Textur dargestellt werden.

Eine zweite wichtige Anmerkung: Der Tiefenpuffer ist nichtlinear, was bedeutet, dass ein Objekt genau zwischen den nahen und fernen Clipping-Ebenen nirgends einen Wert von 0,5 im Tiefenpuffer hat. Wie oben gezeigt, würde dies einem Wert von 0,999 im Tiefenpuffer entsprechen. Je nach Ihrer Ansicht könnte dies gut oder schlecht sein; Vielleicht möchten Sie, dass der Tiefenpuffer detaillierter ist (was er ist), oder sogar ganze Details anbieten (was nicht der Fall ist).

TL; DR:

  • Sie teilen z durch w , so dass es immer im Bereich [0, 1] liegt.
  • W ist die Entfernung von der Kamera zum Fragment.
Proxy 30.08.2014, 22:09
quelle

Tags und Links