将左手 Y-up(例如 Unity)坐标和旋转转换为右手 Z-up (3DS Max)

Convert left-handed Y-up (e.g. Unity) coordinates&rotations to right-handed Z-up (3DS Max)

我们开发了一个应用程序,该应用程序使用从 max 统一导出为 fbx 的模型(似乎可以工作),更改它们,然后将更改传回 3DSMax 以进行干净的渲染。

我们在 max 中旋转模型枢轴,使其在导出后在 Unity 中正确显示。 到目前为止我们得到了什么:

Position:
    x(max) = x(unity)
    y(max) = z(unity)
    z(max) = y(unity)
Rotation:
    x(max) = x(unity)
    y(max) = -y(unity)
    z(max) = z(unity)

简单的旋转似乎可行,复杂的则不行。我怀疑我们在从左手到右手或不同的旋转乘法顺序时没有正确考虑镜像。映射是如何正确完成的?

有一个相关问题没有答案: Unity rotation convertion

问题是 Unity (XYZ) 和 Max (ZYX) 的旋转顺序不同。这解释了单次旋转有效但复杂的旋转无效。如果你在上面的问题中进行转换,然后在 Unity 中以相同的顺序 连续 进行每个旋转,它就有效。