Three.js:FBX 骨骼正确旋转,而 GLTF 骨骼奇怪地旋转
Posted
技术标签:
【中文标题】Three.js:FBX 骨骼正确旋转,而 GLTF 骨骼奇怪地旋转【英文标题】:Three.js: FBX bones rotate correctly, while GLTF bones rotate bizarrely 【发布时间】:2021-01-20 20:14:38 【问题描述】:我有一个使用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' ))
【问题讨论】:
也许尝试使用 Blender 2.90?自 2.80 以来已经有很多 glTF 修复。 我错了,我用的是 Blender 2.9 【参考方案1】:有时这真的是最简单的事情。因此,与FBX
不同的是,GLB
包含单独的组件,例如保存 3D 模型的 scene
组件。由于我只有一个模型,我将整个 scene
对象添加到 Three.js
场景中,并与骨骼一起旋转。这导致了这个问题,所以我只是在加载的GLB
文件的场景组件children
中包含了3DObject
,并且修复了骨骼旋转。
【讨论】:
以上是关于Three.js:FBX 骨骼正确旋转,而 GLTF 骨骼奇怪地旋转的主要内容,如果未能解决你的问题,请参考以下文章