Estoy trabajando en el intérprete del sistema L y utilizo el cuaternión como representación interna de la rotación. Necesito exportar el resultado a la escena de JavaScript de ThreeJs y encontré la escena json como la mejor manera de hacerlo.Cómo usar la rotación del cuaternión en la escena Three.js json
Encontré un ejemplo de escena en https://github.com/mrdoob/three.js/blob/master/examples/scenes/test_scene.js pero no hay nada acerca de las rotaciones del cuaternión.
por lo que utiliza ayuda a http://threejs.org/io/s/quaternion y se encontró, que THREE.Object3D tiene propiedades cuaternión y useQuaternion pero parece que no funcionan, el error se incrementa en escena cargador (probablemente debido a la falta de "rotación "atributo, consulte Editar al final):
"obj": {
...
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
también he intentado convertir cuaternión a ángulos de Euler, pero no lo puedo trabajar para mí, probablemente a causa de otra orden de aplicación de los ángulos (supongo que para Y, Z, X). En el ejemplo anterior, el cuaternión representa la rotación alrededor del eje Z (altura tonal) en 135 grados, que se convierte en ángulos de Euler [pi, pi, pi/4] pero no se muestra correctamente en la escena.
La siguiente imagen muestra los bloques rotados por 11 grados más que otros por el eje Z. Los ejes son X (rojo), Y (verde) y Z (azul). La mitad superior se rotó incorrectamente debido a la conversión incorrecta de quaternion a Euclid (utilicé esta página para la implementación: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/).
EDIT: Después de un examen más detenido del error generado por la escena del cargador es debido a la falta de "rotación" atributo de objeto. Siguiendo la salida, no arroje error y la escena se carga, pero está equivocada (de la misma manera que la imagen mostrada) porque se ignoran las rotaciones del cuaternión.
"obj": {
...
"rotation": [3.14159265358979,3.14159265358979,0.785398163397449],
"quaternion": [0.38268343236509,0,0,0.923879532511287],
"useQuaternion": true
}
¿Hay algo más en el mensaje de error planteado por el gestor de escena, algo que indica específicamente lo que no le gusta del uso de cuaterniones? –
Bien, el error se debe a la falta del atributo "rotación". El cargador de escena probablemente no cargue las rotaciones del cuaternión. – NightElfik