ThreeJS翻转反转X轴(左手坐标系)

ThreeJS flip reversed X axis (left handed coordinate system)

我正在尝试创建这个由较小的 3D 对象合并的 3D 瓷砖系统世界 - 为了创建这些,我们使用了另一个在 Unity 中制作的应用程序,它单独加载所有小型 3D 资产,并可用于创建您的新模型。保存这些模型文件后,将创建一个 JSON 文件,其中包含所有使用的 3D 模型的所有比例、位置、旋转等。

我们决定使用 'North, East, South, West' 的这个系统来确保在生产中一切看起来都很好。但是,现在当我们尝试在 ThreeJS 中渲染这些相同的 JSON 文件时,我们注意到 X 轴与我们正在使用的 Unity 应用程序相比是相反的。

我们想要的是:

目前这就是 ThreeJS 中的错误

我们已经尝试过的是:

但是以上都没有达到预期的效果。当涉及到小于或大于 1x1x1 大小的缩放、旋转对象时,使用代码反转坐标会带来其他问题。理想情况下,我们不必更改我们的坐标,并且仍然可以通过将 X 轴的方向从 0,0,0

的左侧更改为右侧来用作实体参考

目前ThreeJS使用的是'right handed coordinate system',我们想要的是左手坐标系。这是可以在 ThreeJS 中配置的东西吗?

有人知道除了翻转所有 X 坐标之外我还能尝试什么吗?

这不是您可以在 three.js 或 Unity 中配置的东西。不同的文件格式通常有一个内置的概念坐标系。例如,GLTF 表示为 right-handed coordinate system。处理转换是格式导入器和导出器的责任——这是内置 three.js 导入器所做的。

我建议使用 GLTF 等现有格式来表示您的场景(现有 Unity exporter 可用,three.js 可用导入器)。

或者,如果您想保留对自己文件格式的控制权,您可以在从 Unity 导入 导入 three.js。查看您的图像,您似乎希望将所有 X 值乘以 -1.0 以使它们看起来相同。您还需要将旋转保存为四元数,以避免旋转顺序差异。

当然,您始终可以在 X 上将整个场景缩放 -1.0,但这可能会使 three.js 的其他部分难以处理。

我会考虑将 (-1, 1, 1) 比例应用于“Unity 导出场景”的根,这样您仍然可以保持场景的其他部分不变。

obj3d.scale.set(-1, 1, 1);