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

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

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

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

3 动画模块

3.1动画类(Animation)

动画的基本原理:多个关键帧组成一个动画轨迹,多个动画轨迹组成一个动画。

每个关键帧具有自己的位置、缩放比例和旋转角,同时每个关键帧还保存有自己在整个动画轨迹里所处的时间点。在各个关键帧之间通过插值算法(Spline插值或线性插值)进行插值来生成最终的动画。具体是创建一个关键帧,传入这一帧的所在的时间点。根据当前时间,得到插值计算出来的当前帧。动画模块各类之间的关系可见下图:若图片无法显示请联系QQ752018766

3.1

Ogre::Animation类间成员关系具体如下图所示:

3.2

_OgreExport Animation类枚举了两种可用的动画插值法:

  enum InterpolationMode

        {  

IM_LINEAR//线性插值法

        IM_SPLINE//样条插值法可得到平滑的转角效果。

        };

另外,也特别枚举了旋转插值模式:

enum RotationInterpolationMode

        {

            RIM_LINEAR, //线性插值法速度很快,但结果不一定正确。

            RIM_SPHERICAL//数值球状插值更为正确的,可惜代价较高。

        };

每个动画保存自己的AnimationTrack列表,保存动画名称和长度(时间)。

创建动画Animation,参数为动画名和长度(时间)

virtual Animation* createAnimation(const String& name, Real length);

创建动画状态AnimationState,参数是与动画对应的名称。

virtual AnimationState* createAnimationState(const String& animName);

3.2动画轨迹类(AnimationTrack)

我们首先看一下Ogre::AnimationTrack的协作图表

若图片无法显示请联系QQ752018766图3.3

在动画序列中轨迹是影响特定动画物体类型的关键帧序列。一个动画轨迹可以指定其控制的节点(一块骨头或场景中的一个结点)。如果骨头受动画轨迹控制,可以实现骨骼动画,如果场景节点受动画轨迹控制,可以直接实现场景节点的动画运动。通过传递参数——当前时间点、权重和是否累计权重,使当前动画轨迹对其控制的节点产生作用。每个动画轨迹保存关键帧列表、本动画轨迹所属的动画(Animation)、本动画轨迹所控制的Node,又由于动画轨迹负责关键帧的插值,所以它保存SimpleSpline(简单样条插值计算器)和RotationSpline(旋转样条插值计算器)对象以实现插值功能。

下面是 Ogre::KeyFrame协作图表若图片无法显示请联系QQ752018766

3.4

KeyFrame* createKeyFrame(Real timePos);创建一个关键帧,传入这一帧的所在的时间点。

KeyFrame getInterpolatedKeyFrame(Real timeIndex) const; 根据当前时间,得到插值计算出来的的当前帧。被这个类支持的 KeyFrame是在不连续的点及时的快照变形。这个方法能使你轻易地在这些keyframes之间插值并产生平滑的运动。参数timeIndex是相对于整个动画序列的时间,函数将返回包含插值变换的新关键帧。值得注意的是移动及缩放使用线性插值,而旋转使用球状插值会产生更自然的结果。

使当前动画轨迹对其控制的节点产生作用,参数是当前时间点、权重和是否累计权重。

void apply(Real timePos, Real weight = 1.0, bool accumulate = false);

设置关键帧间的插值方式。动画在关键帧之间缺省插值方式为线性插值,

虽然速度很快,但在方向的快速改变会看起来不自然,因为方向在关键帧处迅速改变。可供选择的另外一种方法是使用样条插值 ,它虽在计算时间上花销更大.但看起来更流畅,因为方向的主要变化是分布在 keyframes 的周围而不仅仅只在 keyframe

void setInterpolationMode(InterpolationMode im);

旋转与此类似动画在旋转之间缺省插值方式为线性插值。如果需要更为精确的插值法 , 使用球性插值法,同样的也代价很高。

void setRotationInterpolationMode(RotationInterpolationMode im);

创建一个动画轨迹。第一个参数是这个动画轨迹的唯一标识,第二个参数指定应用这个动画轨迹的节点。

AnimationTrack* createTrack(unsigned short handle, Node* node);

使当前动画对其控制的节点产生作用(委托AnimationTrack进行),参数是当前时间点、权重和是否累计权重。

void apply(Skeleton* skeleton, Real timePos, Real weight = 1.0,

                     bool accumulate = false, Real scale = 1.0f);

为给定的骨骼制定时间位置和权重等信息。如果想要将动画轨迹与节点物体联系起来,调用函数apply()就可以很容易的实现如何将动画应用于节点物体。

3.3动画状态类(AnimationState

Ogre::AnimationState的继承关系图

 若图片无法显示请联系QQ752018766

3.5

其成员关系图如下所示

3.6若图片无法显示请联系QQ752018766

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

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

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