如何在设置目标后重新启动Orbit Controls

时间:2016-07-16 06:45:14

标签: javascript three.js user-controls

我在鼠标点击事件中为THREE.OrbitControls设置了一个新目标,效果很好。但是在相机平移到新位置后,我失去了与鼠标的所有交互。 我正在用工作代码更新这个问题。

我认为当我将相机z和目标z设置为相同值时,我打破了控件。

破碎的代码在这里: http://www.kreativperspektiv.com/pb2/chartlock.html

工作代码在这里: http://www.kreativperspektiv.com/pb2/chartcorrect.html

姆(500,200,4000,1000);

        var xTarget=0;
        var yTarget=0;
        var zTarget=0;
        var tweenDuration=0;

        function panCam(xTarget,yTarget,zTarget,tweenDuration){

          TWEEN.removeAll();

          var camNewPosition= { x : xTarget, y : yTarget, z : zTarget};
          var targetNewPos = {x : xTarget, y : yTarget, z : 0};

          var camTween = new TWEEN.Tween(camera.position).to(camNewPosition, tweenDuration).easing(TWEEN.Easing.Quadratic.InOut).start();
          var targetTween = new TWEEN.Tween(controls.target).to(targetNewPos, tweenDuration).easing(TWEEN.Easing.Quadratic.InOut).start();
    }

1 个答案:

答案 0 :(得分:3)

您无法像这样更新目标:

  

controls.target = newTarget;

这会打破你的控制 而是必须使用setter方法或复制方法设置目标:

controls.target.copy( newTarget );
controls.target.set( x, y, z ) // where x, y and z are the new values

UDPATE

如果您想使用TWEEN,请尝试这样:

new TWEEN.Tween(camera.position).to(newPosition, tweenDuration);
new TWEEN.Tween(controls.target).to(newTarget, tweenDuration);