【问题标题】:Pausing/turn off three.js TrackballControls暂停/关闭three.js TrackballControls
【发布时间】:2014-06-19 04:19:02
【问题描述】:

我正在使用TrackballControls 使用鼠标旋转场景中的相机,但还需要能够使用鼠标旋转场景中的单个对象。我希望能够打开/关闭TrackballControls 来完成此操作。但是,到目前为止,我尝试过的所有事情都存在问题。这就是我的控件的定义方式:

var controls; // global

init()内:

controls = new THREE.TrackballControls( camera );
controls.addEventListener( 'change', render );

最后在animate():

controls.update();

到目前为止,我已经尝试过:

  1. 移除事件监听器如下:controls.removeEventListener( 'change', render ); 没有改变任何东西; controls 一如既往地工作。

  2. 有条件地更新控件,如下所示:

(全局)

var enableControls = true; 

(在animate

if (enableControls == true) {
    controls.update();
}

然后使用KeyDown 事件切换enableControls。这似乎可行,因为当enableControls 为假时,我可以在不移动相机的情况下旋转对象。但是,当我再次update 时,相机会显着移动(它会移动到它本来应该基于我在没有更新时完成的点击/拖动的位置)。

我分别尝试了这两种方法,但没有成功。

【问题讨论】:

  • 试试controls.enabled = false; 另外,你可能不需要controls.addEventListener( 'change', render );
  • 效果很好,我觉得自己像个白痴。绝对将其发布为答案。

标签: javascript three.js


【解决方案1】:

要禁用TrackballControls,您需要做的就是设置

controls.enabled = false;

此外,您可能不需要controls.addEventListener( 'change', render );,因为您在动画循环中调用了controls.update()

three.js r.67

【讨论】:

  • 另外:我遇到的问题是,在重新激活控件后,如果控件保持启用,场景会“跳过”(旋转)到它应该处于的方向。通过在禁用之前调用controls.saveState() 和在重新启用控件之前调用controls.reset() 解决了这个问题。 [使用 r.91]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2023-03-12
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多