Hallo!
Ich habe bei mir Rotationen über Quaternionen implementiert. Da ich allerdings mehrere Objekte um ein Zentrum drehen möchte, halte ich es für sinnvoller, die komplette Translation doch lieber über eine Matrix darzustellen. Nun habe ich das probiert, hatte aber den Fehler, dass die Rotation "taumelt". Bin nun doch erstmal auf den sicheren Stand der Quaternionen zurück.
Meine Frage ist nun, habe ich da nur einen Fehler gehabt oder ist es nicht möglich, relativ exakt über Matrizen zu arbeiten, weil ja sonst alles geht. Soweit ich weiß, sind Quaternionen nur besser, weil sie interpoliert werden können, was bei Matrizen ja nicht geht. Gibt es noch mehr Vorteile, die Quaternione bieten?
Und falls ich bei den Quaternionen bleiben muss, wie kann man um ein beliebiges Zentrum drehen?
Danke für eure Antworten! :D
Matrizen vs Quaternionen
-
- Establishment
- Beiträge: 493
- Registriert: 01.03.2009, 19:09
Re: Matrizen vs Quaternionen
Hallo
der Hauptvorteil von Quaternionen liegt eher darin dass damit der sogenannte Gimbal Lock vermieden wird.
http://de.wikipedia.org/wiki/Gimbal_Lock
http://en.wikipedia.org/wiki/Gimbal_lock
Ansonsten solltest du jede Rotation die du mit Quaternionen durchführen kannst auch mit Matrizen machen können (zumindest habe ich das immer geschafft)
wie du damit um eine beliebiges Zentrum bzw um eine Beliebige Achse drehst kann ich dir auf anhieb nicht sagen da ich meine Rotationen normal mit Matrizen ausführe
Allerdings gibt es durchaus die Möglichkeit dein Quaternion in eine Matrix umzurechen, vielleicht probierst du das einfach mal uns schaust ob dann immer noch das gleiche Problem auftritt.
der Hauptvorteil von Quaternionen liegt eher darin dass damit der sogenannte Gimbal Lock vermieden wird.
http://de.wikipedia.org/wiki/Gimbal_Lock
http://en.wikipedia.org/wiki/Gimbal_lock
Ansonsten solltest du jede Rotation die du mit Quaternionen durchführen kannst auch mit Matrizen machen können (zumindest habe ich das immer geschafft)
wie du damit um eine beliebiges Zentrum bzw um eine Beliebige Achse drehst kann ich dir auf anhieb nicht sagen da ich meine Rotationen normal mit Matrizen ausführe
Allerdings gibt es durchaus die Möglichkeit dein Quaternion in eine Matrix umzurechen, vielleicht probierst du das einfach mal uns schaust ob dann immer noch das gleiche Problem auftritt.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- dowhilefor
- Moderator
- Beiträge: 173
- Registriert: 27.02.2009, 15:44
- Alter Benutzername: 6SidedDice
- Echter Name: Nico Probst
- Wohnort: Bochum
- Kontaktdaten:
Re: Matrizen vs Quaternionen
Sollte doch möglich sein in dem du die Rotation im Quaternion in eine Matrix zurückrechnest. Oder täusche ich mich da? Ich meine das so gemacht zu haben. Rotationen um die jeweiligen Achsen festgehalten, dann in eine Matrix umgewandelt, Translationsmatrix für den Ursprung (Die Achsen ändern sich dadurch ja nicht) rotiert (Mit der Matrix aus dem Quaternion) und wieder zurück bewegt. Hoffe ich liege da jetzt nicht total daneben, ist schon was her.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Re: Matrizen vs Quaternionen
Das Problem ist folgendes:
Es gibt keine injektive stetige Abbildung des R^3 nach SO(3). Deswegen nimmt man als Abbildung eine Einschränkung des R^4 nach SO(3). Alles klar?
Das heißt auf gut Deutsch: Man kann zwar mit Eulerwinkeln jede Orientierung eines Objekts im Raum angeben, aber man keine Abbildung definieren, welche die Eulerwinkel als Rotationsmatrix aufschreibt, und dabei gewünschte Eigenschaften einhält, z.b. dass keine Singularitäten auftreten (wie beim Gimbal Lock). Dafür geht man eine Dimension höher, in die Quaternionen.
Dort nimmt man nur bestimmte Elemente (Einheitsquaternionen), und kann eine fast-injektive stetige Abbildung von Quaternionen nach Rotationsmatrizen aufstellen (da zwei Quaternionen q und -q dieselbe Rotation aufweisen). Die Umkehrabbildung ist auch (bis auf das Vorzeichen) definierbar.
Im Grunde geht es nur um das Problem des Kartenmalens: Man kann eine Kugeloberfläche nicht "diffeomorph" in einer Ebene darstellen.
Es gibt keine injektive stetige Abbildung des R^3 nach SO(3). Deswegen nimmt man als Abbildung eine Einschränkung des R^4 nach SO(3). Alles klar?
Das heißt auf gut Deutsch: Man kann zwar mit Eulerwinkeln jede Orientierung eines Objekts im Raum angeben, aber man keine Abbildung definieren, welche die Eulerwinkel als Rotationsmatrix aufschreibt, und dabei gewünschte Eigenschaften einhält, z.b. dass keine Singularitäten auftreten (wie beim Gimbal Lock). Dafür geht man eine Dimension höher, in die Quaternionen.
Dort nimmt man nur bestimmte Elemente (Einheitsquaternionen), und kann eine fast-injektive stetige Abbildung von Quaternionen nach Rotationsmatrizen aufstellen (da zwei Quaternionen q und -q dieselbe Rotation aufweisen). Die Umkehrabbildung ist auch (bis auf das Vorzeichen) definierbar.
Im Grunde geht es nur um das Problem des Kartenmalens: Man kann eine Kugeloberfläche nicht "diffeomorph" in einer Ebene darstellen.
- dv
- Beiträge: 51
- Registriert: 15.09.2002, 17:46
- Benutzertext: Ugauga.
- Alter Benutzername: dv
- Wohnort: Südamerikanischer Dschungel
- Kontaktdaten:
Re: Matrizen vs Quaternionen
Quaternionen beinhalten 4 Skalare, zusammen mit einem Positionsvektor ergeben sich 7 Skalare. Das ist nicht uninteressant für skeletale Animation, da man weniger Daten zu speichern braucht, sei es über Uniforms, Texturen o.ä. Für Instancing ist das ebenfalls interessant (da bei Instancing oft nur die Lage zwischen den Instanzen variiert und sonst nichts).
Re: Matrizen vs Quaternionen
Hi! Danke für eure Bemühungen! :)
Hab auf jeden Fall was dazu gelernt.
Letztlich war es allerdings wieder eigenes Verschulden mit der taumelnden Drehung! Hab mich da auf falsche Variablen bezogen. Also vom Prinzip her funktioniert beides jetzt absolut Identisch. Das ist gut, weil ich denke, das in meinem Fall Matrizen besser sind, da ich ebend um beliebige Drehpunkte rotieren will und da gehts über Matrix einfacher.
Also danke nochmal!
Und Frohe Ostern :D
Zudomon
Hab auf jeden Fall was dazu gelernt.
Letztlich war es allerdings wieder eigenes Verschulden mit der taumelnden Drehung! Hab mich da auf falsche Variablen bezogen. Also vom Prinzip her funktioniert beides jetzt absolut Identisch. Das ist gut, weil ich denke, das in meinem Fall Matrizen besser sind, da ich ebend um beliebige Drehpunkte rotieren will und da gehts über Matrix einfacher.
Also danke nochmal!
Und Frohe Ostern :D
Zudomon