微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个使用FBX Three.js处理FBXLoader文件的动态模型,但是出于方便,我想使用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,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 举报,一经查实,本站将立刻删除。