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

问题描述 投票:1回答:1

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

我们决定使用这个 "北、东、南、西 "的系统,以确保在生产中一切都会看起来很好。然而现在当我们试图在ThreeJS中渲染这些相同的JSON文件时,我们注意到与我们使用的Unity应用程序相比,X轴是反向的。

我们想要的是这样的。

  • 北方的Z值越来越大(南北都可以)。
  • 东方的X值在增加
  • 西部地区的X值在下降

目前的情况是这样的 错的 在ThreeJS。

  • 东方是 递减 X值
  • 西部是 增加 X值

我们已经尝试过的是这样的。

  • 镜面翻转相机视角
  • 当一个坐标降到0以下时,我们就把它变成绝对坐标(-10就是10)。
  • 当一个坐标高于0时,我们让它变成负数(10就是-10)。

但是以上的方法都没有达到预期的效果。当涉及到小于或大于1x1x1尺寸的缩放、旋转对象时,用代码反转坐标会带来其他问题。理想的情况是,我们不必改变坐标,而且仍然可以通过改变X轴的方向,从左侧到右侧的0,0,0来作为实体参考。

目前ThreeJS使用的是 "右手坐标系",而我们希望的是左手坐标系。这是否可以在ThreeJS中进行配置?

除了翻转所有的X坐标,有谁知道我可以尝试什么?

enter image description here

three.js 3d reverse axis mirror
1个回答
1
投票

这不是你可以在three.js或Unity中配置的东西。不同的文件格式通常有一个内置的名义坐标系统。例如,GLTF,是用一个 右手坐标系. 格式导入器和导出器有责任处理转换--这就是内置的three.js导入器的工作。

我建议使用现有的格式,比如GLTF来表示你的场景(有一个现有的 Unity出口商 和一个导入器可用于three.js)。)

或者如果你想保留对自己文件格式的控制,你可以在从Unity导出时自己进行左手到右手坐标系的转换。 导入到three.js中。从你的图片来看,似乎你要将所有的X值都用 -1.0 以使它们看起来一样。你会希望将旋转保存为四元数,以避免旋转顺序的差异。

当然,您也可以通过以下方式来调整整个场景的比例 -1.0 但这可能会使其难以与three.js的其他部分配合使用。

© www.soinside.com 2019 - 2024. All rights reserved.