因此,我正在尝试使用补间基于场景中单击的对象来补间相机的视野,效果很好,但是现在我要做的是让相机将焦点切换到单击的对象,无法正常工作。这是我的点击代码:
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”矢量。
渲染器调用THREE.Camera.update(),它默认设置摄像机的旋转以查看THREE.Camera.target(它是THREE.Object3D)。而不是做...
camera.lookAt( camTarget );
...尝试...
camera.target.position.copy( camTarget );
我不确定是否遵循补间camTarget的方式,或者只是应该切换到新对象?
旁注:建议不要在事件处理程序中执行大量计算-在最好的情况下,请在事件处理程序中设置一个标志,并在渲染循环中进行处理。
不幸的是,从2020年2月的three.js版本112开始,camera.target不再起作用。 jb