Ogre的骨骼动画
Ogre骨骼信息和动画信息保存到后缀名为.skeleton的文件中,你可以通过OGRE提供的导出插件工具(Milkshape和3Dmax的exporter)来导出该类型的文件。当你创建基于.Mesh文件的Entity时,.Skeleton文件将会自动被系统加载进来。为了操作方便,Entity自动给每一个动作指定一个AnimationState类(请参考基本动画)的对象,你可以通过Entity::getAnimationState函数来得到具体的动作。
该实例创建基于robot.mesh文件的实体(Entity)对象,指定其“走”动作(动作信息都在.skeleton文件里),并将其显示到屏幕上。robot.mesh文件中保存机器人的网格信息,Entity会自动加载保存有机器人骨骼信息的robot.skeleton文件。
就像上一章的一样,我们把要学习的代码放入一个过程里面,代码如下:我们同样把过程CreateSkeletonAnimation放到了createScene里面执行。
...{
// 设置关键帧之间的插值方法为样条插值
Animation::setDefaultInterpolationMode(Animation::IM_SPLINE);
// 创建基于网格文件robot.mesh的Entity
Entity *ent = mSceneMgr->createEntity("robot", "robot.mesh");
// 将实体附属到场景根结点上
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
// 得到实体“走”动作的AnimationState类对象
mAnimState = ent->getAnimationState("Walk");
// “Enable”(起始)该动作
mAnimState->setEnabled(true);
}
如果你还是利用上一章的代码来修改的话,你不需要做其它事情你就能编译通过并能运行,而且能看到一个机器人在原地走动了,如果你编译不通过的话,需要做以下的两步:
1、在代码的开始前定义一个动画对象:AnimationState* mAnimState;
2、在bool frameStarted(const FrameEvent& evt)过程里面加入:mAnimState->addTime(evt.timeSinceLastFrame);,让动画动起来。
原创作品出自努力偷懒,转载请说明文章出处:http://blog.csdn.net/kfarvid或 http://www.cnblogs.com/kfarvid/