Rotation von Objekten - Achsen vertauscht ?
-
Hallo zusammen,
in meinem derzeitigen Programm wird ein Objekt in die Szene geladen, welches ich durch eine Pfadangabe bekomme.
Dazu bekomme ich auch eine Transformationsmatrix.Soweit so gut.
Die Form der Matrix ist folgende:
R00 R01 R02 T0 R10 R11 R12 T1 R20 R21 R22 T2 0 0 0 1
Das Problem ist, dass ich die Matrix so nicht auf mein Objekt anwenden kann, da für die Translation bspw. eine Matrix dieser Form gebruacht wird:
1 0 0 0 0 1 0 0 0 0 1 0 T0 T1 T2 1
Das Problem lässt sich einfach beheben in dem ich die Matrix in diese Form umforme, jedoch habe ich hier auch das Problem, dass in meiner derzeitigen Anwendung die Tiefe und Höhe vertauscht ist, sprich Z-Achse = Y-Achse und Y-Achse = Z-Achse, so muss ich in der Translationsmatrix (oben) T1 und T2 vertauschen. Anschließend multipliziere ich die Geschichte mit der Local Matrix meines Objekts und siehe da: es funktioniert!
Nur stellt sich jetzt die Frage, wie ich das mit der Rotationsmatrix mache ?
Wenn ich die Rotationsmatrix (T0 = T1 = T2 = 0) auf die Local Matrix meines Objektes anwende, ohne das ich die Rotationsmatrix verändere, dann wird das Objekt zwar rotiert, jedoch ,wie schon beschrieben, in der falschen Achse.
Hat jemand eine Idee, wie ich die Rotationsmatrix auf die richtigen Achsen anwende, wenn ich diese anschließend mit der Localen Matrix multiplizieren möchte?
Ich hätte mir das so gedacht, dass ich die Rotationsmatrix so umforme transponiere, damit diese in der richtigen Form ist und anschließend mit der Matrix...
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
...multipliziere.
Funktioniert jedoch nicht!Beste Grüße,
SkiD.//EDIT ON
Also ich habe das nun folgendermaßen gelöst:Ich habe die Matrix (DM) ...
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
... gebildet und die transponierte dieser Matrix (DMT), anschließend die Matrix DM mit der Local Matrix LM meines Objektes multipliziert.
Die Rotationsmatrix R aus der Transformationsmatrix T (oben beschrieben) gebildet, d.h. einfach die Translationswerte weggelassen, und die Matrix R mit der Matrix LM multipliziert.
Danach LM * DMT und schon hatte ich die richtige Position.Zwar ist die Geschichte spiegelverkehrt, habe aber um das zu verhindern in der Matrix DM den Wert DM[1][2] auf -1 gesetzt und den Y-Wert bei der Translation invertiert.
Klingt verwirrend, ist allerdings recht einfach und funktioniert!
Danke für die Aufmerksamkeit
Was mich evtl. noch interessieren würde ist, wie man eine Matrix, von der man weiß das zwei Achsen in der Rotation vertauscht sind, umformt ?
Gibts da irgendwelche Tipps ?SkiD.
//EDIT OFF
-
SkiD schrieb:
Was mich evtl. noch interessieren würde ist, wie man eine Matrix, von der man weiß das zwei Achsen in der Rotation vertauscht sind, umformt ?
Gibts da irgendwelche Tipps ?Na, so wie du's gemacht hast. Die entsprechenden Spalten (bzw Zeilen) vertauschen. Übrigens ist in deinem Fall DMT = DM.
-
Falls du weist das die Achsen sowieso vertauscht sind bei deinem objekt kannst du natürlich auch die Modelldaten direkt tauschen so das du normale Matrizen benutzen kannst. Das hört sich für mich nach 3ds Dateien an.