9
votes

Puis-je interpoler la rotation de deux quaternions créées à partir de yaw / pitch / rouleau?

Quaternions sont utiles pour interpoler les rotations entre elles. Jusqu'ici, si bon.

Si j'ai un jeu de réseautage, il suffira-t-il de transférer la rotation comme vecteur3f ou devrais-je utiliser un quaternion? Pour rendre le jeu plus lisse, je devais peut-être interpoler entre la dernière rotation envoyée et le courant actuel.

mais puis-je interpoler des rotations entre deux quaternions créées à partir de lacet / pitch / rouleau? < Pré> xxx


0 commentaires

3 Réponses :


5
votes

Vous pouvez interpoler entre quaternions. J'ai écrit une fois un générateur d'animation Keyframe basé sur Quaternion qui a généré des cadres pour un système de rendu de quelques points spécifiques. Je ne peux pas partager le code car il est classé :-(

Il y avait un article dans la procédure Siggraph dans les années 80 à propos de ce sujet même. Le principal avantage des quaternions est qu'il n'y a pas de singularité comme s'il y a des angles d'Euler.

ah, voici la référence:

Shoemaker, Ken "Rotation d'animation avec courbes de quaternion", Siggraph '85, San Francisco, Jul. 22-26, 1985, vol. 19, N ° 3, 1985 ACM 0-89791-166-0 / 85/007/0245, PP. 245-254.


3 commentaires

Les quaternions ne souffrent pas de la serrure de Cambal, mais elles ont une ambiguïté. [1, je, j, k] et [-1, je, j, k] représente la même orientation. Je trouve qu'il est un peu étrange que -1 représentent 360 degrés de rotation dans l'avion complexe, au lieu de 180 habituels, comme pour les vecteurs :-)


Ce n'est pas tout à fait ambigu des images clés. (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) représente un autre mouvement alors (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0) Bien que la position de début et de fin et même la position intermédiaire sont les mêmes.


Nice Wikipedia Page basée sur les travaux de Ken mentionnés ci-dessus: en.wikipedia.org/wiki/slerp



9
votes

Oui, vous pouvez. Le problème avec les angles d'Euler est le verrou de Gimbal, que certaines orientations se retrouvent avec un degré de liberté de moins. Lorsque vous convertissez des angles d'Euler en quaternion, ce problème est résolu. Vous pouvez convertir presque toute représentation d'axe 3D en forme de quaternion et en arrière sans perte d'informations. Les matrices doivent être isotropes (sans échelle ni cisaillement) et les vecteurs doivent être de longueur de l'unité.

L'interpolation linéaire entre quaternions est appelée slnerp . L'interpolation quadratique entre quaternions est appelée équipe . Étant donné que les quaternions ne sont que des nombres complexes avec trois parties imaginaires, les mêmes équations qui travaillent sur des nombres réels et des vecteurs s'appliquent aux quaternions. N'oubliez pas d'utiliser les règles correctes lors de la multiplication, de l'addition, du journal et de l'exponentiation. Cela peut aider à imaginer que les parties imaginaires I, J et K forment ensemble un vecteur d'axe, tandis que la partie réelle est une échelle.


5 commentaires

Vous devriez mentionner (comme @Justicle le faisait) que Plain-Ol 'LERP fonctionne simplement pour les quaternions dans de nombreux cas.


J'ai lu que les rotations d'Euler ne sont pas sans ambiguïtés, vous ne pouvez donc pas interpoler entre eux. Les convoquent-elles en quaternions les rend vraiment sans ambiguïtés, ce qui semble un peu illogique pour moi.


@codymanix: Peut-être, mais c'est le cas. Vous ne pouvez pas utiliser Euler angles directement soit. Étant donné que les quaternions ont un degré de liberté supplémentaire, ils évitent tout le problème avec la serrure de cardan, quelle que soit la représentation précédente, ou ce qu'elle est convertie ultérieurement. Euler Angles -> Quaternion -> Matrix est entièrement casher.


@codymanix: Les angles d'Euler interpolant et les quaternions interpolant sont des opérations intuitivement très différentes. Les quaternions interpolant sont ce que vous vous attendez à ce que ce soit: il existe une rotation minimale Q entre deux orientations A et B, telles que A * q = B, et nous augmentons l'angle de q de zéro à sa valeur d'origine alors que nous interpolons, donc nous Prenez le chemin le plus court de A à b. Lorsque vous interpolez les angles d'Euler, vous faites quelque chose de demi-sourire. Vous brisez arbitrairement Q en rotations alignées à trois axes (quelles que soient les orientations d'A et B) et interpolez ces rotations de composants à la place.


(suite d'en haut) ... Les angles d'Euler interpolant ne prennent donc pas nécessairement le chemin le plus court de l'orientation A à l'orientation B, et peuvent bien prendre des chemins assez sauvages, contrairement au quaternions interpolant les quaternions utilisant l'algorithme SLERP.



4
votes

oui et non. Voici une bonne discussion: http://number-none.com/product/ Comprendre% 20slerp,% 20ten% 20not% 20utilisant% 20it /

note que cela n'a pas vraiment d'importance comment vous avez eu les quaternions, les mêmes règles s'appliquent.

Edit: J'ai utilisé le code source présenté dans le document sur un certain nombre de projets et peut être équipé pour cela.


4 commentaires

Pas autant une discussion qu'une personne qui a clairement pris sa décision ;-) Si vous utilisez des quaternions pour l'interpolation, vous devez également vous installer avec certaines des propriétés étranges. Je pense que nous pouvons donner à l'auteur de la question au profit du doute; qu'il ait pensé cela à travers. Une bonne lecture néanmoins.


"Discussion" est un mot poli pour "rant" :-)


Ouais, je ne fais que casser poliment vos couilles ;-) weekend enfin!


Après avoir examiné l'article, je suis en fait plus certain que slerp est le meilleur choix: il a une "vélocité constante" et est "couple-minimal". De plus, je ne me soucie pas vraiment de la "commutativité", donc aucun problème là-bas.