, поэтому я экспериментирую с использованием твинов для анимации камеры на основе объекта, который нажал на сцену, которая отлично работает, но теперь что я хочу, чтобы камера переключила фокус на объект, который был нажат, что не работает. Вот мой код щелчку:three.js - как заставить камеру смотреть на объект во время анимации
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();
}
}
и мой код для движения твин/камеры:
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);
Камера твининг поле зрения правильно, но, как представляется, оставаться указал в то же направление, на которое всегда указывалось, вместо переключения на вектор «camTarget», указанный в команде lookAt.
Ах, да, проблема заставить его взглянуть на правильное местоположение, так это то, что я положил его в обработчик события, а не в цикл анимации. Я смог использовать lookAt(), а не copy(). Хорошо поймал. Насколько он подтянут, я не уверен. Я думал, что, поместив его в одушевленную функцию, поскольку камера переместила его fov, функция lookAt также изменилась бы динамически, заставив ее выглядеть в некотором смысле, как будто это было tweening. Полагаю, мне, возможно, придется переместить камеру, а не менять fov для этого. Еще раз спасибо. – mheavers
Рад, что вы получили его на работу :) – MikaelEmtinger
@MikaelEmtinger - почему вы не должны слишком много делать в обработчике событий? – Neil