Threejs在使用变换控制时禁用轨道相机

Posted

技术标签:

【中文标题】Threejs在使用变换控制时禁用轨道相机【英文标题】:threejs disable orbit camera while using transform control 【发布时间】:2013-12-02 05:46:01 【问题描述】:

我有一个包含多个网格的场景,每个网格都关联到不同的 transformControl;为了选择不同的对象,我使用了光线投射技术。我还使用轨道摄像机来导航场景。

每当我使用变换控件修改所选对象的位置/旋转/比例时,我都想禁用轨道摄像机,因为有时当我点击选择器时,我也在选择场景的背景,所以轨道相机会移动。

我想停止这种行为,并且我已经尝试使用光线投射技术来处理它,但它不起作用。

【问题讨论】:

controls.enable = false;禁用 OrbitControls。例如,如果您的 raycaster 不返回任何对象并再次在 mouseUp 上启用它,您是否禁用它? 没错。我已经尝试过按照您的建议进行操作,但是我不起作用。当鼠标悬停在变换控制选择器上时,光线投射器似乎不起作用,即使我可以使用这些选择器。我真的不明白.. 也许检查一下threejs编辑器代码,因为它是在那里实现的。 ^^ controls.enabled = false 应该是controls.enableRotate = false; 【参考方案1】:

偶然发现了这一点,并认为看到答案会有所帮助(感谢 BuildingJarl):

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

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

就我而言,我使用的是 UI 叠加层,但在获得焦点时遇到了问题。禁用控件解决了我的问题。

问候垫

【讨论】:

这个答案在问题的 cmets 中。 正如我已经说过的:感谢 BuildingJarl... 但这样您就可以直接看到答案。刚刚发现它很有帮助。问候 要在旁边添加一些信息,如果您还需要禁用光标键,请使用controls.noPan = false;。 github.com/mrdoob/three.js/blob/master/examples/js/controls/…【参考方案2】:

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

【讨论】:

以上是关于Threejs在使用变换控制时禁用轨道相机的主要内容,如果未能解决你的问题,请参考以下文章

threejs15自定义相机控制器

threejs学习day2:照相机

ThreeJS之动画交互逻辑及特效

使用vue学习three.js之移动相机-使用轨道控件OrbitControls控制相机

相机自动旋转threejs

THREEJS案例-坐标系之点线面