使用变换控件时禁用three.js轨道相机

12

我有一个场景,其中包含多个网格,每个网格都与不同的transformControl相关联;为了选择不同的对象,我使用射线投射技术。同时,我还使用轨道相机来浏览场景。

每当我使用变换控制器来修改所选对象的位置/旋转/缩放时,我希望禁用轨道相机,因为有时在点击选取器时,我也会选中场景背景,导致轨道相机移动。

我想停止这种行为,已经尝试使用射线投射技术处理,但没有成功。


controls.enable = false; 用于禁用OrbitControls。例如,如果您的射线投射器没有返回任何对象,则可以禁用它,并在鼠标抬起时重新启用它。 - GuyGood
没错。我已经尝试了你建议的方法,但是它不起作用。似乎当鼠标悬停在变换控制器选择器上时,光线投射器不起作用,即使我可以使用这些选择器。我真的不明白... - rastafermo
也许可以检查一下threejs编辑器代码,因为它已经在那里实现了。 ^^ - GuyGood
控件.enabled = false - joey
2
controls.enableRotate = false; - aswzen
2个回答

28

偶然发现这个并认为看到答案会很有帮助(感谢 BuildingJarl):

// if youre definition is like
var controls = new THREE.OrbitControls( camera );

// you can easily disable it by using
controls.enabled = false;

在我的情况下,我正在使用一个UI覆盖层,但无法将焦点放在其上。禁用控件解决了我的问题。

问候 Mat


此答案在问题的评论中。 - gaitat
正如我之前所说:感谢BuildingJarl...但这样你可以直接看到答案。我发现它很有帮助。问候 - schlenger
4
如果您想同时禁用游标键,可以使用controls.noPan = false;。链接是https://github.com/mrdoob/three.js/blob/master/examples/js/controls/OrbitControls.js。 - Avatar

4

摘自three.js编辑器代码:

var orbitControls= new THREE.EditorControls(camera, renderer.domElement);
orbitControls.addEventListener('change', render);

var transformControls = new THREE.TransformControls(camera, renderer.domElement);    
transformControls.addEventListener('change', render);
transformControls.attach(mesh);
transformControls.addEventListener('mouseDown', function () {
    orbitControls.enabled = false;
});
transformControls.addEventListener('mouseUp', function () {
    orbitControls.enabled = true;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接