Ich habe kürzlich an einem Spiel mit OpenGL und C ++ über GLFW gearbeitet.
Im Spiel habe ich ein Luftschiff mit einem darauf montierten Turm. Das Luftschiff bewegt sich in Weltraumkoordinaten und der Turm 'folgt' ihm.
Der Turm verfügt über einen eigenen Koordinatenraum für die Blick- / Zielrichtung. Wenn der Turm in Richtung zielt (0,0,1)
, zielt er grundsätzlich parallel zur Bewegungsrichtung des Luftschiffs.
Um dem Turm ein Weltraumziel zu geben, habe ich eine Matrix, die Weltraumkoordinaten aufnimmt und diese in Turmraumkoordinaten umwandelt.
Wenn der Turm abgefeuert wird, soll er Projektile im Weltraum erzeugen. Gibt es also eine elegante Möglichkeit, meine Transformationsmatrix zu verwenden, um die Koordinaten des Turmraums wieder in den Weltraum umzuwandeln?
Eine allgemeinere Art, die Frage zu stellen, könnte sein: Wenn ich eine Matrix habe M
, die Koordinaten von Raum A
zu Raum nimmt B
. Gibt es eine einfache Möglichkeit M
, die Koordinaten von B
bis zu ermitteln A
?
quelle
Wenn Ihre Transformationsmatrix eine Rotationsmatrix ist, können Sie das Problem vereinfachen, indem Sie die Tatsache ausnutzen, dass die Inverse einer Rotationsmatrix die Transponierte dieser Matrix ist.
Wenn Ihre Transformationsmatrix eine Rotation gefolgt von einer Translation darstellt, behandeln Sie die Komponenten separat. Die Umkehrung ist gleichbedeutend mit dem Subtrahieren der Translation und dem anschließenden Anwenden der Transponierung der Rotationsmatrix.
quelle
In Ihrer Matrix-Bibliothek gibt es wahrscheinlich eine Funktion namens Inverse. Das ist wahrscheinlich das, wonach Sie suchen.
quelle