毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

三文动画在OGRE中应用的研究 第7页

更新时间:2008-4-19:  来源:毕业论文

三文动画在OGRE中应用的研究 第7页

4 基本动画实例

4.1 OGRE CameraTrack 实例分析

1OGRE CameraTrack定义了一个10秒种的动画,这个动画包含一个动画轨迹(上下翻转)。让这个动画应用到当前摄像机上去,程序运行时,用户的视角应该在上下翻转。

本工程只有两个文件: CameraTrack.cpp, CameraTrack.h.并且 CameraTrack.h是空文件。在CameraTrack.cpp中只包含了一个头文件ExampleApplication.h  ,它定义了应用程序类 CameraTrackApplication, 该类的createScene函数负责初始化工作。我们看到CameraTrackApplication继承自ExampleApplication, CameraTrack工程中指定了附加包含路径ExampleApplication.hExampleFrameListener.h。所有的示例文件都引用这两个文件,因它们定义了简单通用的应用程序框架(FrameWork),例如定义了指向Root对象、摄像机、场景管理器、帧监听器、渲染窗口的指针。其中Root OGRE系统的入口点,通过Root对象可以调出配置对话框以配置渲染系统(RenderSystem);还可以获取到引擎其它部分的指针,如SceneManagerRenderSystemResource managers等;Root对象还提供一个startRendering方法来开始一个连续渲染过程。

2.接下来我们了解一下OGRE 的场景组织方式,就像一棵树,树有根、有枝干、有叶子和果实。最基本的两个概念,是场景节点 (SceneNode) 实体 (Entity) 。场景节点就像树枝,实体就像枝头的果实。我们可以画个概念图: 若图片无法显示请联系QQ752018766

4.1

场景节点就像根、树干和树枝,它可以再分枝,或者挂上果实;实体就像果实,它总是被绑定 (Attach) 在一个场景节点上并且总是处于分枝的末端;

场景节点控制实体的位置、方向、缩放等空间属性;

实体具有自己所使用的模型、材质、阴影、骨骼、动画、渲染状态等各种个体属性;

整个场景节点拥有唯一的一个根场景节点(RootSceneNode),如果一个实体不是根场景节点的后代,也就是所谓的游离实体或被绑定在一个"游离"节点上的实体,它不会被显示。

场景节点类 Ogre::SceneNode 在头文件 OgreSceneNode.h 中定义, 实体类 Ogre::Entity 在头文件 OgreEntity.h 中定义,

mSceneMgr 是在公用示例基类 OGRE::ExampleApplication 中已经定义好的一个保护成员,作为场景管理器 (SceneManager) 的一个实例来使用。

场景管理器类 Ogre::SceneManager 在头文件 OgreSceneManager.h 中定义,场景管理器,顾名思义,它是整个 OGRE 场景的总管,管理整个场景中的所有场景节点 (SceneNode) 、实体 (Entity) 、光源 (Light) 、镜头 (Camera) 、材质 (Material) 、阴影 (Shadow) 、公告板 (Billboard) 、动画 (Animation) 、天空 (Sky) 、雾 (Fog) 、盖层 (Overlay) 等等大量元素。

我们明白了场景节点与实体的关系,接着要考虑如何将动画应用到当前摄像机上。因为一个动画可以应用到一个节点上,所以可以创建一个节点并将当前摄像机attach到这个节点上去,代码如下:

    SceneNode*camNode = mSceneMgr->getRootSceneNode()->createChild();

        camNode->attachObject(mCamera);

当然,如果你愿意,也可以把动画应用于动画物体,比如本例中的魔鬼头,可见渲染后的结果为魔鬼头在场景中飘忽移动,是不是有点像鬼片。如图

若图片无法显示请联系QQ752018766

 

 

 

 

 

4.2

  

4.3

3.下面定义动画、动画轨迹以及关键帧:

        // 定义动画,指定动画的名称及长度(这里为10秒)

        Animation* anim = mSceneMgr->createAnimation("CameraTrack", 10);

        // 指定动画关键帧之间的插值方式(包括线性插值和样条插值)

              anim->setInterpolationMode(Animation::IM_SPLINE);

        // 定义动画的一个动画轨迹,并指定这个轨迹是作用到camNode节点上的

        AnimationTrack* track = anim->createTrack(0, camNode);

        // 定义动画轨迹包含的关键帧,下面定义了四个关键帧,加上起始帧

