2009-11-06 11 views
6

Quaternionen sind gut für interpolierte Rotationen zwischen ihnen. So weit, ist es gut.Kann ich die Rotation von zwei Quaternionen aus Yaw/Pitch/Roll interpolieren?

Wenn ich ein Netzwerkspiel habe, wird es ausreichen, die Rotation als Vektor3f zu übertragen oder sollte ich eine Quaternion verwenden? Um das Spiel weicher zu machen, muss ich möglicherweise zwischen der letzten gesendeten und der aktuellen Rotation interpolieren.

Kann ich aber Drehungen zwischen zwei Quaternionen interpolieren, die aus Yaw/Pitch/Roll erstellt wurden?

Quaternion a = Quaternion.FromYawPitchRoll(x1,y1,z1); 

Quaternion b = Quaternion.FromYawPitchRoll(x2,y2,z2); 

a.Interpolate(b, value); // will this work correctly? 

Antwort

6

Ja können Sie. Das Problem mit Euler-Winkel ist Gimbal Lock, dass einige Orientierung Ionen enden mit einem weniger Freiheitsgrad. Wenn Sie von Euler-Winkeln in eine Quaternion konvertieren, ist dieses Problem gelöst. Sie können nahezu jede 3D-Achsen-Darstellung in Quaternion-Form und zurück konvertieren, ohne dass Informationen verloren gehen. Matrizen müssen isotrop sein (keine Skalierung oder Scherung), und Vektoren müssen Einheitslänge haben.

Lineare Interpolation zwischen Quaternionen heißt slerp. Quadratische Interpolation zwischen Quaternionen heißt Gruppe. Da Quaternionen nur komplexe Zahlen mit drei Imaginärteilen sind, gelten für Quaternionen dieselben Gleichungen, die für reelle Zahlen und Vektoren gelten. Denken Sie daran, beim Multiplizieren, Hinzufügen, Loggen und Exponentieren die richtigen Regeln zu verwenden. Man kann sich vorstellen, dass die Imaginärteile i, j und k zusammen einen Achsenvektor bilden, während der Realteil eine Skala ist.

+0

Sie sollten erwähnen (wie @Justicle tat), dass plain-ol 'lerp in vielen Fällen gut für Quaternionen funktioniert. –

+0

Ich habe gelesen, dass Euler Rotationen nicht eindeutig sind, so dass Sie nicht zwischen ihnen interpolieren können. Die Umwandlung in Quaternionen macht sie wirklich eindeutig, was für mich etwas unlogisch erscheint. – codymanix

+0

@codymanix: Vielleicht, aber es ist der Fall. Sie können Euler-Winkel auch nicht direkt verwenden.Da Quaternionen einen zusätzlichen Freiheitsgrad haben, vermeiden sie das ganze Problem mit dem Gimbal-Lock, egal, was die vorherige Darstellung war oder wohin sie später konvertiert wird. Euler-Winkel -> Quaternion -> Matrix ist vollständig koscher. –

5

Sie können zwischen Quaternionen interpolieren. Ich habe einmal einen quaternionbasierten Keyframe-Animationsgenerator geschrieben, der Frames für ein Rendering-System aus ein paar spezifischen Punkten generiert hat. Ich kann den Code nicht teilen, weil er klassifiziert ist :-(

In den SIGGRAPH-Arbeiten gab es irgendwann in den 80er Jahren eine Abhandlung über dieses Thema. Der Hauptvorteil von Quaternionen ist, dass es keine Singularität wie bei Euler-Winkeln gibt hier ist

Ah, die Referenz.

Shoemaker, Ken „Animieren Rotation mit Quaternion Kurven“, SIGGRAPH '85, San Francisco, 22-26 Juli, 1985, Band 19, No. 3, 1985.. ACM 0-89791-166-0/85/007/0245, pp. 245-254.

+0

Quaternionen leiden nicht an Gimbal Lock, aber sie haben eine Mehrdeutigkeit. [1, i, j, k] und [-1, i, j, k] repräsentieren die gleiche Orientierung. Ich finde es komisch, dass -1 360 Grad Drehung in der komplexen Ebene statt der üblichen 180 darstellt, wie für Vektoren :-) –

+2

Das ist nicht ganz eindeutig, wenn es als Keyframes verwendet wird. (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) repräsentiert eine andere Bewegung dann (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0), obwohl Start- und Endposition und sogar Zwischenposition identisch sind. – WorldSEnder

4

Ja und nein. Hier ist eine gute Diskussion: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

Beachten Sie, es ist nicht wirklich wichtig, wie Sie die Quaternionen erhalten, die gleichen Regeln gelten.

Edit: Ich habe den Quellcode in einer Reihe von Projekten verwendet und kann dafür bürgen.

+0

Nicht so eine Diskussion wie eine Person, die sich eindeutig entschieden hat ;-) Wenn man Quaternionen für die Interpolation benutzt, muss man sich mit einigen der merkwürdigen Eigenschaften begnügen. Ich denke, wir können dem Autor der Frage den Nutzen des Zweifels geben; dass er das durchdacht hat. Trotzdem gut gelesen. –

+0

"Diskussion" ist ein höfliches Wort für "rant" :-) – Justicle

+0

Ja, ich gebe dir nur höflich die Eier ab ;-) Endlich Wochenende! –