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

Md.*_*man 12 javascript 3d graphics three.js webvr

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

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

现在,我搜索了堆栈溢出,发现此链接:

  1. Three.JS旋转投影,使y轴成为z轴.它不起作用.
  2. 三种:从Z-Up坐标系到Y-Up坐标系的矩阵.此方法只是更改对象或网格y和z顶点,但如果我围绕y轴旋转它,它将围绕传统的y轴旋转.我必须将矩阵应用于旋转矩阵,以使其像新坐标系一样旋转.
  3. 将矩阵从右手坐标系更改为左手坐标系
  4. 刷新网页时,三个.js中的重定向轴失败.这也行不通.

有没有什么方法可以让tri.js像Z up坐标系一样工作?

Mar*_*ole 11

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

THREE.Object3D.DefaultUp = new THREE.Vector3(0,0,1);
Run Code Online (Sandbox Code Playgroud)

所以任何新对象也将使用这个约定。使用之前的答案,我在编辑器中对控件的所有影响、保存对象等进行了努力...

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

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

  • 即使使用额外的代码,有些东西,例如 [`BoxGeometry`](https://thirdjs.org/docs/#api/en/geometries/BoxGeometry),看起来像是硬编码的“向上”(例如“height”) ) 作为 y 轴。 (2认同)

小智 10

您可以使用设置摄像机的向上矢量

camera.up.set(0,0,1);
Run Code Online (Sandbox Code Playgroud)

然后,它会像你期望的那样工作.