函数KeyFrame* createKeyFrame(Real timePos) 参数timePos以秒为单位 ,表示应用关键帧的时间,此例是10秒的动画,每2.5秒设置一个关键帧,五个关健帧形成了一个翻转的动画。

        KeyFrame* key = track->createKeyFrame(0); // startposition

        key = track->createKeyFrame(2.5);

        key->setTranslate(Vector3(500,500,-1000));

        key = track->createKeyFrame(5);

        key->setTranslate(Vector3(-1500,1000,-600));

        key = track->createKeyFrame(7.5);

        key->setTranslate(Vector3(0,-100,0));

        key = track->createKeyFrame(10);

        key->setTranslate(Vector3(0,0,0));

我们看到在每个关键帧处,动画物体都发生了移动。OgreKeyFrame.h 定义了动画物体空间移动的三种方式:

平移setTranslate(const Vector3& trans)

缩放setScale(const Vector3& scale)

旋转setRotation(const Quaternion& rot)

我们也可以让物体的运动复杂一些,加入旋转和缩放变化。

KeyFrame* key = track->createKeyFrame(0); // startposition

        key = track->createKeyFrame(2.5);

        key->setTranslate(Vector3(500,500,-1000));

             key->setScale(Vector3(0.5,0.5,0.5));

        key = track->createKeyFrame(5);

        key->setTranslate(Vector3(-1500,1000,-600)); key->setScale(Vector3(0.5,1,0.5));

        key = track->createKeyFrame(7.5);

        key->setTranslate(Vector3(0,-100,0));

        key->setScale(Vector3(1,0.5,1));

        key = track->createKeyFrame(10);

        key->setTranslate(Vector3(0,0,0));

在关键帧处设置变化的代码中,我们可以在加了下画线的位置加上缩放变化,我们可以看到魔鬼头在移动的同时,还会产生逐渐拉长,然后被压扁,最后还原成初始状态的效果。

 

4 基本动画实例

4.1 OGRE CameraTrack 实例分析

1OGRE CameraTrack定义了一个10秒种的动画,这个动画包含一个动画轨迹(上下翻转)。让这个动画应用到当前摄像机上去,程序运行时,用户的视角应该在上下翻转。

本工程只有两个文件: CameraTrack.cpp, CameraTrack.h.并且 CameraTrack.h是空文件。在CameraTrack.cpp中只包含了一个头文件ExampleApplication.h  ,它定义了应用程序类 CameraTrackApplication, 该类的createScene函数负责初始化工作。我们看到CameraTrackApplication继承自ExampleApplication, CameraTrack工程中指定了附加包含路径ExampleApplication.hExampleFrameListener.h。所有的示例文件都引用这两个文件,因它们定义了简单通用的应用程序框架(FrameWork),例如定义了指向Root对象、摄像机、场景管理器、帧监听器、渲染窗口的指针。其中Root OGRE系统的入口点,通过Root对象可以调出配置对话框以配置渲染系统(RenderSystem);还可以获取到引擎其它部分的指针,如SceneManagerRenderSystemResource managers等;Root对象还提供一个startRendering方法来开始一个连续渲染过程。

2.接下来我们了解一下OGRE 的场景组织方式,就像一棵树,树有根、有枝干、有叶子和果实。最基本的两个概念,是场景节点 (SceneNode) 实体 (Entity) 。场景节点就像树枝,实体就像枝头的果实。我们可以画个概念图: 若图片无法显示请联系QQ752018766

4.1

场景节点就像根、树干和树枝,它可以再分枝,或者挂上果实;实体就像果实,它总是被绑定 (Attach) 在一个场景节点上并且总是处于分枝的末端;

场景节点控制实体的位置、方向、缩放等空间属性;

实体具有自己所使用的模型、材质、阴影、骨骼、动画、渲染状态等各种个体属性;

整个场景节点拥有唯一的一个根场景节点(RootSceneNode),如果一个实体不是根场景节点的后代,也就是所谓的游离实体或被绑定在一个"游离"节点上的实体,它不会被显示。

