Kleine Verständnisfrage zu Transformationen
-
Hi, ich baue gerade einen kleinen Szenegraphen mit verschachtelten Transformationen, nur ist die Ausgabe noch nicht ganz so wie erwartet.
Es geht um die Reihenfolge bei Transformationen. Um es auf das grundlegende Problem zu reduzieren, habe ein Knoten eine (zum Vaterknoten relative) Transformation, die aus Translation und Rotation besteht.
Dabei soll der Knoten ZUERST verschoben und DANN um seinen neuen Ursprung gedreht werden.
Ich habe mir dazu eine Translationsmatrix erstellt und daran schließlich die Rotationsmatrix VON LINKS dranmultipliziert.
Nur ist das Ergebnis eben genau andersrum wie gewollt, d.h. es wird zuerst gedreht und dann im neuen Koordinatensystem verschoben.
Meine Frage: Ist meine Mathematik oder die Implementierung falsch? Oder anders: Werden konsekutive Transformation von RECHTS an die momentane Transformation ranmultipliziert anstatt von links?
(Ich arbeite in OpenGL)
Vielen Dank für die Hilfe!
Gruß,
Tim
-
wie sieht denn dein vertexshader aus?
-
was zum Henker..?
Momentan Fixed Function Pipeline.
-
Das ist ne Frage der Reihenfolge. Das hätetste aber auch probieren können.
RotationTranslation=rotieren um den Mittelpunkt und dann verschieben.
TranslationRotation=verschieben und Rotieren um den neuen Mittelpunkt.
-
Xebov schrieb:
Das ist ne Frage der Reihenfolge. Das hätetste aber auch probieren können.
RotationTranslation=rotieren um den Mittelpunkt und dann verschieben.
TranslationRotation=verschieben und Rotieren um den neuen Mittelpunkt.Okay, schonmal danke für die Antwort. Ja, ich weiß ja, dass es von der Reihenfolge abhängt. Habe es ja auch ausprobiert, diese zu vertauschen und dann hat es ja gepasst.
Daraus entstand ja auch meine ursprüngliche Frage, ob man konsekutive Transformationen von links oder von rechts heranmultipliziert.
Ich schließe jetzt daraus, dass man von rechts ranmultipliziert.
Edit: Okay, ich sehe das auch gerade in der OpenGL Doku.
Vielen Dank
-
Hmm, was meint ihr mit "neuer" Mittelpunkt?
Transformiert wird doch normalerweise so: Mv
Wenn ich das Objekt erst verschiebe und dann rotiere, dann würde das doch so aussehen:
R(T*v)=(R*T)*vAlso angenommen T ist eine Verschiebung auf der x-Achse um 1 und R eine Rotation um den Nullpunkt um 90°, und v=(1,0,1) (im Projektiven 2-dimensionalen Raum). Dann wäre M*v = R*(T*v) = R*(2,0,1) = (0,2,1) , oder ist das falsch?
-
http://loop.servehttp.com/~vertexwahn/uploads/Matrix Layout.pdf
http://loop.servehttp.com/~vertexwahn/oldwiki/public_html_an_turing/Matrixanordnungen.pdf
-
"von links" oder "von rechts" is doch völlig egal. Man muss einfach nur die Reihenfolge der Transformationen beachten, weil das Matrixprodukt nicht kommutativ ist. Ob jetzt von links oder rechts hängt davon ab ob man Zeilenvektoren oder Spaltenvektoren benutzt, aber ist letztlich unerheblich.