Berechnung einer LookAt-Matrix
Ich bin in der Mitte des Schreibens einer 3d-engine und ich bin gekommen, über die LookAt-Algorithmus beschrieben, der in der DirectX-Dokumentation:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l
Bekomm ich jetzt wie es funktioniert auf die Drehung Seite, was ich aber nicht ganz erhalten ist, warum bringt es die übersetzung Bestandteil der matrix zu sein, diesen Punkt Produkte. Untersuchen Sie ihn ein bisschen, es scheint, dass es das anpassen der Kamera-position um einen kleinen Betrag basiert auf einer Projektion der neuen basis-Vektoren auf die position der Auge/Kamera.
Die Frage ist, wieso braucht es dazu? Was ist das schon?
InformationsquelleAutor der Frage Daemin | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Baue ich eine look-at-matrix durch die Schaffung einer 3x3-rotationsmatrix, wie Sie hier getan hast, und dann erweitert es um einen 4x4 mit Nullen und die einzelnen 1 in der rechten unteren Ecke. Dann Baue ich eine 4x4-übersetzung matrix mit dem negativen Auge die Koordinaten der Punkte (kein Punkt Produkte), und multiplizieren Sie die beiden Matrizen zusammen. Meine Vermutung ist, dass diese Multiplikation entspricht der dot-Produkte in der unteren Zeile von deinem Beispiel, aber ich brauchen würde, um es auf dem Papier sicher zu stellen.
Den 3D-Drehung verwandelt Ihren Achsen. Deshalb können Sie nicht am Auge direkt, ohne auch die Umwandlung in das neue Koordinatensystem. Das ist es, was die matrix-Multiplikationen-oder in diesem Fall die 3-dot-Produkt-Werte -- erreichen.
InformationsquelleAutor der Antwort Judge Maygarden
Hinweis das Beispiel ist ein Linkshänder, row-major matrix.
So dass der Betrieb ist: Übersetzen, um die Herkunft zuerst (durch verschieben,- Auge), dann drehen, so dass der Vektor vom Auge zu Bei Zeilen mit +z:
Im Grunde genommen erhalten Sie dasselbe Ergebnis, wenn Sie vor multiplizieren Sie die rotationsmatrix, durch eine übersetzung -Auge:
Zusätzliche Hinweise:
Beachten Sie, dass eine Besichtigung transformation ist (absichtlich) invertiert: multiplizieren Sie jede Ecke von dieser matrix zu "die Welt bewegen", so dass der Bereich, den Sie möchten, um zu sehen, endet das in das kanonische view volume.
Beachten Sie auch, dass die rotation matrix (nennen wir es R) - Komponente des LookAt-matrix ist ein invertiert änderung der basis matrix, wo Zeilen R sind die neuen basis-Vektoren in Bezug auf die alte basis-Vektoren (daher die Variablen-Namen x-Achse.x, .. x-Achse ist die neue x-Achse nach der änderung in der basis Auftritt). Wegen der inversion, aber die Zeilen und Spalten werden vertauscht.
InformationsquelleAutor der Antwort bobobobo
Nur einige Allgemeine Informationen:
Den lookat-matrix ist eine matrix, die Positionen /dreht etwas zu zeigen (Blick auf) einen Punkt im Raum, von einem anderen Punkt im Raum.
Die Methode nimmt eine gewünschte "Mitte" der Kameras anzeigen, wird ein "up" - Vektor repräsentiert die Richtung "oben" für die Kamera (bis fast immer (0,1,0), aber es muss nicht sein), und ein "Auge" Vektor ist die Position der Kamera.
Dies ist hauptsächlich für die Kamera, sondern kann auch verwendet werden für andere Techniken, wie Schatten, Scheinwerfer, etc.
Ehrlich gesagt, ich bin mir nicht ganz sicher, warum die translation-Komponente gesetzt wird, wie es in dieser Methode. In
gluLookAt
(von OpenGL), die translation-Komponente auf " 0,0,0, da die Kamera wird angezeigt als bei 0,0,0 immer.InformationsquelleAutor der Antwort TM.
Dot product einfach Projekte, die einen Punkt auf einer Achse, um die x-, y-, oder z-Komponente des Auges. Bewegen Sie die Kamera nach hinten, so Suche bei (0, 0, 0) (10, 0, 0) und aus (100000, 0, 0) eine andere Wirkung.
InformationsquelleAutor der Antwort Eugene Yokota
Übersetzung-Komponente hilft Ihnen, durch die Schaffung einer orthonormal basis mit Ihrem "Auge" auf die Herkunft und alles andere, ausgedrückt in Bezug auf die Herkunft (Ihr "Auge") und die drei Achsen.
Ist das Konzept nicht so viel, dass die matrix einstellen der Kamera position. Vielmehr ist es bemüht, zur Vereinfachung der Mathematik: wenn Sie Rendern möchten, ein Bild von allem, was Sie sehen können von Ihrem "Auge" - position, es ist am einfachsten zu behaupten, dass dein Auge ist das Zentrum des Universums.
So, die kurze Antwort ist, dass dies macht die Mathematik viel einfacher.
Beantwortung der Frage in der Kommentar: der Grund, warum man nicht einfach subtrahieren Sie den "Auge" - position aus alles hat zu tun mit der Reihenfolge der Operationen. Denken Sie an es auf diese Weise: wenn Sie in den neuen Bezugsrahmen (D. H., der Kopf-position, vertreten durch xaxis, yaxis und zaxis) Sie wollen jetzt zu äußern, Entfernungen in Bezug auf das neue (gedrehte) Bezugsrahmen. Das ist, warum Sie verwenden das Skalarprodukt der neuen Achsen mit der position des Auges: das entspricht den gleichen Abstand, die Dinge müssen sich bewegen, aber es nutzt das neue Koordinatensystem.
InformationsquelleAutor der Antwort Bob Cross
Den lookat-matrix macht diese beiden Schritte:
Richtung.
Das Skalarprodukt bedeutet einfach nur, dass Sie eine übersetzung zuerst und dann drehen. Statt der Multiplikation zweier Matrizen das Skalarprodukt nur multipliziert eine Zeile mit einer Spalte.
InformationsquelleAutor der Antwort Kalle
Transformation 4x4-matrix enthält zwei-drei Komponenten:
1. rotation matrix
2. übersetzung hinzufügen.
3. Skala (Motor nicht, verwenden Sie diese direkt in der matrix).
Die Kombination der Sie verwandeln würde ein Punkt von Raum A zu Raum B, daher ist dies eine Transformationsmatrix M_ab
Nun, die Lage der Kamera im Raum Ein und so ist es auch nicht die gültige transformation für Raum B, so müssen Sie multiplizieren Sie diese Position mit der Drehung zu verwandeln.
Die einzige offene Frage, die bleibt, ist, warum die Punkte?
Gut, wenn Sie schreiben, die 3 Punkte auf ein Blatt Papier, würden Sie entdecken, dass 3 Punkte mit X -, Y-und Z genau so ist, wie die Multiplikation mit einer rotationsmatrix.
Ein Beispiel für das weiter Zeile/Spalte wäre unter der null-Punkt (0,0,0) im Raum der Welt. Es ist nicht der null-Punkt in der Kamera Platz, und so müssen Sie wissen, was ist, ist die Darstellung im Kamera-Raum, da rotation und Skalierung lassen Sie es auf null!
cheers
InformationsquelleAutor der Antwort Adi
Es ist notwendig, um die Augen zeigen in Ihrem axis-Raum, nicht in den Welt-Raum. Wenn Sie Punkt ein Vektor mit Koordinaten-Einheit basis-Vektor, der die x -, y -, z -, es gibt Sie die Koordinaten des Auges in dass Raum. Verwandeln Sie Position durch die Anwendung der drei übersetzungen auf dem letzten Platz, in diesem Fall die Letzte Zeile. Dann bewegt das Auge nach hinten, mit einer negativen, entspricht verschieben Sie alle den rest des Raumes nach vorne. Wie verschieben in einem Aufzug macht Sie fühlen lke, der rest der Welt ist die Drop-out von unter Ihnen.
Mit einem Linkshänder-matrix, mit der übersetzung der letzten Zeile statt in der letzten Spalte ist eine religiöse Differenz, die absolut nichts zu tun hat mit der Antwort. Es ist jedoch ein dogma, sollten unbedingt vermieden werden. Am besten ist es, chain global-to-local (forward Kinematik) - Transformationen von Links nach rechts in natürlicher Leserichtung, die beim zeichnen von Baum-Skizzen. Mit Linkshänder-Matrizen zwingt Sie dazu, schreiben Sie diese von rechts nach Links.
InformationsquelleAutor der Antwort DragonLord