【发布时间】:2018-10-27 05:20:16
【问题描述】:
我在使用 Assimp 加载和执行骨骼动画时遇到了一个非常奇怪的问题。我正在使用两个模型来测试我的代码,并且两个模型都使用 Assimp Viewer 正确加载,因此它们本身应该没有错误。但是,当我用我的代码加载这两个模型时,只有 1 个可以正常工作。
显然,这个不起作用。鸡脖子的动画效果符合预期,但腿变形了。
这个很完美。
我能想到的唯一区别是第一个模型是 fbx 文件,而第二个模型是 dae 文件,而第一个模型有多个网格,如果需要,我需要将它们转换回相同的根空间要正确加载的静态模型,而第二个模型只有一个网格,该网格已经位于根空间的原点。毫不奇怪,我必须转换回相同空间的网格是包含鸡腿的网格。
我实际上并没有使用 Assimp 的 mOffsetMatrix,而是计算我自己的 inverseBindTransform。我假设我计算正确,因为我的模型中的 1 个有效。下面是我的矩阵乘法的概述:
modelView * toWorldMatrix * desiredPoseMatrix * inverseBindTransform * meshToWorldMat * position
meshToWorldMat 是将网格空间带回世界空间的变换。 (toWorldMatrix * desiredPoseMatrix) 只是关键帧插值乘以其 parentMatrix 的结果。
我的方法有什么问题?
更新:我还发现扭曲 fbx 模型的一些网格共享相同的骨骼,但我不确定这是否重要。
【问题讨论】: