Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Du brauchst einfach nur eine inverse Martix von der Matrix bilden, mit der du/OpenGL die Punkte multipliziert hast.
Schlussendlich multiplizierst du die Punkte noch damit und du erhälst die "Urspungs" Punkte.
(Hinweis: Die Inversion einer 4*4 Matrix ist nicht immer möglich und zimlich aufwendig)
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Die obere 3x3 Matrix ist normalerweise orthogonal (orthonormal?) und daher kann man die Inverse davon bilden, indem man die Zeilen und Spalten vertauscht. In der vierten Spalte steht im Normalfall nur die Verschiebung. Das geht wie gesagt nicht immer, aber wenn die Matrix eine Rotation und Verschiebung ohne Skalierung beschreibt, dann funktioniert das. Bei Matrizen die man für die Ausrichtung von Objekten benötigt ist das ja meistens der Fall.
Code:
v.x:= v.x- m[12];
v.y:= v.y- m[13];
v.z:= v.z- m[14];
result.x:= v.x* m[0]+ v.y* m[1]+ v.z* m[2];
result.y:= v.x* m[4]+ v.y* m[5]+ v.z* m[6];
result.z:= v.x* m[8]+ v.y* m[9]+ v.z* m[10];
Wenn man das für mehrere Vektoren machen möchte, kann man daraus auch wieder eine Matrix bauen, indem man den Verschiebungsvektor (m[12],m[13],m[14]) konvertiert und mit der transponierten Matrix multipliziert.
Die 3x3 Matrix ist transponiert und der Vektor wird vorher abgezogen. Es ist also nicht das gleiche wie eine Multiplikation. Ich benutzte das um z.B. die Lichtposition in den Objectspace zu bringen.
Wenn du nur einen Vektor(keine Position) transformieren willst, dann kannst du dir auch die Subtraktion sparen. Orthogonal und orthonormal sind ähnlich, deshalb wußte ich nicht mehr genau was da gelten muß. Ich habe aber nochmal nachgesehen:
Nach der Definition:
Eine Matrix A heißt orthogonal genau dann wenn: A * transponiert(A) = Einheitsmatrix
=> offensichtlich: transponiert(A) = A^-1
Alle Matrizen die Transformationen beschreiben, bei denen die Winkel und Längenverhältnisse erhalten bleiben, also Verschiebung und Rotation, sind orthogonale Matrizen. Und das ist ja in den meisten Fällen so. Bei orthogonalen Matrizen stehen die Spaltenvektoren senkrecht aufeinander.
Die volle 4x4 Matrix wird nicht orthogonal sein. Aber sie besteht ja in den meisten Fällen aus eben der othogonalen 3x3 Matrix und einer Verschiebung. Die 3x3 Matrix und die Verschiebung kann man dann einzeln invertieren.
Zuletzt geändert von LarsMiddendorf am Mo Jan 24, 2005 00:26, insgesamt 1-mal geändert.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Damit rswm auch mit unseren Vorschlägen was anfangen kann würde ich vorschlagen das du rswm nochmal genau postet wie du welche Positionsdaten und Matrizen hast. Denn erst wenn du genau weist welche Rechung du umkehren möchtest, kannst du diese auch umkehren.
Die allgemeinen Ansätze dazu haben wir dir ja geliefert.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.