2009-11-06 13 views
6

Quaternions son buenos para interpolar las rotaciones entre ellos. Hasta aquí todo bien.¿Puedo interpolar la rotación de dos Quaternions creados a partir de Yaw/Pitch/Roll?

Si tengo un juego de red, ¿será suficiente transferir la rotación como vector3f o debería usar un quaternion? Para que el juego sea más suave, quizás tenga que interpolar entre la última rotación enviada y la actual.

¿Pero puedo interpolar las rotaciones entre dos Quaternions que se crearon a partir de Yaw/Pitch/Roll?

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

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

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

Respuesta

6

Sí, puede. El problema con los ángulos de Euler es la traba del cardán, que algunos orientan iones termina con un grado menos de libertad. Cuando convierte de ángulos de Euler a un cuaternión, ese problema se resuelve. Puede convertir casi cualquier representación de eje 3D en forma de cuaternión y viceversa, sin pérdida de información. Las matrices deben ser isotrópicas (sin escala o cizallamiento), y los vectores deben tener una longitud unitaria.

La interpolación lineal entre cuaterniones se llama slerp. La interpolación cuadrática entre cuaterniones se llama escuadra. Como los cuaterniones son simplemente números complejos con tres partes imaginarias, las mismas ecuaciones que funcionan con números reales y vectores se aplican a los cuaterniones. Solo recuerda usar las reglas correctas cuando hagas multiplicación, suma, registro y exponenciación. Puede ayudar a imaginar que las partes imaginarias i, j y k juntas forman un vector de eje, mientras que la parte real es una escala.

+0

Debe mencionar (como lo hizo @Justicle) que plain-ol 'lerp funciona muy bien para cuaterniones en muchos casos. –

+0

Leí que las rotaciones de Euler no son inequívocas, por lo que no puede interpolar entre ellas. ¿Convertirlos en cuaterniones realmente los hace inequívocos, lo que me parece un poco ilógico? – codymanix

+0

@codymanix: Tal vez, pero es el caso. Tampoco puedes usar ángulos euler directamente.Como los cuaterniones tienen un grado adicional de libertad, evitan todo el problema con el bloqueo de cardán, sin importar cuál haya sido la representación anterior, ni a qué se convierte después. Angulos de Euler -> quaternion -> matriz es completamente kosher. –

5

Puede interpolar entre cuaterniones. Una vez escribí un generador de animación de fotogramas basado en cuaterniones que generó marcos para un sistema de renderizado a partir de unos pocos puntos específicos. No puedo compartir el código porque está clasificado :-(

Hubo un artículo en los procedimientos de SIGGRAPH en algún momento de los 80. La principal ventaja de los cuaterniones es que no hay una singularidad como la que hay con los ángulos de Euler. .

Ah, aquí está la referencia:

Shoemaker, Ken “Animación de rotación con las curvas de Quaternion”, SIGGRAPH '85, San Francisco, Jul 22-26, 1985, vol 19, No. 3, 1985.. ACM 0-89791-166-0/85/007/0245, pp. 245-254.

+0

Quaternions no sufren de bloqueo Gimbal, pero tienen una ambigüedad. [1, i, j, k] y [-1, i, j, k] representan la misma orientación. Me parece raro que -1 represente 360 ​​grados de rotación en el plano complejo, en lugar de los 180 habituales, como para los vectores :-) –

+2

Eso no es del todo ambiguo cuando se utiliza como fotogramas clave. (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) representa otro movimiento luego (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0) aunque la posición inicial y final e incluso la posición intermedia son las mismas. – WorldSEnder

4

Sí y no. Aquí hay una buena discusión: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

Tenga en cuenta que en realidad no importa cómo obtuvo los cuaterniones, se aplican las mismas reglas.

Editar: He utilizado el código fuente presentado en el documento sobre una serie de proyectos y puedo responder por ello.

+0

No es tanto una discusión como una persona que claramente ha tomado una decisión ;-) Si usa cuaterniones para la interpolación, tiene que conformarse con algunas de las propiedades raras. Creo que podemos darle al autor de la pregunta el beneficio de la duda; que él ha pensado en esto. Una buena lectura, sin embargo. –

+0

"discusión" es una palabra educada para "despotricar" :-) – Justicle

+0

Sí, solo estoy reventando educadamente tus bolas ;-) Fin de semana al fin! –

Cuestiones relacionadas