así que estoy experimentando con el uso de interpolaciones para interpolar el fov de una cámara basado en un objeto que se hace clic en la escena, que funciona muy bien, pero ahora lo que quiero que haga es que la cámara cambie su enfoque al objeto que se hizo clic, que no está funcionando. Aquí está mi código para el clic:three.js - cómo hacer que la cámara mire un objeto durante una interpolación
function onDocumentMouseDown(event) {
event.preventDefault();
var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, - (event.clientY/window.innerHeight) * 2 + 1, 0.5);
var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(objects);
if (intersects.length > 0) { //We've clicked a certain object
camTarget = intersects[0].object.position; //HERE'S THE VECTOR3 I WANT TO LOOK AT
camTween.start();
}
}
y mi código para el movimiento de interpolación/cámara:
var camUpdate = function(){
camera.fov = currentFov.fov; //WORKING
camera.lookAt(camTarget); //NOT WORKING
camera.updateProjectionMatrix();
}
var currentFov = { fov: camera.fov };
TWEEN.removeAll();
camTween = new TWEEN.Tween(currentFov).to({fov: +zoomInFov},tweenTime).easing(camEase).onUpdate(camUpdate);
La cámara se está interpolando el campo de visión correctamente, pero parece que mantengamos apuntando en la misma dirección siempre se señaló, en lugar de cambiar al vector "camTarget" especificado en el comando lookAt.
Ah, sí, el problema de hacer que vea la ubicación correcta fue que lo puse en el controlador de eventos, no en el ciclo animado. Pude usar lookAt() y no copiar(). Buena atrapada. En cuanto a cómo será interpolado, no estoy seguro. Pensé que al ponerlo en una función animada, a medida que la cámara se movía, la función lookAt también cambiaría dinámicamente, haciendo que se viera, en cierto sentido, como si estuviese interpolada. Supongo que debería mover la cámara en lugar de cambiar el televisor para que funcione. Gracias de nuevo. – mheavers
Me alegra que lo haya hecho funcionar :) – MikaelEmtinger
@MikaelEmtinger: ¿por qué no hacer demasiado en el controlador de eventos? – Neil