zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    27.全排列与带重复的排列
    ios之自定义UISwitch
    ios之UIAlertView
    ios之UISegmentedcontol
    ios之UISlider
    ios之UITextfield
    ios之UIImageView
    ios之UIButoon
    ios之UILabel
    ios 点餐系统
  • 原文地址:https://www.cnblogs.com/kfarvid/p/2251455.html
Copyright © 2011-2022 走看看