4 Stimmen

Holen Sie Augen-, Ziel- und Hochvektoren aus der Ansichtsmatrix.

In Direct3D verwende ich die Matrix.LookAtLH-Funktion, um die Ansichtsmatrix zu berechnen.

Ich benutze dies für die Kamera, die ich um ein Ziel herum bewege, indem ich den Ursprung an die Zielposition verschiebe, rotiere und dann den Ursprung wieder nach (0,0,0) bringe.

Dies wird mit der Matrix multipliziert, die ursprünglich aus LookAtLH berechnet wurde.

Gibt es einen Weg, nach einigen dieser Operationen die Matrix zu zerlegen, um die Augenposition, die Zielposition und den Up-Vektor zu erhalten?

4voto

Salami Punkte 996

Ansichtsmatrizen sind sehr einfach, Daten abzurufen. Überprüfen Sie die Dokumentation für die von Ihnen verwendete Funktion (Ich habe die Dokumentation für D3DXMatrixLookAtLH verwendet):

http://msdn.microsoft.com/en-us/library/bb205342%28v=vs.85%29.aspx

Wie Sie am unteren Rand der Seite sehen können, wird die Matrix intern wie folgt generiert:

z-Achse = normal(At - Auge)
x-Achse = normal(cross(Oben, z-Achse))
y-Achse = cross(z-Achse, x-Achse)

 x-Achse.x           y-Achse.x           z-Achse.x          0
 x-Achse.y           y-Achse.y           z-Achse.y          0
 x-Achse.z           y-Achse.z           z-Achse.z          0
-dot(x-Achse, Auge)  -dot(y-Achse, Auge)  -dot(z-Achse, Auge)  1

Bedenken Sie, dass dies nur für DirectX gilt; transponieren Sie die obige Matrix, wenn Sie dieselben Berechnungen nach OpenGL portieren, da das Koordinatensystem in DirectX im Gegensatz zum Standard ist.

3voto

user703016 Punkte 36471

Zwei Optionen:

  • Lange und schwierige Version: Extrahiere Auge, Oben und Blickrichtung aus der neuen berechneten Matrix
  • Einfache Version: wende deine Transformationen (Translation, Rotation, Translation) auf eine Kopie von Auge, Oben und Blickrichtung an. Auf diese Weise erhältst du ganz einfach die neuen Vektoren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X