【问题标题】:How to restart Orbit Controls after target is set设置目标后如何重新启动 Orbit Controls
【发布时间】:2016-07-17 02:40:33
【问题描述】:

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

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

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

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

panCam(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();
    }

【问题讨论】:

  • 请输入代码?您应该始终在问题中包含所有相关代码。在the StackOverflow guidelines 中阅读更多相关信息。因此,您需要在代码中显示您是如何“设置目标”?
  • 已更新代码。我很抱歉。我只是在寻找有关重置工作原理的一般指南。

标签: javascript three.js user-controls


【解决方案1】:

你不能像这样更新目标:

controls.target = newTarget;

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

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);

【讨论】:

  • 知道了。我更新了功能,它似乎响应正确。它在点击时有点跳跃,但我想我可以解决这个问题。将使用工作代码进行更新。
  • 这不会破坏控件,但我认为我的补间存在问题,因为在相机移动之前轨道跳跃。查看更新的代码和链接。
  • 我应该问另一个问题还是继续更新这个问题?
  • @Migpics 这实际上会被视为另一个问题,但我在答案中添加了更新。尝试这样,如果它不起作用,我建议你问一个新问题......
  • 嗨@Wilt。我发现是什么破坏了控制。我已将控件目标 z 值设置为相机位置 z 值。请参阅上面有关更新问题的链接。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2023-03-21
  • 2012-09-09
相关资源
最近更新 更多