首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > Ogre学习笔记(8):骨骼动画
【标  题】:Ogre学习笔记(8):骨骼动画
【关键字】:Ogre
【来  源】:http://blog.csdn.net/yanonsoftware/archive/2006/09/25/1281516.aspx

Ogre学习笔记(8):骨骼动画

       OGRE的基本动画控制是很简单的,设置一个动画的操作是这样:

       // Set idle animation

mAnimationState = ent->getAnimationState( "Idle" );  

mAnimationState->setLoop( true );

mAnimationState->setEnabled( true );

(上面这段代码来自Intermediate Tutorial1 – Ogre Wiki)从一个Entity对象中得到AnimationState指针,然后设置一些属性,在每帧需要调用:

       mAnimationState->addTime( evt.timeSinceLastFrame );

 

 

Skeleton的加载:

SkeletalApplication::createScene()

SkeletonPtr skel = SkeletonManager::getSingleton().load("jaiqua.skeleton",

                     ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

这个语句用来读取骨骼文件。读取的操作在“Skeleton::loadImpl”函数中。此函数主要执行了两步操作,一是调用“SkeletonSerializer::importSkeleton()”,二是“Load any linked skeletons”。动画信息存储在Skeleton的“AnimationList mAnimationsList”成员变量中。

Mesh类从存储了一个“SkeletonPtr mSkeleton”, SkeletonPtr是一个“SharedPtr<Skeleton>”的派生类。在load一个mesh是:

MeshSerializerImpl::readMesh()――case M_MESH_SKELETON_LINK

――》MeshSerializerImpl::readSkeletonLink()
      
――》Mesh::setSkeletonName()
      
――》ResourceManager::load()――得到骨骼指针

Animation类的对象就是“An animation sequence”,各种类型的动画序列都由这个类来管理。它管理了三种类型的Track list,分别是:NodeAnimationTrackNumericAnimationTrackVertexAnimationTrack

Entity的构造函数中,如果Mesh含有骨骼动画或者顶点动画,则会new一个AnimationStateSet对象,并调用“mesh->_initAnimationState(mAnimationState);”。

 

 

动画的计算:

Entity中保存了一个SkeletonInstance对象指针,它是Skeleton的派生类。

主要运算就在“void Entity::updateAnimation(void)”函数中。

à Entity::cacheBoneMatrices
      
à Skeleton::setAnimationState
      
此函数先是调用“Skeleton::reset”,然后针对每个enabled animation state,找到其对应的Animation,然后调用Animation::apply()来计算每个Bone的状态。

 

整体感觉OGRE的动画管理结构比较混乱。EntitySkeletonAnimationAnimationStateSkeletonInstance之间的依赖关系过于复杂,并且存在循环依赖。

 

 
GLSL基础教程(一):【上一篇】
游戏中如何加载人物,场景模型:【下一篇】
【相关文章】
  • 技巧和诀窍:UpdateProgress控件和AJAX活动图像动画
  • Ogre学习笔记(6):BspSceneManager
  • 用OGRE做游戏
  • Atlas入门-UpdateProgress(利用GridView翻页)[视频]
  • Ogre学习笔记(5):TerrainSceneManager
  • Ogre学习笔记(4):OctreeSceneManager
  • Ogre学习笔记(3):Mesh的渲染流程
  • Ogre学习笔记(2):Mesh的加载
  • in progress
  • Atlas 学习之004:“UpdatePanel ”和“UpdateProgress ”使更新数据呈现动画效果
  • 【随机文章】
  • 教你用Word制作精彩贺卡
  • 自定义的函数只能在当前工作
  • 如何三等分一个圆形
  • Windows2000 and NT4 源代码
  • 我为什么反对计算机奥林匹克竞赛
  • RedHatLinux AS3 U2 安装 oracle9204 成功 笔录
  • 网站统计代码 - 只要包含此代码即可统计
  • 转贴《socket编程—技术实现》
  • c++设计新思维第二章读书笔记二:Int2Type的妙用
  • C++精华(STL)学习笔记之迭代器
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.