2017-10-17 4 views
0

Das folgende Bild zeigt die Hauptwerte, die bei der Berechnung der perspektivischen Projektionsmatrix in OpenGL verwendet wurden. Sie werden als "HALFFOV", "rechts" bezeichnet, "links", "NEAR" und "Nähe x 2":Warum ist die OpenGL-Projektionsmatrix unnötig kompliziert?

enter image description here

Nun, wie Sie im folgenden Bild sehen werden, die, um herauszufinden, x Wert nach der Projektion soll es 2 x NEAR dividiert durch RIGHT - LEFT. Die Tatsache ist, dass 2 x NEAR geteilt durch RECHTS - LINKS das gleiche ist wie einfach NAH/RECHTS. In beiden Fällen verdoppeln Sie einfach, verdoppeln das NEAR und verdoppeln das RECHTE, also ist der Bruch der selbe.

Auch in der dritten Spalte gibt es Operationen, bei denen Nullen vorkommen sollten, zum Beispiel: RECHTS + LINKS geteilt durch RECHTS - LINKS endet immer 0/RECHTS - LINKS, was immer Null ist.

enter image description here

Wenn die GLM-Mathematik-Bibliothek eine Matrix perspektivische Projektion macht für mich die beiden, die immer Null am Ende sind immer Null.

Warum ist die Matrix so geschrieben? Gibt es bestimmte Fälle, für die meine Annahmen falsch sind?

+3

Ihre Annahme gilt nur für abs (rechts) == abs (links) (und abs (oben) == abs (unten)). Bei dezentralen Projektionen ist dies einfach nicht der Fall. – BDL

+0

@ BDL Ich sehe. Nun, wenn LEFT als - RIGHT definiert ist und BOTTOM als TOP definiert ist, sind sie gleich. Ich bin mir nicht sicher, ob das Tutorial, mit dem ich gearbeitet habe, das falsch verstanden hat. Wo werden außerplanmäßige Projektionen in Grafiken oder Spielen verwendet? Werden sie für irgendwelche Effekte verwendet? – Zebrafish

+0

Außermittige Projektionen sind sehr wichtig, wenn die Annahme, dass der Benutzer in die Mitte des Bildschirms schaut, nicht wahr ist. Beispiele hierfür sind CAVEs, Powerwalls, Virtual Reality-Headsets und Anaglyph-Rendering. Robert Kooima hat eine schöne Zusammenfassung: http: //csc.lsu.edu/~ kooima/articles/genperspective/ – skalarproduktraum

Antwort

5

Warum ist die Matrix so geschrieben?

Weil eine symmetrische, blickzentrierte Projektion nur eine von vielen Möglichkeiten ist. Manchmal möchten Sie die Ebenen für bestimmte Effekte oder Rendertechniken neigen und/oder verschieben.

Gibt es bestimmte Fälle, für die meine Annahmen falsch sind?

Beispiels Ebene parallel der Sichtstumpfs Verschiebung für Ziegel erforderlich machen, wo das Bild wiedergegeben werden (nicht mit einem Ziegel Rasterizer verwechselt werden) in einem Raster von Kacheln aufgeteilt, die jeweils einzeln und dann gerendert später zusammengeführt. Dies ist erforderlich, wenn die Auflösung der gewünschten Ausgabebilder die maximale Größe des Darstellungsbereichs/Renderpuffers der verwendeten OpenGL-Implementierung überschreitet.

Andere Fälle sind, wenn Sie Tilt-Shift-Fotografie simulieren möchten.

Und zu guter Letzt ist eine verschobene Projektionsmatrix für das stereoskopische Rendering erforderlich, das auf ein stationäres Bildschirmgerät ausgerichtet ist, das mit einer 3D-Brille betrachtet wird.

(Das Rendern für Headmounted-Displays erfordert eine etwas andere Projektionskonfiguration).

Verwandte Themen