Der Zweck der Model View-Projektionsmatrix

102

Für welche Zwecke verwenden wir die Model View-Projektionsmatrix? Warum benötigen Shader Model View Projection Matrix?

Yuriy Vikulov
quelle
12
Schauen Sie sich
einfach
3
Ich schlug vor, eine Stack Exchange-Site für Computergrafiken zu öffnen, und wählte diese Frage als Beispielfrage aus . Folgen Sie computergraphics.stackexchange.com, wenn Sie daran interessiert sind, dass die Website gestartet wird!
Wischen Sie den

Antworten:

196

Die Modell-, Ansichts- und Projektionsmatrizen sind drei separate Matrizen. Modellkarten vom lokalen Koordinatenraum eines Objekts in den Weltraum, Ansicht vom Weltraum zum Kameraraum, Projektion von der Kamera zum Bildschirm.

Wenn Sie alle drei zusammenstellen, können Sie das eine Ergebnis verwenden, um den gesamten Weg vom Objektraum zum Bildschirmraum abzubilden, sodass Sie herausfinden können, was Sie von den eingehenden Scheitelpunktpositionen an die nächste Stufe einer programmierbaren Pipeline weitergeben müssen.

In den alten Pipelines mit fester Funktionalität haben Sie Modell und Ansicht zusammen angewendet und dann die Beleuchtung anhand eines anderen daraus abgeleiteten Ergebnisses berechnet (mit einigen Korrekturen, sodass z. B. Normalen immer noch eine Einheitslänge haben, selbst wenn Sie eine Skalierung auf das Objekt angewendet haben ), dann Projektion anwenden. Sie können dies in OpenGL sehen, das niemals die Modell- und Ansichtsmatrizen trennt und diese als einen einzigen Modellansichtsmatrixstapel beibehält. Sie sehen daher auch manchmal, dass sich dies in Shadern widerspiegelt.

Also: Die zusammengesetzte Projektionsmatrix für die Modellansicht wird häufig von Shadern verwendet, um die für jedes Modell geladenen Scheitelpunkte auf den Bildschirm abzubilden. Es ist nicht erforderlich, es gibt viele Möglichkeiten, dasselbe zu erreichen. Es ist nur üblich, weil es alle möglichen linearen Transformationen zulässt. Aus diesem Grund war eine weniger komponierte Version davon auch die Norm in der alten Welt der festen Pipelines.

Tommy
quelle
3
Für mehrere Objekte (Netze) benötigen wir also mehrere modelView-Matrizen, nicht wahr?
Yuriy Vikulov
5
Angenommen, sie bewegen sich unabhängig voneinander oder wurden separat positioniert, dann ja. Dies ist bei weitem die häufigste Vorgehensweise: Übergeben Sie modelView oder projectionModelView als Uniform an das Shader-Programm, nachdem Sie es für das aktuelle Modell auf der CPU eingerichtet haben.
Tommy
Hallo Tommy, können Sie einen Beispielcode für die Pan-Funktionalität in Opengl Es2.0 in Android vorschlagen, der diese Projektionsmatrix für die Modellansicht verwendet, wenn dies möglich ist? Ich habe mehr Links referiert, ich konnte keine klare Vorstellung bekommen. Wenn ein Beispielcode bedeutet, ist es für mich leicht zu verstehen.
Harikrishnan
1
Ich habe eine Frage. Wenn openGL die MV-Matrix als eine verwendet und vom Kameraraum zum Weltraum wechselt, müssen wir invertieren (Projektionsmatrix * Ansichtsmatrix) * (Cursorposition), aber wenn die Modellansicht eine zusammengesetzte Matrix ist. Wie trennen wir Modell- und Ansichtsmatrix, damit ich die Ansichtsmatrix für diese Berechnung verwenden kann? Also muss ich sie getrennt halten?
Evren Bingøl
@ EvrenBingøl Hast du deine Antwort schon bekommen? Ich habe mein Modell und meine Ansichtsmatrizen getrennt gehalten, möchte aber die tatsächliche Antwort auf Ihre Frage wissen, ob ich sie weiterhin trennen soll oder nicht.
Tom_mai78101
9

Weil Matrizen bequem sind. Matrizen helfen dabei, Orte / Richtungen in Bezug auf verschiedene Räume umzuwandeln (Ein Raum kann durch 3 senkrechte Achsen und einen Ursprung definiert werden).

