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

var controls; // global


init()内部:

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


最后在animate()中:

controls.update();


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


像这样删除事件侦听器:controls.removeEventListener( 'change', render );并没有任何改变; controls的工作与往常一样。
像这样有条件地更新控件:


(全球)

var enableControls = true;


(在animate中)

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


然后使用enableControls事件切换KeyDown。这似乎可行,因为当enableControls为false时,我可以旋转对象而无需移动相机。但是,当我再次update时,摄像头会明显移动(根据我未进行更新时的单击/拖动操作,摄像头会移动到应有的位置)。

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

最佳答案

要禁用TrackballControls,只需设置

controls.enabled = false;


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

three.js r.67

09-25 20:05