如何在three.js中设置Z坐标系?

How can I set Z up coordinate system in three.js?

在three.js中,Y轴代表上下,Z轴代表前进和后退。但我希望 Z 轴表示上下,Y 轴表示向前和向后。这是一张显示我想要的图像:

我想改变整个坐标系,如果我围绕 y 轴旋转网格,它会遵循新坐标系而不是传统坐标系。

现在,我搜索了堆栈溢出并找到了这个 link:

  1. Three.JS rotate projection so that the y axis becomes the z-axis。 没用。
  2. THREEJS: Matrix from Z-Up Coordinate System to Y-Up Coordinate System。此方法仅更改对象或网格的 y 和 z 顶点,但如果我围绕 y 轴旋转它,它会围绕传统的 y 轴旋转。我还必须将矩阵应用于旋转矩阵,使其像新坐标系一样旋转。
  3. Changing a matrix from right-handed to left-handed coordinate system
  4. 。这也行不通。

有什么方法可以让 three.js 像 Z 向上坐标系一样工作吗?

您可以使用

设置相机的向上矢量
camera.up.set(0,0,1);

然后,它就会像您期望的那样工作。

上面的答案适用于简单的情况,但是如果你想使用编辑器,你最好在做任何事情之前进行设置

THREE.Object3D.DefaultUp = new THREE.Vector3(0,0,1);

因此任何新对象也将使用此约定。 使用之前的答案,我在编辑器中苦苦思索围绕控件、保存对象等的所有含义...

请注意,如果您使用网格,您仍然需要旋转它以使其覆盖 XY 平面而不是 XZ

var grid = new THREE.GridHelper( 30, 30, 0x444444, 0x888888 );
grid.rotateX(Math.PI / 2);