Ogre的骨骼动画

    Ogre骨骼信息和动画信息保存到后缀名为.skeleton的文件中,你可以通过OGRE提供的导出插件工具(Milkshape3Dmaxexporter)来导出该类型的文件。当你创建基于.Mesh文件的Entity时,.Skeleton文件将会自动被系统加载进来。为了操作方便,Entity自动给每一个动作指定一个AnimationState类(请参考基本动画)的对象,你可以通过Entity::getAnimationState函数来得到具体的动作。 

    该实例创建基于robot.mesh文件的实体(Entity)对象,指定其“走”动作(动作信息都在.skeleton文件里),并将其显示到屏幕上。robot.mesh文件中保存机器人的网格信息,Entity会自动加载保存有机器人骨骼信息的robot.skeleton文件。

就像上一章的一样,我们把要学习的代码放入一个过程里面,代码如下:我们同样把过程CreateSkeletonAnimation放到了createScene里面执行。

     void  CreateSkeletonAnimation()
    
... {
        
// 设置关键帧之间的插值方法为样条插值
        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/

你可能感兴趣的:(Ogre游戏开发)