我有一个使用FBX
Three.js
处理FBXLoader
文件的动态模型,但是出于方便,我想使用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' ))
}
答案 0 :(得分:1)
有时候这确实是最简单的事情。因此,与FBX
不同的是,GLB
包含单独的组件,例如保存3D模型的scene
组件。因为只有一个模型,所以我将整个scene
对象添加到Three.js
场景中,并将其与骨骼一起旋转。这引起了问题,所以我只包含了已加载的3DObject
文件的场景组件children
中包含的GLB
,并且骨骼旋转是固定的。