动画分析

来源:互联网 发布:空气曲棍球 淘宝 编辑:程序博客网 时间:2024/06/07 03:43
1. SceneNode Animation是根据mInitPosition等进行的,而不是根据当前的位置移动;
2. 如果想设置为根据当前的位置进行移动,则需要在动画开始前设置setInitialState,将当前状态作为动画的起始状态;
3. 动画结束后,不会恢复到原来的位置,而是动画结束时候的位置(说明动画的最后变换是写到了Node中的mPosition, mOrientation, mScale中了);
4.结论:ogre如何实现了节点动画?
    4.1 从Animation中得到两个帧,插值两个变换得到中间状态;
    4.2 将插值得到的变换加上mInitPosition得到最后的变换;
   4.3 动画中的关键帧保存的是相对动画起始位置的变换,而不是相对上一个关键帧的变换;
   4.4 动画的最终结果是保存在mPosition等中的,后面如果对该节点进行变换操作,是相对于动画结束的位置进行的。
   4.5 动画的执行实在SceneManager中的_applySceneAnimations函数中进行的,每次调用_renderScene时都会调用该函数,前者先调用resetToInitialState使Node回到m_InitPosition的状态,然后调用Animation的apply函数得到插值的变换,在作用到Node上去。
原创粉丝点击