场景节点类 Ogre::SceneNode 在头文件 OgreSceneNode.h 中定义, 实体类 Ogre::Entity 在头文件 OgreEntity.h 中定义,

mSceneMgr 是在公用示例基类 OGRE::ExampleApplication 中已经定义好的一个保护成员,作为场景管理器 (SceneManager) 的一个实例来使用。

场景管理器类 Ogre::SceneManager 在头文件 OgreSceneManager.h 中定义,场景管理器,顾名思义,它是整个 OGRE 场景的总管,管理整个场景中的所有场景节点 (SceneNode) 、实体 (Entity) 、光源 (Light) 、镜头 (Camera) 、材质 (Material) 、阴影 (Shadow) 、公告板 (Billboard) 、动画 (Animation) 、天空 (Sky) 、雾 (Fog) 、盖层 (Overlay) 等等大量元素。

我们明白了场景节点与实体的关系,接着要考虑如何将动画应用到当前摄像机上。因为一个动画可以应用到一个节点上,所以可以创建一个节点并将当前摄像机attach到这个节点上去,代码如下:

    SceneNode*camNode = mSceneMgr->getRootSceneNode()->createChild();

        camNode->attachObject(mCamera);

当然,如果你愿意,也可以把动画应用于动画物体,比如本例中的魔鬼头,可见渲染后的结果为魔鬼头在场景中飘忽移动,是不是有点像鬼片。如图

 

 

 若图片无法显示请联系QQ752018766

 

 

4.2

  

4.3

3.下面定义动画、动画轨迹以及关键帧:

        // 定义动画,指定动画的名称及长度(这里为10秒)

        Animation* anim = mSceneMgr->createAnimation("CameraTrack", 10);

        // 指定动画关键帧之间的插值方式(包括线性插值和样条插值)

              anim->setInterpolationMode(Animation::IM_SPLINE);

        // 定义动画的一个动画轨迹,并指定这个轨迹是作用到camNode节点上的

        AnimationTrack* track = anim->createTrack(0, camNode);

        // 定义动画轨迹包含的关键帧,下面定义了四个关键帧,加上起始帧

函数KeyFrame* createKeyFrame(Real timePos) 参数timePos以秒为单位 ,表示应用关键帧的时间,此例是10秒的动画,每2.5秒设置一个关键帧,五个关健帧形成了一个翻转的动画。

        KeyFrame* key = track->createKeyFrame(0); // startposition

        key = track->createKeyFrame(2.5);

        key->setTranslate(Vector3(500,500,-1000));

        key = track->createKeyFrame(5);

        key->setTranslate(Vector3(-1500,1000,-600));

        key = track->createKeyFrame(7.5);

        key->setTranslate(Vector3(0,-100,0));

        key = track->createKeyFrame(10);

        key->setTranslate(Vector3(0,0,0));

我们看到在每个关键帧处,动画物体都发生了移动。OgreKeyFrame.h 定义了动画物体空间移动的三种方式:

平移setTranslate(const Vector3& trans)

缩放setScale(const Vector3& scale)

旋转setRotation(const Quaternion& rot)

我们也可以让物体的运动复杂一些,加入旋转和缩放变化。

KeyFrame* key = track->createKeyFrame(0); // startposition

        key = track->createKeyFrame(2.5);

        key->setTranslate(Vector3(500,500,-1000));

             key->setScale(Vector3(0.5,0.5,0.5));

        key = track->createKeyFrame(5);

        key->setTranslate(Vector3(-1500,1000,-600)); key->setScale(Vector3(0.5,1,0.5));

        key = track->createKeyFrame(7.5);

        key->setTranslate(Vector3(0,-100,0));

        key->setScale(Vector3(1,0.5,1));

        key = track->createKeyFrame(10);

        key->setTranslate(Vector3(0,0,0));

在关键帧处设置变化的代码中,我们可以在加了下画线的位置加上缩放变化,我们可以看到魔鬼头在移动的同时,还会产生逐渐拉长,然后被压扁,最后还原成初始状态的效果。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

三文动画在OGRE中应用的研究 第7页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。