动画框架

Ogre默认支持四种脚本动画:1.骨骼动画 2.场景节点动画 3.顶点动画 4.数值动画

 

1.骨骼动画 :

骨骼动画的基础:在ogre中骨骼动画主要涉及两个类,mesh和skeleton,skeleton由许多Bone组成,这些bone之间有层级关系,skeleton就是一个骨架关系,某个mesh可以被绑定在这个skeleton上,绑定的实质就是某个vertex受某些bone的影响,也就是某个bone运动,就会导致和他有关系的那些vertex运动。所以对照本页最上面的图,他最末端控制的店就是skeleton中的每个bone,一个skeleton中可以蕴含多套animation。

一般情况下骨骼动画都是在maya或3Dmax之类的工具里面制作好的,然后通过导出方式,导出到一个mesh文件和一个skeleton文件。ogre在加载模型的时候已经把这些动画加载好,需要直接使用就行了。

AnimationState* as=entity->getAnimationState("动画名字");

动态创作骨骼动画:在另外一些情况下,我们只是在skeleton文件中设置网格顶点与骨骼的绑定关系,而不描述骨骼的运动轨迹。运动轨迹会动态的根据实际情况生成,这对于物理碰撞检测后的动画效果是很常见的。

//1.把skeleton和mesh文件内容加载到entity,此时绑定了骨骼与顶点但是没有实现动画效果...

//获取entity中的相应骨骼
SkeletonInstance* ske=entiy->getSkeleton();
//为骨骼添加一个动画
Animation* anim=ske->createAnimation("My",1);
//为每一块骨头创建track(动作集)
Bone* b0=ske->getRootBone(); 
NodeAnimationTrack* t0=anim->createNodeTrack(0,b0);//例如这是为root bone创建
//为每个bone的track创建关键帧...

//更新这个新加入的动画
entity->refreshAvailableAnimationState();

2.场景节点动画:

是指让场景中的某些结点运动,如创建camera的动画等。

// 创建Animation
Animation* anim=smgr->createAnimation(); 
// 设置插值方式:线性的和样条线(样条线的更加平滑)
anim->setInterpolationMode(Animation::IM_SPLINE);
//为需要动画的节点创建一个Track,节点动画是以节点为单位
NodeAnimationTrack* t0=anim->createNodeTrack(0,node);
//对于每个track创建它的每个关键帧
TransformKeyFrame* k_t0_0=t0->createNodeKeyFrame(0);//设置该帧的时间点 
k_t0_0->setTranslate(Ogre::Vector3(0,0,0));//设置该帧处这个结点的位置和其他几何状态 
TransformKeyFrame* k_t0_1=t0->createNodeKeyFrame(1); 
k_t0_1->setTranslate(Ogre::Vector3(100,0,0));

//创建一个AnimationState用于控制动画
AnimationState* as=smgr->createAnimationState(该动画名字);
as->setEnabled(true); //必须设置为true才能被播放

as->setTimePosition();//在帧监听中通过调用这个函数来播放动画

3.顶点动画:

顶点动画大多情况下利用gpu shader来实现以提高效率,所以较少直接使用ogre的动画机制。

4.数值动画:我的理解是跟传统的一副一副图片组成的动画类似,这种方式效率低下,游戏肯定是不会用到的。

你可能感兴趣的:(框架)