Pregunta

iPhone GLGravity ejemplo que muestra cómo utilizar el acelerómetro y OpenGL sufre de un problema de bloqueo del cardán. Me pregunto ¿hay algún código disponible utilizando la rotación de cuaternión en lugar de ángulos de Euler? Cualquier ayuda será muy apreciada, estoy luchando con esto desde hace mucho tiempo sin tener un éxito ...

¿Fue útil?

Solución

Es útil tener una buena comprensión de la teoría de las cosas antes de tratar de implementar y utilizar uno mismo. A continuación se presentan dos artículos introductorios sobre el uso de cuaterniones para las rotaciones. Ambos están relacionados principalmente con suavizar interpolaciones de rotación y evitar bloqueo de ejes en las rotaciones acumuladas:

Gamedev.net - Quaternion Powers

Gamasutra - Rotación de objetos usando cuaterniones

Ahora en cuanto a código real va, yo sugeriría conseguir y utilizar, una biblioteca de vectores de matemáticas "fuerza de la industria", en contraposición a rodar su propia. Mi sugerencia sería agarrando la parte LinearMath del proyecto Física Middleware bala. la física de bala, y la biblioteca matemática lineal incluido, es desarrollado por algunos de los mejores ingenieros de Sony y ha estado en desarrollo activo desde hace años. Está disponible gratuitamente, no restringido por ninguna licencia (licencia Zlib), y es utilizado por los desarrolladores de juegos profesionales de todo el mundo. El lib es multiplataforma / Arquitectura y compila en cualquier cosa de iPhone para PS3.

El lib ofrece un clase Quaternion que le permite crear cuaterniones de ángulos de Euler o de rotación alrededor de un eje arbitrario, por ejemplo, usando setEulerZYX . Una vez que tenga sus cuaterniones, no se construyen en funciones para todas las operaciones comunes aplicables a los mismos; más, menos, mul, normalizar, slerp y mucho más.

Para aplicar realmente su cuaternión final a la representación de OpenGL, la Transformar clase que permite a construir una matriz de un cuaternión. La clase de transformar a su vez incluye una función getOpenGLMatrix que proporciona directamente una matriz de compatibilidad para pasar a OpenGL.

El lib también incluye una serie de otras clases y funciones de matriz y vector muy útiles.

Obtenga la última dist bala desde Google código , o tomar sólo la LinearMath porción del código directamente de la subversión usando: svn checkout http://bullet.googlecode.com/svn/trunk/src/LinearMath

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top