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
正确呈现,但需要不同的旋转偏移以在设置时置于正确的方向。
FBX
和 GLB
文件都包含一个具有相似骨骼数组的 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
并且骨骼旋转是固定的。
我有一个使用 Three.js
FBXLoader
处理 FBX
文件的动态模型,但出于方便我想使用 GLTF/GLB
文件,因为它包含同一文件中的纹理。我在 Blender 2.9 中加载了 FBX
文件并将其导出为 GLB
文件。 GLB
文件使用 GLTFLoader
正确呈现,但需要不同的旋转偏移以在设置时置于正确的方向。
FBX
和 GLB
文件都包含一个具有相似骨骼数组的 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
并且骨骼旋转是固定的。