Ogre骨骼动画

摘要:
动画信息存储在Skeleton的“AnimationListmAnimationsList”成员变量中。在load一个mesh是:MeshSerializerImpl::readMesh()-------------caseM_MESH_SKELETON_LINK:àMeshSerializerImpl::readSkeletonLink()àMesh::setSkeletonName()àResourceManager::load()---------------得到骨骼指针Animation类的对象就是“Ananimationsequence”,各种类型的动画序列都由这个类来管理。在Entity的构造函数中,如果Mesh含有骨骼动画或者顶点动画,则会new一个AnimationStateSet对象,并调用“mesh-˃_initAnimationState;”。整体感觉OGRE的动画管理结构比较混乱。Entity,Skeleton,Animation,AnimationState,SkeletonInstance之间的依赖关系过于复杂,并且存在循环依赖。

转自: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骨骼动画第1张

免责声明:文章转载自《Ogre骨骼动画》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GWAS 手册 A tutorial on conducting genome!wide association studies: Quality control and statistical analysiselement-ui upload 图片格式验证 ,文件验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

animation-delay负值

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width: 100px;...

【WPF学习】第五十六章 基于帧的动画

  除基于属性的动画系统外,WPF提供了一种创建基于帧的动画的方法,这种方法只使用代码。需要做的全部工作是响应静态的CompositionTarge.Rendering事件,触发该事件是为了给每帧获取内容。这是一种非常低级的方法,除非使用标准的基于属性的动画模型不能满足需要(例如,构建简单的侧边滚动游戏、创建基于物理的动画式构建粒子效果模型(如火焰、雪花以...

小程序购物车抛物线动画(通用)

说明:  之前用vue css3写过抛物线动画,但是小程序中,不支持js操作dom元素,所以你无法用js去去除动画的css3,导致你无法进行第二次的动画。 所以,只能用纯js去计算运动的路线,再改变小球的位置,这个写法,估计是没有什么都通用 实例是:https://github.com/WaitForYou/shopcartBeizer.git gith...

CSS 实现加载动画之一-菊花旋转

最近打算整理几个动画样式,最常见的就是我们用到的加载动画。加载动画的效果处理的好,会给页面带来画龙点睛的作用,而使用户愿意去等待。而页面中最常用的做法是把动画做成gif格式,当做背景图或是img标签来引用,这种方式最简单,也不会有兼容性的问题。不过本人有时爱折腾,看到一些动画的效果,不管是简单也好,复杂也好,也想尝试用代码来实现它,换一种思维方式,就算在项...

window的设置属性

1.windowAnimationStyle   用于设置一组window动画的引用style资源,window的动画属性由R.styleable.WindowAnimation定义。   Winow动画类属性包含以下属性:     android:activityCloseEnterAnimation    主要是将R.attr.activityClo...

debian 安装 plymouth 美化开机动画

Plymouth 目录 Plymouth 参考 简介 简单步骤,无脑按照wiki走 下载,请注意wiki里kde桌面的提醒 修改grub配置,建议修改前保存一下旧有配置 应用修改 查看一下默认主题 设置主题 看看效果 不试验了,花里胡哨,没啥用…… 如何显示原始的内核消息 参考 debian wiki B站视频 简介 debian默认的开机...