Hier ist ein Beispiel aus einem Buch, das von @ legends2k in Kommentaren angegeben wurde.

Die Einwohner von Cartesia verwenden eine Karte ihrer Stadt, deren Ursprung sehr vernünftig im Zentrum der Stadt zentriert ist und deren Achsen entlang der Himmelsrichtungen des Kompasses gerichtet sind. Die Bewohner von Legasthenie verwenden eine Karte ihrer Stadt, deren Koordinaten an einem beliebigen Punkt zentriert sind und deren Achsen in beliebige Richtungen verlaufen, was zu dieser Zeit wahrscheinlich eine gute Idee war. Die Bürger beider Städte sind sehr zufrieden mit ihren jeweiligen Karten, aber der staatliche Verkehrsingenieur, der die Aufgabe hat, ein Budget für die erste Autobahn zwischen Kartesien und Legasthenie aufzustellen, benötigt eine Karte mit den Details beider Städte, die daher eine dritte Koordinate einführt System, das ihm überlegen ist, aber nicht unbedingt jemand anderem.

Hier ist ein weiteres Beispiel:

Angenommen, Sie haben in einem Spiel ein Autoobjekt mit seinen Scheitelpunktpositionen unter Verwendung der Weltkoordinaten erstellt. Angenommen, Sie müssen dasselbe Auto in einem anderen Spiel in einer völlig anderen Welt verwenden, Sie müssen die Positionen erneut definieren und die Berechnungen werden komplex. Dies liegt daran, dass Sie erneut die Positionen von Fenster, Motorhaube, Scheinwerfer, Rädern usw. im Auto in Bezug auf die neue Welt berechnen müssen.

In diesem Video verstehen Sie die Konzepte von Modell, Ansicht und Projektion. (sehr empfehlenswert)

Sehen Sie sich dies an, um zu verstehen, wie die Eckpunkte in der Welt als Matrizen dargestellt werden und wie sie transformiert werden.

Cegprakash
quelle
Wenn Sie tief darüber nachdenken, werden Sie feststellen, dass, obwohl die Transformation auf dem Ursprung eines Objekts basiert (dh einem einzelnen Punkt), alle Scheitelpunkte des Objekts (formal Netz / Modell) der Transformation unterzogen werden, dh alle 1000 Scheitelpunkte werden multipliziert durch die Modellmatrix. Daher ist Ihr Standpunkt nicht gut formuliert. Die Modellmatrix ist einfach die Matrix, die Eckpunkte im Modellraum in den Weltraum transformiert. Hier gibt es keinen Leistungsvorteil, sondern nur Bequemlichkeit.
Legends2k
Wenn ja, warum repräsentieren sie nicht einfach jeden Punkt in einem einzelnen 3D-Raum? Es sollte Vorteile geben, wenn Sie die Ausgabe einer Szene für eine andere Szene verwenden, die eine Eingabe für eine andere bewegliche Szene sein könnte :)
Cegprakash
1
Sie repräsentieren nicht alle Eckpunkte in einem einzigen Raum, da es bequem ist, im relativen Raum zu arbeiten als in einem größeren Raum wie der Welt. Angenommen, ein Roboter, dem befohlen wird, sich 2 Meter vorwärts zu bewegen, tut dies mit dem Auge besser, als das Zentrum der Welt zu lokalisieren und dann die richtigen resultierenden Koordinaten zu berechnen.
Legends2k
Ich denke, Sie haben Recht. Auf jeden Fall wird für jedes Pixel ein Fragment-Shader aufgerufen, und wir werden bei komplexen Maschen Matrixmultiplikationen für jedes Pixel durchführen. : |
Cegprakash
2
Im Fragment-Shader werden nur Beleuchtungs- / Farbberechnungen durchgeführt. Wenn die Daten den Fragment-Shader erreichen, sind alle Positionsberechnungen abgeschlossen (dh im Vertex-Shader). Eine bessere Erklärung, warum mehrere Koordinatensysteme verwendet werden, finden Sie hier . Dieses Buch ist eine hervorragende Ressource für 3D-Spielmathematik. Das gleiche Kapitel wie ein Beispiel-PDF von der Website des Buches .
Legends2k