8
所以我正在尝试使用补间来补间相机的fov,这是基于场景中点击的物体,这很好,但现在我想要它做的是让相机切换其焦点到被点击的对象,这是不工作的。这里是我的点击代码: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);
相机正确补间的视野,但它似乎指向同一个保持它始终指向的方向,而不是切换到lookAt命令中指定的“camTarget”向量。
啊 - 是的,让它看看正确的位置的问题是,我把它放在事件处理程序,而不是动画循环。我能够使用lookAt()而不是copy()。很好的接收。至于如何修补,我不确定。我认为通过将它放入一个动画函数中,当相机移动它的fov时,lookAt函数也会动态变化,从某种意义上说,它看起来就像是补间一样。我想我可能不得不移动相机,而不是改变它的工作。不过谢谢。 – mheavers
很高兴你得到它的工作:) – MikaelEmtinger
@MikaelEmtinger - 为什么你不应该在事件处理程序中做太多? – Neil