骨骼系统变换相关~

来源:互联网 发布:淘宝退款率高的买家 编辑:程序博客网 时间:2024/04/30 06:33

      花了5天时间改一个动画问题,最后还是在老大帮助下搞定,很郁闷~ 又不是自己独立完成的,我啥时候才能自己完成一件事情。。。

      对动画这一块做个总结:

      G引擎动画: 1.首先播放一个动作play,启动填充动画信息。2.在每一帧中更新模型的动画信息矩阵应用到模型每一块mesh。3.动画的矩阵信息在多线程中进行计算。然后再执行第二步。

      动画的变换矩阵是在模型空间变换的。然后乘以模型到世界矩阵。。。最后就显示出来啦~~

 

 

      问题出在变换矩阵的差值与融合~

      1.首先明确一点这一块是由美术调关键帧记录下来的,程序里面只是对两帧之间差值啦融合啦等等,基本上不会再外部改变这些变换矩阵的数值~ 。

      2.由于动画帧两帧之间差值,那么一个动作的最后一帧会与下一个动作的第一帧进行插值融合~ 我们的G引擎就遇到了这种情况。

      表现出来的情况就是:播放一个圆盘转了60度的动画,播放完毕后在播旋转60度的动画,圆盘会先回转60度,然后再在播放转60度的动画。

      现象解释:一个圆盘转到60度后,此时的位置是 世界矩阵 * 动作变换的最后一帧矩阵,此时在播放一个60度旋转动画,该动画的第一帧变换矩阵与上一个动画最后的矩阵差值了,世界矩阵没有变化,结果又变回去了,然后再转60度。

      一般情况问题是不大的一个走路的动画接一个跑的动画两帧之间非常快没有什么问题,并且这些走跑跳之类的动画,美术都是在原地做的,矩阵变换的变化不是很大。。~ 

      明天继续。。。。。

     

      由于动画的差值是在模型空间的。所以如果想实现一些特殊的动画衔接之类的东东就要对动画的矩阵做一些手脚,例如禁用掉两个动作之间的融合,导致动画之间突变,或者对上一个动画的最后一帧重置,以达到与下一个动作之间无差值之类的。

     

     

原创粉丝点击