网格导出 (MaxScript) 中的 Pivot and/or 坐标系错误?

Pivot and/or coordinate system bug in mesh-exporting (MaxScript)?

我在将位置导出到文本文件时遇到问题,我猜这与枢轴和坐标系有关。

为了说明这一点,我在 3ds max 中制作了两个看起来相同但又不同的场景:

为了简化,您可以只考虑 X 轴。首先,球体的轴心已更改(从默认位置 移动 [-50,0,0])并且球体位置已设置为 [0,0,0]。其次,球体枢轴位于默认位置(球体中心),球体位置为 [50,0,0])。 其余球体只是参考点。

用我的脚本导出后,两个球体的顶点位置完全相同。 但我想第一个应该将所有顶点的位置转换为 [-50,0,0] 偏移量,因为枢轴已更改(它是对象的中心 space,不是吗?).

两个场景应该和第二个场景一样:

球体的位置本身就可以了([0,0,0] 两者)并且顶点的相对位置(彼此)也很好(它们仍然形成一个球体)。但是由于我在上一段中提到的问题(顶点位置没有差异),第一个场景渲染不正确 - 球体 "visible" 在 [0,0,0] [50,0,0] 个。因此枢轴变化影响对象位置但不影响顶点位置(它们与枢轴无关?)。

我的代码:

--create vertices array (with duplicates, 3 vertices for each face)
for f = 1 to (meshOp.getNumFaces eMesh) do (

    face = getFace eMesh f

    for i = 1 to 3 do ( --for each of 3 vertices in face (triangle)
        vertexPos = (getvert eMesh face[i]) * (inverse eMesh.objecttransform)  --vertex position in object space (including rotation)

所以,基本上你想要某种节点 space 位置,而不是世界位置,而是相对于节点枢轴的位置,对吧?

如果您重置 xform/rebuild 网格,节点枢轴变换只会与对象变换重叠,否则它相对于对象本身的 position/rotation/scale 仅存储为 objectOffsetPos , objectOffsetRotobjectOffsetScale。你必须在这里理解节点和对象之间的区别,可以有一个对象和多个引用同一对象(实例)的节点,具有不同的转换和不同的属性,包括 pivot pos/rot/scale。当您使用反向 eMesh.objectTransform 时,它将始终 return 具有不同枢轴位置的相同值,您必须改用 eMesh.transform