如何解决Three.js:FBX骨骼正确旋转,而GLTF骨骼异常旋转
我有一个使用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,updatedSection1Vals[i],'XYZ' ))
section2Bones[i].setRotationFromEuler(new THREE.Euler(0,updatedSection2Vals[i],'XYZ' ))
section3Bones[i].setRotationFromEuler(new THREE.Euler(0,updatedSection3Vals[i],'XYZ' ))
}
解决方法
有时候这确实是最简单的事情。因此,与FBX
不同的是,GLB
包含单独的组件,例如保存3D模型的scene
组件。因为只有一个模型,所以我将整个scene
对象添加到Three.js
场景中,并将其与骨骼一起旋转。这引起了问题,所以我只包含了已加载的3DObject
文件的场景组件children
中包含的GLB
,并且骨骼旋转是固定的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。