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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值