three.js-如何使相机在补间期间看着对象

问题描述 投票:8回答:2

因此,我正在尝试使用补间基于场景中单击的对象来补间相机的视野,效果很好,但是现在我要做的是让相机将焦点切换到单击的对象,无法正常工作。这是我的点击代码:

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”矢量。

javascript canvas 3d webgl three.js
2个回答
13
投票

渲染器调用THREE.Camera.update(),它默认设置摄像机的旋转以查看THREE.Camera.target(它是THREE.Object3D)。而不是做...

camera.lookAt( camTarget );

...尝试...

camera.target.position.copy( camTarget );

我不确定是否遵循补间camTarget的方式,或者只是应该切换到新对象?

旁注:建议不要在事件处理程序中执行大量计算-在最好的情况下,请在事件处理程序中设置一个标志,并在渲染循环中进行处理。


0
投票

不幸的是,从2020年2月的three.js版本112开始,camera.target不再起作用。 jb

© www.soinside.com 2019 - 2024. All rights reserved.