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

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

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

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

  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. Reorienting axes in three.js fails when webpage is refreshed。这也不起作用。

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

【问题讨论】:

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

标签: javascript graphics 3d three.js webvr


【解决方案1】:

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

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

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

【讨论】:

【解决方案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); 

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2014-02-07
    • 2014-12-02
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多