Hier gibt es einige Verwirrung.
OpenGL ist im Objekt- und Weltraum rechtshändig .
Aber im Fensterbereich (auch bekannt als Bildschirmbereich) sind wir plötzlich Linkshänder .
Wie ist das passiert ?
Die Art und Weise, wie wir von Rechtshänder zu Linkshänder gelangen, ist ein negativer Z-Skalierungseintrag in den glOrtho
oder glFrustum
Projektionsmatrizen. Das Skalieren von z um -1 (wobei x und y unverändert bleiben) bewirkt eine Änderung der Händigkeit des Koordinatensystems.
Für glFrustum,
weit und in der Nähe sollen positiv sein, mit weit > in der Nähe . Sagen Sie fern = 1000 und nah = 1. Dann ist C = - (1001) / (999) = -1,002.
Sehen Sie hier , um weitere Informationen und Diagramme.
Aus orthographischer Sicht generiert glOrtho eine Matrix wie folgt:
Hier sind links , rechts , unten und oben nur die Koordinaten für die linke vertikale , rechte vertikale , untere horizontale und obere horizontale Schnittebene (bzw.) .
Die nahen und fernen Ebenen sind jedoch unterschiedlich spezifiziert . Der in der Nähe Parameter ist definiert als
- Nah: Der Abstand zur Clipping-Ebene mit näherer Tiefe. Dieser Abstand ist negativ, wenn sich die Ebene hinter dem Betrachter befinden soll.
und weit:
- zFar Der Abstand zur weiter entfernten Schnittebene. Dieser Abstand ist negativ, wenn sich die Ebene hinter dem Betrachter befinden soll.
Hier haben wir ein typisches kanonisches Ansichtsvolumen
Da der z-Multiplikator (-2 / (nah-nah)) ist, skaliert das Minuszeichen z effektiv um -1 . Dies bedeutet, dass "z" während der Betrachtungstransformation nach links gedreht wird , ohne dass dies den meisten Menschen bekannt ist, da sie in OpenGL einfach als "rechtshändiges" Koordinatensystem arbeiten.
Also, wenn Sie anrufen
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Dann ist das NEAR PLANE 10 Einheiten vor Ihnen . Wo bist du? Warum am Ursprung mit der x-Achse rechts von Ihnen, der y-Achse oben auf Ihrem Kopf und Ihrer Nase nach unten auf der negativen z-Achse (das ist die Standardeinstellung "Standardmäßig befindet sich die Kamera am Ursprung zeigt auf die negative z-Achse und hat einen Aufwärtsvektor von (0, 1, 0). " ). Die nahe Ebene liegt also bei z = -10. Die entfernte Ebene liegt 10 Einheiten hinter Ihnen, bei z = + 10 .