2009-11-06 2 views
6

Les quaternions sont bons pour interpoler les rotations entre eux. jusqu'ici tout va bien.Puis-je interpoler la rotation à partir de deux quaternions créés à partir de lacet/tangage/roulis?

Si j'ai un jeu en réseau, est-ce qu'il suffira de transférer la rotation comme vector3f ou devrais-je utiliser un quaternion? Pour rendre le jeu plus fluide, il se peut que je doive interpoler entre la dernière rotation envoyée et la dernière en cours.

Mais puis-je interpoler les rotations entre deux quaternions créés à partir de lacet/tangage/roulis?

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

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

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

Répondre

6

Oui, vous pouvez Le problème avec les angles d'Euler est le verrou de cardan, que certains orientent les ions finissent avec un degré de liberté en moins. Lorsque vous convertissez des angles d'Euler en quaternions, ce problème est résolu. Vous pouvez convertir presque n'importe quelle représentation d'axe 3D en forme de quaternion et en arrière, sans aucune perte d'information. Les matrices doivent être isotropes (pas d'échelle ou de cisaillement) et les vecteurs doivent avoir une longueur unitaire.

L'interpolation linéaire entre les quaternions est appelée slerp. L'interpolation quadratique entre les quaternions est appelée squad. Puisque les quaternions ne sont que des nombres complexes avec trois parties imaginaires, les mêmes équations qui fonctionnent sur les nombres réels et les vecteurs s'appliquent aux quaternions. Rappelez-vous simplement d'utiliser les règles correctes lors de la multiplication, de l'addition, du log et de l'exponentiation. Cela peut aider à imaginer que les parties imaginaires i, j et k forment ensemble un vecteur d'axe, alors que la partie réelle est une échelle.

+0

Vous devez mentionner (comme l'a fait @Justicle) que plain-ol 'lerp fonctionne très bien pour les quaternions dans de nombreux cas. –

+0

J'ai lu que les rotations euler ne sont pas sans ambiguïté, donc vous ne pouvez pas interpoler entre eux. Le fait de les convertir en quaternions les rend vraiment sans ambiguïté, ce qui me semble un peu illogique. – codymanix

+0

@codymanix: Peut-être, mais c'est le cas. Vous ne pouvez pas utiliser directement les angles d'Euler.Puisque les quaternions ont un degré de liberté supplémentaire, ils évitent tout le problème avec le verrou de cardan, peu importe ce que la représentation précédente était, ou à quoi il est converti plus tard. Les angles d'Euler -> quaternion -> la matrice est entièrement kasher. –

5

Vous pouvez interpoler entre les quaternions. J'ai déjà écrit un générateur d'animation d'images clés basé sur quaternion qui générait des trames pour un système de rendu à partir de quelques points spécifiques. Je ne peux pas partager le code parce qu'il est classé :-(

Il y avait un document dans la procédure de SIGGRAPH quelque temps dans les années 80 sur ce thème. Le principal avantage de quaternions est qu'il n'y a pas de singularité comme il est avec des angles d'Euler .

Ah, voici la référence:

Cordonnier, Ken « Animer rotation avec courbes Quaternion », SIGGRAPH '85, San Francisco, 22 à 26 juillet, 1985, vol 19, n ° 3, 1985.. ACM 0-89791-166-0/85/007/0245, pp. 245-254

+0

Les quaternions ne souffrent pas de blocage du cardan, mais ils ont une ambiguïté. [1, i, j, k] et [-1, i, j, k] représentent la même orientation. Je trouve assez bizarre que -1 représente 360 ​​degrés de rotation dans le plan complexe, au lieu des 180 habituels, comme pour les vecteurs :-) –

+2

Ce n'est pas tout à fait ambigu lorsqu'il est utilisé comme image clé. (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) représente un autre mouvement puis (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0) bien que les positions de début et de fin et même la position intermédiaire soient les mêmes. – WorldSEnder

4

Oui et non. Voici une bonne discussion: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

Notez qu'il ne compte pas vraiment comment vous avez obtenu les escouades, les mêmes règles sont applicables. Editer: J'ai utilisé le code source présenté dans le document sur un certain nombre de projets et je peux en témoigner.

+0

Pas autant une discussion comme une personne qui a clairement fait son esprit ;-) Si vous utilisez escouades pour l'interpolation, vous avez sorte de régler avec certaines des propriétés étranges. Je pense que nous pouvons donner à l'auteur de la question le bénéfice du doute; qu'il a pensé cela à travers. Une bonne lecture néanmoins. –

+0

« discussion » est un mot poli pour « diatribe » :-) – Justicle

+0

Ouais, je suis juste busting poliment week-end de vos boules enfin! –

Questions connexes