Quaternion für Rotationsgeschwindigkeit?



  • Hi Leute,
    Ich habe mich schon einige Zeit mit Quaternionen beschäftigt, habe auch eine Klasse dafür geschrieben (C++) und interessiere mich jetzt für die Anwendung in der Physik (Richtung Physik-Engine).

    Bevor ich mich mit Quaternionen vertraut gemacht habe, hatte ich Eulerwinkel benutzt, um Rotationen anzugeben.
    So sieht meine Vorgehensweise in etwa mit Eulerwinkeln aus:

    //Init
    Rotationszustand= Vector3(0);
    Rotationsgeschwindigkeit= Vector3(12, 2, -45); //<-- Rotation 12° um X-Achse, 2 um Y-Achse und -45 um Z-Achse pro Sekunde
    
    //Jeden Frame
    Rotationszustand+= Rotationsgeschwindigkeit * DeltaT;
    ...
    WorldMatrix*= MatrixFromEuler(Rotationszustand);
    

    Mit Quatenionen ist das schon schwieriger. Die kann man nicht einfach addieren.

    Wie mache ich das jetzt?
    Ich brauch einen Denkanstoß. Bitte helft!



  • naja, es funktioniert genau so. du erstellst ja immer dynamisch aus deinem Euler Winkel die Rotationsmatrix. genauso kannste aus Euler Winkeln Quaternionen erstellen. (also eins für X-Rotation, eins für Y-Rotation und eins für Z-Rotation und die dann lustig miteinander multiplizieren)

    Ansonsten kannste natürlich immer wieder das alte Quaternion mit dem Quaternion der Änderung multiplizieren.



  • Nunja, dann hätte ich zumindest die Multiplikationen der drei Roationsmatrizen für die einzelnen Eulerwinkel durch Quaternionenmultiplikationen ersetzt. Obendrein käme noch das Umwandeln von Quaternion zu Matrix.

    Ich glaube, das ist noch nicht das gelbe vom Ei.

    Da gibt es doch noch den Ansatz mit den Achsen als Rotationszustand...

    Wie bringe ich all diese Ansätze mit viel Performance unter einen Hut?


Anmelden zum Antworten