通过具有平滑蒙皮的关节变换顶点

时间:2012-08-19 00:52:25

标签: c++ animation matrix directx skinning

我尝试使用平滑蒙皮在我的游戏中为网格设置动画时出现问题。我正在导出一个网格,它的关节,以及来自Maya的所有动画数据,并且它在游戏中正确导入。我也把我的关节显示在游戏中作为球体,只是为了确保它们正确动画,它们是。我在将顶点转换为骨骼空间时遇到了麻烦,我对此无能为力。这是我目前正在做的基本工作。

  • 预先计算每个骨骼在其绑定姿势中的倒数。骨头 层次结构也在这里设置,我只设置它们的局部矩阵 因为他们的世界矩阵是根据要求计算的。

  • 在关键帧之间插补矩阵,这似乎有效 因为球体正确动画。

  • 将绑定姿势中的网格顶点复制到单独的缓冲区中 待修改

  • 转换每个顶点:

    对于每个顶点

     For each influencing bone in vertex
    
               Vertex tempvert;
               tempvert  = vertex.position * local bone inverse matrix;
               tempvert  = tempvert * world interpolated bone transform;
               tempvert *= influence weight;
               vertex   += tempvert;
    
  • 使用转换后的顶点

  • 更新GPU

我也试过切换骨骼的局部和世界变换,但无济于事。我很确定我做的事情很愚蠢,我只是想确保在我撕开数学库之前的情况。

感谢您的帮助。

0 个答案:

没有答案