Das Festlegen der Perspektivprojektionsmatrix in Open GL (einschließlich OpenGL ES 2.0) hat das folgende allgemeine Format:
glm::mat4 perspective(float fovy, float aspect, float zNear, float zFar);
Beachten Sie die letzten beiden Parameter . Zunächst wird die zNear- Ebene angegeben, die näher an der Kamera liegt. Die zweite gibt die zFar- Ebene an, die weit von der Kamera entfernt ist.
Es ist allgemein bekannt, dass in OpenGL Dinge, die weiter entfernt sind, mit anderen Worten "tiefer im Bildschirm", eine negative Z-Achse haben . Warum sehen dann alle OpenGL-Beispiele, die eine perspektivische Projektionsmatrix (aus zuverlässigen Quellen wie OpenGL SuperBible und simmilar) festlegen, so aus, als würden die beiden oben genannten Parameter (zNear, zFar) der perspektivischen Projektionsfunktion vertauscht?
Dieses Beispiel stammt aus der GLM-Website (OpenGL Math) :
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
Sie können sehen, dass der zNear-Parameter tatsächlich weiter von der Kamera entfernt ist als der zFar-Parameter, der 100 Punkte näher an der Kamera / dem Betrachter liegt.
Können Sie uns bitte leicht verständliche Erklärungen geben ? I es sind nicht nur eines, sondern alle Beispiele, die zFar als höheren positiven Wert als zNear übergeben. Vielen Dank.
Mein Beispiel:
Wenn ich in meinem Code Folgendes einstelle:
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 1000.0f, -500.0f);
Ich gehe davon aus, dass mein Kegelstumpf in z-positiver Richtung 1000 Punkte und in z-negativer Richtung 500 Punkte lang ist .
Wenn ich solche Dinge einstelle, kann ich zumindest einige Objekte sehen, obwohl die Dinge nicht perfekt sind: Aus bestimmten Gründen sehe ich nur Objekte, die auf negativen z-Koordinaten positioniert sind.
Dies könnte mit meinem falschen Verständnis der perspektivischen Projektionsfunktion zusammenhängen.
quelle
Antworten:
Die fragliche Methode (
glm::perspective
) und ihre Art sind im Wesentlichen Wrapper oder Neuimplementierungen von gluPerspective . Wie Sie der Dokumentation dieser Funktion entnehmen können, sind die Nah- / Fernwerte Entfernungen von der Ansichtsebene und immer positiv.quelle