Pregunta

Estoy haciendo una escena 3D muy simple, con 5 puntos en coordenadas mundiales. Me gustaría navegar por la escena, así que estoy definiendo una cámara con un vector ARRIBA y FUERA. Con esta información, genero una matriz de rotación en cada cuadro, que aplicaré a los vectores para obtener las coordenadas de la cámara.

La pregunta es: he leído sobre el bloqueo de cardán como un problema al usar este método, pero ¿sucedería en este caso?

Tenga en cuenta que estoy generando la matriz de rotación en cada cuadro, y no estoy girando acumulativamente. Entonces, ¿podría ocurrir un bloqueo en esta situación? Si ese fuera el caso, ¿qué sugeriría para aplicar de forma segura una rotación (de los vectores ARRIBA y FUERA)?

Gracias

¿Fue útil?

Solución

Si con OUT quiere decir "adelante", y esto siempre es perpendicular al vector ARRIBA, entonces NO, no encontrará bloqueo de cardán.

Lo que está haciendo es crear una matriz de orientación a partir de los vectores ARRIBA y HACIA ADELANTE, y aplicar cada cuadro, que es un método bastante común para mover una cámara en el espacio. No está aplicando rotaciones múltiples utilizando ángulos de Euler, lo que puede ser una causa de bloqueo de cardán.

Nota para crear la matriz también necesitará crear una " izquierda " (o derecha) de los vectores ARRIBA y HACIA ADELANTE. Una buena introducción a esto es aquí - tenga en cuenta que ese ejemplo luego aplica rotaciones a la matriz de la cámara, que es un paso completamente opcional.

Wikipedia tiene una buena explicación de gimbal lock .

Otros consejos

Encontrará un problema de bloqueo de cardán cuando use el enfoque de matriz para generar matrices de rotación (para X, Y, Z) y luego multipliquelas para obtener la matriz de rotación final. Si he entendido que lo hará, usa el vector OUT para obtener ángulos (alfa, beta, gamma), luego está calculando las matrices, finalmente, las multiplica para obtener la matriz de rotación final, entonces sí, encontrará un bloqueo de cardán.

Una forma de deshacerse de este problema es usar Quaternions para los cálculos.

Además, aquí he encontrado algunos tutoriales de OpenGL sobre cómo implementar esos.

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