Three.js: FBX 骨骼正确旋转,而 GLTF 骨骼旋转异常

Three.js: FBX bones rotate correctly, while GLTF bones rotate bizarrely

我有一个使用 Three.js FBXLoader 处理 FBX 文件的动态模型,但出于方便我想使用 GLTF/GLB 文件,因为它包含同一文件中的纹理。我在 Blender 2.9 中加载了 FBX 文件并将其导出为 GLB 文件。 GLB 文件使用 GLTFLoader 正确呈现,但需要不同的旋转偏移以在设置时置于正确的方向。

FBXGLB 文件都包含一个具有相似骨骼数组的 SkinnedMesh。我注意到 matrixWorldNeedsUpdate 对于 GLB 模型骨骼是错误的,但默认情况下它对于 FBX 是正确的。可能还有其他差异,但我没有更多地探索层次结构的其他方面,比如矩阵字段。

无论如何,当从 GLB 文件动态旋转骨骼时,轴心点似乎在其他地方。我正在更新本地旋转参数,所以我不知道为什么它以这种方式操纵 Bone。它绕着正确的轴旋转,所以它似乎没有使用正确的局部旋转。

for (let i = 0; i < 20; i++)
{
    section1Bones[i].setRotationFromEuler(new THREE.Euler(0, 0, updatedSection1Vals[i], 'XYZ' ))
    section2Bones[i].setRotationFromEuler(new THREE.Euler(0, 0, updatedSection2Vals[i], 'XYZ' ))
    section3Bones[i].setRotationFromEuler(new THREE.Euler(0, 0, updatedSection3Vals[i], 'XYZ' ))
}

有时候真的是最简单的事情。因此,与 FBX 不同,GLB 包含单独的组件,例如 scene 组件,其中包含 3D 模型。因为我只有一个模型,所以我将整个 scene 对象添加到 Three.js 场景中,并与骨骼一起旋转。这导致了这个问题,所以我只包含了加载的 GLB 文件的场景组件 children 中包含的 3DObject 并且骨骼旋转是固定的。