2009-05-22 20 views
5

En mi aplicación 3D almaceno la posición del objeto en un vector y su rotación alrededor del origen en un cuaternión. Necesito rotar el objeto alrededor de un vector con un origen arbitrario. Traté de convertir la posición - vectorOrigin y la rotación en una matriz, rotando la matriz y luego extrayendo la posición y la rotación como un vector y un cuaternión de la matriz resultante. La posición aparece bien, pero la rotación permanece constante (el objeto gira alrededor del vector dado, pero siempre mira en la misma dirección).¿Cómo rotar el objeto alrededor de un punto usando cuaterniones?

¿Mi método está equivocado o tengo un error?

Respuesta

7

No estoy seguro de por qué esperas que cambie la rotación. Tienes "criaturas" programáticas que representan el punto de origen, el punto de destino y una rotación. Calcular el punto de destino basado en las otras dos "criaturas" no debería afectarlos.

¿Qué tal el enfoque habitual? Si necesita rotar la posición (x, y, z) alrededor del punto (a, b, c), primero traduzca la posición para que la rotación esté alrededor del origen: utilice (xa, yb, zc) como posición , gire alrededor del origen como de costumbre para obtener la nueva posición traducida (x'-a, y'-b, z'-c), y traduzca hacia atrás y obtenga su nueva posición (x ', y', z ').

+0

Esto es lo que estaba haciendo. El objeto se mueve alrededor de un vector con un origen arbitrario, pero siempre está orientado en la misma dirección. Debería enfrentar el origen del vector. Edité la pregunta para aclarar mi algoritmo. – user17544

+0

Si entiendo correctamente, necesita agregar otra rotación, alrededor de un vector paralelo al que usted mencionó, pero que pasa por el * centro * del objeto. –

+0

Tienes razón. Lo resolví girando el objeto alrededor de su centro y luego girando la posición del objeto alrededor del vector dado. – user17544

1

No estoy familiarizado con los cuaterniones, y tal vez esto es totalmente oftálico, pero no se puede girar un objeto 3d alrededor de un punto, el eje de rotación debe ser una línea.

+0

No del todo fuera de tema y un buen punto ... –

+0

Punto justo. Quise decir girar alrededor de un vector con un origen arbitrario. Edité la pregunta. – user17544

Cuestiones relacionadas