- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章_Ogre动画基础资料
第8讲 Ogre动画基础 ;动画的基本概念; Ogre提供了相当灵活的动画系统,通过它可以做各种各样的应用。
骨骼动画 运用骨骼结构来定义网格数据。
顶点动画 保存顶点的快照来决定网格数据如何改变。
场景节点动画 根据预先定义的路径来操作场景节点上挂接的实体的运动产生动画效果。
数值动画 Ogre提供扩展的类来根据任何值产生动画效果。
; 骨骼动画是根据网格数据中的骨骼信息来产生动画效果,一般是根据顶点上绑定的骨骼信息轮询确定模式的顶点。另一个叫法是骨骼蒙皮。骨骼动画一般是通过3d建模工具完成的。OGRE提供导出工具OgreXMLconverter,来将建模工具制作的骨骼动画导出为引擎可以应用的格式。
骨骼和动画信息被保存在以.skeleton结尾的文件中,可以通过OGRE的exporters导出。当创建一个基于某个mesh的实体的时间,如果mesh上有动画信息,那么相应的.skeleton文件会被自动加载。;OGRE支持下列特征的骨骼动画:
1 每个网格可以定义一个独立骨骼动画。
2 每个骨骼动画可以支持无限的骨骼。
3 作用于骨骼上的反向动力。
4 每个骨骼集可以定义多个名称的动画。
5 每个骨骼动画可以有多个关键帧。
6 关键帧之间的线性或者是样条插值。
7 一个顶点可以关联多个骨骼,并且可以被赋予权重,用来做融合。
8 通过权值融合,多个动画可以在同一时刻被作用于一个网格数据。
;直接利用顶点的运动信息来产生动画。每个轨迹对应于一个VertexData的实例。顶点动画的数据存储于.mesh文件中。实际上,有两种顶点动画。
变形动画
变形动画和骨骼动画相比,在技术上比较简单。它根据动画的关键帧时间线插入相应的网格数据。
姿态动画
姿态动画根据不同的权重和对顶点数据的偏移融合不同的姿态,来产生最后的结果。在面部动画中,姿态动画应用比较广泛。 ; 为了做场景结点运动的动画,场景结点动画从场景管理器中创建,它使得与与之关联的对象自动的随着一起移动。你能在演示Demo_CameraTrack中看到照相机的轨迹行为,也可以在Demo_Fresnel的池塘中看鱼如何移动的。 在主要的部分,场景结点动画与在骨骼动画中的基本骨骼的代码非常相似,??使用SceneManager::createAnimation创建主动画后,你能为你要动画化的每个SceneNode创建对应的一个NodeAnimationTrack,并创建关键帧来控制位置、方向和线性插值或是曲线的缩放。你也可以与骨骼/顶点动画相同的方式,使用动画状态。否则你需要包含来自与SceneManager的状态,来取代来自独立实体的状态。动画被自动应用到每一帧上,或是使用高级的在SceneManager上的_applySceneAnimations()方法来被应用。
;动画状态对象?AnimationState?Ogre::AnimationState?(动画状态)?对象在头文件?OgreAnimationState.h?中定义,它的方法不多,作用很明确。
(1)?一个完整的?*.skeleton?骨骼动画文件可能包含不止一个动画序列,每一个动画序列用一个名字来标记,所以关于?AnimationName?、?TimePosition?、?Length?、?Weight?等等的一切?get?和?set?操作都是针对当前动画序列,而不是针对整个动画的。(2)?动画的刷新使用?addTime()?方法。;实现步骤
(0)?首先必须在合适的地方创建一个?AnimationState?动画状态实例。????我们需要使用这个动画状态实例来设置和控制角色动画。????AnimationState*?????mAnimState;
(1)?定义?ExampleApplication?和?ExampleFrameListener?的继承类。????前者使我们得以创建和设置应用程序,后者使我们得以在每帧对角色动画进行刷新。class?SkeletonAnimationFrameListener?:?public?ExampleFrameListenerclass?SkeletonAnimationApplication?:?public?ExampleApplication;实现步骤
(2)?在?ExampleApplication?的继承类中,覆盖场景创建方法?createScene()?并在其中依次做好以下事情:(2-1)?读取角色动画的模型实体并把它绑定到场景节点。????我们只需要读取角色模型文件?*.mesh?,在这个文件中指定了角色的骨骼动画文件?*.skelton?的名称。void?SkeletonAnimati
文档评论(0)