我正在制作一个简单的骨骼动画库,但我陷入了困境。
我拥有的: 带有动画的少量骨骼的网格。网格皮肤适当。它是3d studio max file。
我的所作所为:
我用我的插件导出这个蒙皮网格。我采用第一个动画帧并乘以每个顶点,通过这个矩阵(伪代码)
Matrix invertedBoneMatrix = ZeroMatrix;
invertedBoneMatrix += bone1WorldTransform * weight1;
invertedBoneMatrix += bone2WorldTransform * weight2;
invertedBoneMatrix += bone3WorldTransform * weight3;
invertedBoneMatrix += bone4WorldTransform * weight4;
invertedBoneMatrix.Invert();
foreach (vertex)
vertex = invertedBoneMatrix * vertex;
当我在我的引擎中加载此模型时,我会计算每个动画帧中每个骨骼的世界变换,并将每个顶点乘以相应的骨骼世界变换以及适当的权重。
问题: 只有第一帧看起来很好,其他帧都会失真。
也许我的代码中某处有错误,但我想知道,如果我的方法是正确的 - 将所有顶点都带到相应骨骼的局部空间。