vector3 three raycaster javascript three.js

javascript - raycaster - three js rotation



Three.js Cómo usar quaternion para girar la cámara (2)

En Three.js, me gustaría utilizar THREE.quaternion para hacer que el objeto de la cámara gire hacia el objeto seleccionado.

Busqué en la web pero no encontré ningún ejemplo / demo o documento sobre cómo usar esta clase de cuaternión.

Intento mi suerte con el siguiente código:

camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); camera.position.y = 10; camera.position.z = 0; camera.position.x = radious; camera.useQuaternion = true; // I did use the TrackballTrackballControls. Maybe it causes the problem so I put it here controls = new THREE.TrackballControls( camera, document.getElementById(_canvasElement) ); // function to make the camera rotate to the object function focusOn3DObject(obj){ obj.useQuaternion = true; obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1); var newQuaternion = new THREE.Quaternion(); THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.07); camera.quaternion = newQuaternion; }

Pero no funciona. ¿Me he perdido algo? Por favor ayuda. Gracias por adelantado.


Slerp es bastante fácil. Toma 4 parámetros:

  • targetRotation la rotación real de la cámara
  • destinationRotation la rotación del objeto
  • destinationRotation new quaternion que será la nueva rotación de la cámara
  • percentOfRotation este parámetro es el patio de recreo, estoy usando 0.07 aquí en este momento, podría ser un valor entre 0 (0%) y 1 (100%)

Este es mi método de rotación:

var qm = new THREE.Quaternion(); THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07); camera.quaternion = qm; camera.quaternion.normalize();

Espero que esto te ayude. Y no te preocupes, también trabajé algunas semanas en la siguiente cámara perfecta.


Creo que esta línea no funcionará:

obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);

Necesitas configurar

obj.useQuaternion = true

Después de agregar un objeto a la escena, cuando lo gire, se aplicará automáticamente a obj.quaternion .

El segundo punto es que debes aplicar el objeto a tus controles y no a la cámara. ¿Porque quieres controlar el objeto y no la cámara?