Orientar la rotación del objeto a un punto de spline tangente en TRES.JS
estoy usandoSplineCurve3 para trazar una línea solo en los ejes X e Y, tengo un cubo animando exitosamente a lo largo de esta línea usandospline.getPoint(t)
donde t es 0-1 en el tiempo. Estoy tratando de orientar el cubo hacia la línea a través de su vector hacia arriba que es Y usando el producto de puntos.
Está casi alineado pero ligeramente fuera. Pensé que usaría el producto puntual del vector Y y la tangente del punto actual como el ángulo para rotar un cuaternión.
Aquí está mi función de render:
function render() {
var updateMatrix = new THREE.Matrix4();
updateMatrix.setPosition(spline.getPoint(t));
var angle = new THREE.Vector3(0,1,0).dot(spline.getTangent(t).normalize());
var quat = new THREE.Quaternion;
quat.setFromAxisAngle(new THREE.Vector3(0,0,1), angle);
updateMatrix.setRotationFromQuaternion(quat);
marker.rotation.getRotationFromMatrix(updateMatrix);
marker.matrixWorld = updateMatrix;
t = (t >= 1) ? 0 : t += 0.002;
renderer.render(scene, camera);
}
Y aquí hay un violín que demuestra mi problema. ¿Alguien puede decirme dónde me está yendo mal con el aspecto de la rotación?
Puedes editar mi -ejemplo de jsfiddle