首页 > 解决方案 > Three.js:FBX 骨骼正确旋转,而 GLTF 骨骼奇怪地旋转

问题描述

我有一个FBX使用. 我在 Blender 2.9 中加载了文件并将其导出为文件。该文件使用 正确渲染,但需要不同的旋转偏移才能在设置时放置正确的方向。Three.js FBXLoaderGLTF/GLBFBXGLBGLBGLTFLoader

FBX和file都GLB包含SkinnedMesh具有相似骨骼数组的 a。我注意到模型骨骼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' ))
}

标签: javascriptnode.jsthree.jsgltffbx

解决方案


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


推荐阅读