这可能是一个非常基本的问题,但是我还没有找到解决方案,这一直困扰着我。我想像在Maya中一样在相机的右下角显示指示世界坐标方向(x,y,z)的箭头,以便在围绕对象旋转相机或在场景中移动时,您仍然可以确定世界坐标的方向。我尝试使用两种不同的方法来完成此操作,但到目前为止都没有奏效。

我有一个带有三个箭头的对象,作为使用THREE.ArrowHelper类的子代,我们暂时将其称为XYZ。第一种方法是使XYZ为场景的子级,并为其提供一个位置,该位置是根据相机的当前位置加上相机指向和调整的方向上的偏移量计算得出的,因此它出现在我想要的角落而不是在屏幕中央。我几乎已经做好了这项工作,因为箭头保持了正确的旋转,但是位置有点可笑,我停止沿着这条路线走,因为在移动相机时确实很“抖动”。我不确定这是性能问题还是其他问题。

第二种方法是使XYZ具有局部位置偏移量的摄影机子级,然后反转摄影机的旋转,并将反转后的旋转应用于XYZ,使其与世界坐标匹配。我似乎很接近使用这种方法,但是我可以使位置正确,也可以使旋转正确,而不能同时获得两者。

我目前正在使用代码XYZ.matrix.extractRotation( camera.matrixWorldInverse );为我提供XYZ的正确方向,但是它的位置已关闭。如果我使用XYZ.matrixWorld.extractRotation( camera.matrixWorldInverse );,则位置仍然很好(连接到相机),但方向不会改变。

如果有人急于解决这个问题,将不胜感激。如果您有比我追求的更好的方法,那也将有所帮助。

最佳答案

这是在here之前提出的。

诀窍是使用第二台摄像机添加第二个场景,该场景与原始摄像机的方向相同,但与原点保持指定距离。

camera2.position.copy( camera.position );
camera2.position.sub( controls.target );
camera2.position.setLength( CAM_DISTANCE );
camera2.lookAt( scene2.position );


编辑:更新小提琴:http://jsfiddle.net/aqnL1mx9/

three.js r.69

关于three.js - Three.js:在场景的一角显示世界坐标轴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16226693/

10-12 12:20
查看更多