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

Posted

技术标签:

【中文标题】如何在three.js中设置Z坐标系?【英文标题】:How can I set Z up coordinate system in three.js? 【发布时间】:2017-11-21 15:39:19 【问题描述】:

三个.js中Y轴代表上下,Z轴代表前后。但我希望 Z 轴代表上下,Y 轴代表前后。这是一张显示我想要的图片:

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

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

    Three.JS rotate projection so that the y axis becomes the z-axis 。 它不起作用。 THREEJS: Matrix from Z-Up Coordinate System to Y-Up Coordinate System。此方法只是更改对象或网格的 y 和 z 顶点,但如果我围绕 y 轴旋转它,它会围绕传统的 y 轴旋转。我还必须将矩阵应用于旋转矩阵,使其像新坐标系一样旋转。 Changing a matrix from right-handed to left-handed coordinate system Reorienting axes in three.js fails when webpage is refreshed。这也不起作用。

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

【问题讨论】:

抛开three.js使用右手系统这一事实,您可以尝试在负z方向缩放场景,并翻转面部的渲染顺序。 你应该接受答案。 【参考方案1】:

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

camera.up.set(0,0,1);

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

【讨论】:

最好完全改变坐标系,如***.com/a/58554774/5202815中所说【参考方案2】:

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

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

【讨论】:

以上是关于如何在three.js中设置Z坐标系?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Projection 在 Three.js 中将世界坐标转换为屏幕坐标

使用three.js开发3d地图初探

Three.JS旋转投影,使y轴成为z轴

在 THREE.js 中获取鼠标相对于 3D 空间的坐标

three.js的坐标轴

THREE.js如何实现在x,y,z轴上的拖拽