三文动画在OGRE中应用的研究 第10页
在这里,有几个比较重要的地方要提一下:
1) 一个完整的 *.skeleton 骨骼动画文件可能包含不止一个动画序列,每一个动画序列用一个名字来标记,所以关于 AnimationName 、 TimePosition 、 Length 、 Weight 等等的一切 get 和 set 操作都是针对当前动画序列,而不是针对整个动画的。
2) 动画的刷新使用 addTime() 方法。
现在来总的讲一下,读取和播放角色动画的常规步骤。
A: 首先必须在合适的地方创建一个 AnimationState 动画状态实例。
我们需要使用这个动画状态实例来设置和控制角色动画。
AnimationState* mAnimState;
B: 定义 ExampleApplication 和 ExampleFrameListener 的继承类。
前者使我们得以创建和设置应用程序,后者使我们得以在每帧对角色动画进行刷新。
class SkeletonAnimationFrameListener : public ExampleFrameListener
class SkeletonAnimationApplication : public ExampleApplication
C: 在 ExampleApplication 的继承类中,覆盖场景创建方法 createScene() 并在其中依次做好以下事情:
(C-1) 读取角色动画的模型实体并把它绑定到场景节点。
我们只需要读取角色模型文件 *.mesh ,在这个文件中指定了角色的骨骼动画文件 *.skelton 的名称。
void SkeletonAnimationApplication::createScene( void )
{
... ...
Entity* entObject = mSceneMgr->createEntity( "object", "ninja.mesh" );
(C-2) 设置动画状态。
两个必要的步骤分别是指定动画序列名称和启用动画序列:
void SkeletonAnimationApplication::createScene( void )
{
... ...
mAnimState = entObject->getAnimationState( "Attack2" );
// 指定要播放的动画序列
mAnimState->setEnabled( true ); // 启动动画序列
D: 在ExampleApplication 的继承类中,覆盖帧监听器创建方法 createFrameListener( ) ,在其中创建新的帧监听器并将其添加到根节点 mRoot (不是场景根节点) 。
void SkeletonAnimationApplication::createFrameListener( void )
{
// 新建帧监听器实例
mFrameListener= new SkeletonAnimationFrameListener( mWindow,mCamera );
// 添加帧监听器到根节点
mRoot->addFrameListener( mFrameListener );
}
E: 然后在 ExampleFrameListener 的继承类中,覆盖帧开始事件处理方法 frameStarted() ,在其中进行动画状态的更新。
bool SkeletonAnimationFrameListener::frameStarted( const FrameEvent& evt )
{
// 更新动画状态
mAnimState->addTime( evt.timeSinceLastFrame * mAnimationSpeed );
// 调用默认帧并开始事件处理方法
return ExampleFrameListener::frameStarted( evt );
}
其中, const FrameEvent& evt 是 OGRE 系统事件,类似于 Windows API 的系统消息 msg 。第5章 总 结
总的来说,OGRE是一款简单、易用的图形渲染引擎,我们只要稍稍扩展程序框架(framework),就能得到更为具体的为我们所需的应用程序。本论文主要研究了三文动画在游戏中的应用,重点分析了关键帧动画、骨骼动画、动画的主要原理和结构分析,并通过制作DEMO来实现关键帧技术和骨骼动画技术,进而对OGRE的整个动画制作流程有了一个比较清晰地认识和了解。
通过本次毕业设计,开始学会和锻炼了应该怎样发现和提出问题,并最终努力去独立解决问题的能力,同时也培养了我拥有良好团队合作的精神。
由于时间仓促和能力有限,所完成的设计任务跟原来设想的差距很大,许多方面做的也不太完善,比如对于如何才能将人工智能与动画更有效地结合起来所需要的知识掌握的不够,等等。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>