Ogre骨骼动画
转自:http://blog.csdn.net/yanonsoftware/article/details/1281516
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,分别是:NodeAnimationTrack、NumericAnimationTrack、VertexAnimationTrack。
在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的动画管理结构比较混乱。Entity,Skeleton,Animation,AnimationState,SkeletonInstance之间的依赖关系过于复杂,并且存在循环依赖。

Ogre骨骼动画的更多相关文章
- Axiom3D:Ogre动画基本流程与骨骼动画
在Axiom中,Animation类用于管理动画,在此对象中主要管理着AnimationTrack对象,此对象用于管理动画的各种类型的每一桢.在Axiom中,动画类型主要有变形动画,姿态动画,骨骼动画 ...
- 骨骼动画的实现(OpenGL实现)
人物模型动画一直是游戏中最重要的组成部分, 因此这里我们研究骨骼动画是如何实现的. 原理 首先模型通常是由多个三角形形成的网格构成, 每个三角形有三个顶点, 因此动画的根本原理就在于不同时间内为每个顶 ...
- 引擎设计跟踪(九.14.2b) 骨骼动画基本完成
首先贴一个介绍max的sdk和骨骼动画的文章, 虽然很早的文章, 但是很有用, 感谢前辈们的贡献: 3Ds MAX骨骼动画导出插件编写 1.Dual Quaternion 关于Dual Quatern ...
- cocos2dx骨骼动画Armature源码分析(三)
代码目录结构 cocos2dx里骨骼动画代码在cocos -> editor-support -> cocostudio文件夹中,win下通过筛选器,文件结构如下.(mac下没有分,是整个 ...
- cocos2dx骨骼动画Armature源码分析(二)
flash中数据与xml中数据关系 上篇博文从总体上介绍了cocos2dx自带的骨骼动画,这篇介绍一下导出的配置数据各个字段的含义(也解释了DragonBone导出的xml数据每个字段的含义). sk ...
- cocos2dx骨骼动画Armature源码分析(一)
源码分析一body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-to ...
- cocostudio 骨骼动画 setContentScaleFactor
最近在看骨骼动画,看上去挺容易的,但是照着例子做的时候却出现问题了,骨骼之间出现了很大的缝隙,找了很久才发现原来setContentScaleFactor的原因, 出现间隙,是因为各个骨骼是单独在做缩 ...
- cocos2d-x 3.0 版本 骨骼动画设置shader
因为骨骼动画是由多个sprite组成, 所以需要遍历每个sprite 才能修改整体, 开头这样设置,在游戏中发现走路状态没问题,攻击状态就有部分sprite没效果 for (auto & ob ...
- Unity3D骨骼动画的分解(CleanData.Ani详解)
CleanData是什么 CleanData以前没有特定的名字,(在easydown这个开源项目中,作为一个GameObjParser模块存在).在某三国项目中,我们使用GameObjParser将N ...
随机推荐
- ogre入门笔记
ogre作为一款开源的非商业渲染引擎, 除去效率不谈, 其设计结构十分优雅, 值得游戏从业者拥有和学习.本篇笔记基于ogre v1.9. 1.代码模块 ogre的核心代码分布如下图: ogreMain ...
- 数据库中Schema(模式)概念的理解
在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...
- 你不知道的JavaScript--大白话讲解Promise
转载:http://blog.csdn.net/i10630226/article/details/50867792 一.Promise小试 复杂的概念先不讲,我们先简单粗暴地把Promise用一下, ...
- nssm在windows服务器上部署nodejs,coffee启动方式
本想用forever / pm2 来部署nodejs, 百度后发现只能在Linux系统上使用,window上没法使用,兜一圈后又转nssm了.... 在Linux上,可以轻松的使用forever或者p ...
- js——页面回到顶部
很久都没有去慕课网学习学习了,刚恰好就看见了一个用的比较多的小例子——页面回到顶部,记得之前自己也是在初学web时,被这个坑了一回,因此今天特地拿来分享分享…… <!DOCTYPE html&g ...
- MySql的导入与导出
1.导入 load data infile '/tmp/yhb/skin_info.txt' into table t_skin fields terminated by '\t' (skin_id, ...
- Entity Framework 复杂类型
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string Compan ...
- 关于linux的磁盘管理
普通的做法就是检索文件的时间,并使用rm进行删除. 另外有一种做法,可以通过检索inode,进一步进行文件的删除. 下面的文章为摘录,帮助了解inode: 文件名 -> inode -> ...
- Hduacm—5497
#include <cstring> #include <cstdio> #include <iostream> using namespace std; type ...
- Asynchttpclient开源框架下载图片和文本,于Volley和Glide开源框架的区别。
AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.com/loopj/android-async-httpAsyncH ...