当前位置:文档之家› 图像引擎算法及其应用的研究

图像引擎算法及其应用的研究

图像引擎算法及其应用的研究作者:李梅陈立来源:《电脑知识与技术》2008年第35期摘要:随着视频游戏的发展,新技术的不断出现、更新,使得游戏变得更为精彩,游戏玩家们对游戏质量的要求也在不断地提高,而精彩的游戏需要一套好的图像引擎来实现,但国内现在的图像引擎的发展还不够强大。

在此背景下这篇文章研究了几种图像引擎的算法,并将之用于计算机三维图像编程中,制作了一个演示软件——Magic Box,模拟了现实世界中的风、雨、雷、电等各种自然现象以及天空顶等。

关键词:图像引擎;粒子系统;OpenGL;DirectX;仿真;虚拟现实中图分类号:TP301文献标识码:A文章编号:1009-3044(2008)35-2387-03Study of Graphic Engine Arithmetic and ApplicationLI Mei1, CHEN Li2(1. Computer Since Department, Guangdong Agriculture Industry Business Polytechnic College, Guangzhou 510507, China;2. Guangzhou Yueqin Information consultation Cor., Guangzhou 510507, China)Abstract: Game is becoming more wonderful along with the development of video game and appearance of new technology. The player's demands about game quality are increased. Wonderful game needs one good graphic engine. But the development of graphic engine isn't mightiness in China. So, this paper studied some arithmetic of graphic engine on this background. And the writer developed computer three dimension animation-Magic Box. This software simulated some nature phenomena-wind, rain, thunder, lightning, and so on.Key words: graphic engine; particle system; openGL;directX;simulation;visual reality1 引言虚拟现实、科学计算可视化及多媒体技术的飞速发展均对用户界面提出了更高的要求。

目前,国内外已存在为数不少的图像引擎,但都或多或少存在一些缺陷,如平台面向PC环境,对于系统资源的要求较高,尽管剪裁后可能可以适应对于静态空间的要求,但对动态空间的要求依然难以降低,而且经剪裁以后,其功能受到极大削弱;而有些平台尽管较为成熟,但真正在商品化产品中使用时会面临很高的授权费用,无形中增加了产品的成本,使得产品在市场竞争中面临困境;另一些平台因其实现策略问题,使得二次开发受到限制;有些平台则因过于追求速度,实现中较多的代码采用汇编语言,使得移植非常困难。

在此背景下,笔者研究了一套图形引擎算法,并将之运用于三维动画设计,使用OpenGL三维图像函数库作为图像引擎底层开发基件,其中涉及Blur算法应用、阿尔法图层混合/融合技术等主要技术,使用C++语言设计了一套动画演示软件——《Magic Box》,其主要特点是:注重粒子系统和各种自然现象的模拟,把这两种效果集合一身,更好地体现真实的世界;支持多种纹理图像格式;大量封装OpenGL函数使二次开发更便捷;集成多种图像特效;粒子特效可真实地再现基本各种自然现象(雨、雾、风、云、雪);可生成多种基本三维图形;支持中文文字输出;可生成物体动态阴影;以及源代码完全公开且任何人可免费使用并对其进行修改2 图像引擎的功能一般图像引擎所需要提供的功能包括:曲面(Curved Surfaces)、动态光线(Dynamic Lighting)、体雾(Volumetric Fog)、镜面(Mirrors)、入口(Portals)、天空体(Skyboxes)、节点阴影(Vertex Shaders)、粒子系统(Particle Systems)、静态网格模型(Static Mesh Models)、网格模型动画(Animated Mesh Models)等。

该文重点研究了其中的雾和粒子效果的实现。

2.1 雾在游戏场景中,雾可以增添神秘感。

例如,在战争的黎明,或是进入黑暗的地域,都会用雾来渲染气氛。

不过,雾还有更重要的一个作用,就是可以大大减少渲染物体的数目。

如果没有雾,只要是在场景中可见范围内的所有三维物体,从观察者的位置到无穷远处,都必须渲染出来显示到屏幕上。

在真实的世界中,我们也不可能看到无穷远处的地方,越远的位置,景物就越模糊。

所以,在游戏中,我们必须加入雾的效果,来限制三维世界的可视距离,让计算机中的三维场景更加逼真。

[1]2.2 粒子系统在虚拟的现实场景中,有一些物体很难用几个图元来表示,例如:一枚火箭拖着浓烟飞行、爆炸产生的大量碎片等,这些物体的逻辑结构很难表达,而且还会动态地变化。

而使用粒子系统就可以实现这些特效。

粒子系统就是用大量的简单图元来表示物体的多个特征,如:大小、颜色、位置以及粒子本身的生命周期等都可以随机改变,这样就真实地模拟了自然界,虚拟出了一些自然界中的场景。

[1]3 图像引擎系统使用的主要技术笔者设计的三维动画软件Magic Box基于Windows操作系统开发,使用OpenGL开发平台进行程式编写。

在此软件中,笔者主要研究了雾效的实现和粒子系统的实现,除此以外,还研究了纹理、光以及天空顶的实现技术。

主要使用的图像算法如下:3.1 纹理应用建立三维场景最重要的手法是使用纹理。

三维场景和三维物体只有加上纹理,才能具有各种表面,显得逼真。

纹理就是3D图形中的2D贴图(位图),能应用到三角形上,用来增加真实感。

在纹理制作时最重要的就是确定纹理的尺寸和纹理的坐标。

理论上可以创建任何尺寸的纹理,但是为了提高效率,纹理尺寸最好选择正方形,而且边长最好是2的n次幂,例如16×16,32×32,64×64,128×128,256×256。

其中256×256是效率最高的尺寸。

而纹理坐标的作用就是在纹理上指定一个点,因为纹理是2D的,所以仅需要两个值:横轴和纵轴的值,其值均应该在0和1之间,左上角是(0,0),右下角是(1,1),如图1所示。

[1]在制作3D场景时,可以把纹理应用到对象上,即纹理映射。

图2显示了一个纹理映射到立方体的例子,表1则是每个顶点的纹理坐标。

3.2 灯光与材质在OpenGL中,我们能创建不同类型的光,使场景看起来更真实。

创建时主要考虑的是各种类型光的属性。

[2]1) 光源的位置:给出的是一个三维坐标,例如(0,10,0)。

2) 光的方向:用向量的形式表示,如(0,1,0)。

3) 光的范围:通常用光从光源发出后所能达到的最大距离表示。

4) 环境光:通过设置光的颜色来区别不同光线,光的颜色则主要采用红、绿、蓝三个分量来设置。

5) 光的衰减:在光源到达它的范围之内,光会逐渐衰减。

设计时则采用设置不同发光内径和发光外径以及光的距离来实现。

6) 光的材质:材质用于描述对象的反光性能,使光看起来有光泽。

主要是通过设置漫反射颜色、法线等来实现。

3.3 雾效图3是笔者实现的光与雾融合之后的场景, 表2是雾效的生成公式。

3.4 粒子系统粒子系统主要用来表示形状不确定的几何物体。

粒子模型通常具有以下特征:粒子系统可以不断生成新的粒子;每一个新粒子都有各自完全独立的属性;所有超过自己生命时期的粒子都被宣告“死亡”,从粒子系统中删除;每个在生存时期的粒子都根据自己的属性进行各自的移动和转换;当前生存的粒子在图形系统被渲染和显示。

粒子的生成的数目决定了粒子物体的粒子密度。

生成粒子的方法有两种:第一种方法:每一帧的粒子数目=粒子系统的平均粒子数目+Rand*粒子变化数目(公式1)。

公式中,粒子系统的平均粒子数目是粒子系统初始化时决定的;粒子变化数目是指定的一个粒子数目变化范围;Rand是从0-1的一个随机数值。

通过这个方法计算出粒子数目总数在平均范围内进行变化。

第二种方法是根据粒子物体在屏幕上显示的大小来决定粒子的数目:每一帧的粒子数目=(粒子系统的平均粒子数目+Rand*粒子变化数目)*屏幕像素(公式2)。

公式中加入了屏幕像素,粒子物体在屏幕上显示越来越多,粒子系统生成的粒子数目就越多,看起来就越逼真。

为了让粒子能够渐近地显示出来,上面两种方法中粒子系统的平均粒子数目使用线性公式进行计算:平均数目=初始化粒子数目+粒子增加数目*显示的画面帧数目(公式3)。

粒子系统中每个粒子都有自己的属性影响着自己的运动和显示。

粒子属性包括:初始位置;速度(包括速率的大小和方向);初始化大小;初始化颜色;初始化透明度;形状;生命期大小。

粒子的初始位置是粒子系统生成粒子时在三维坐标系中的位置。

通常粒子系统也有一个指定的形状,粒子系统的形状决定了粒子在三维坐标系中显示出的形状。

粒子系统随着时间进行变化,粒子系统中每个粒子都进行相应的变化。

这些变化包括:粒子的位置、粒子颜色、粒子的透明度和粒子的大小。

在进行粒子系统渲染时,粒子的当前位置加上粒子的速度,就可以得到粒子的新位置。

粒子的颜色、透明度和大小的初始值通常在粒子系统中进行统一指定,随着时间变化进行相应的变化。

生物有自己的生命期,粒子系统中每个粒子都有自己的生命期,在生命期中,粒子可以被渲染出来。

当生命期终止以后,就宣告粒子死亡,该粒子就不再有效,也不能再被渲染出来了。

图4为粒子系统的通用结构。

3.5 天空顶在游戏中,天空可以有两种方法来实现,一种是天空盒,一种是天空顶。

天空盒在游戏中如果处理不好,渲染出来的雾,就会把天空盒的边界显露出来。

如果在游戏中采用圆形天空顶取代天空盒,由于以更多的顶点构成天空顶,雾将被更平均地渲染。

还可以通过实时改变某些个别顶点的颜色创建一些很酷的效果,例如在一天不同时间里模拟真实的日照。

[3]创建天空顶,首先创建一个半球的数学方程:x2 + y2 + z2 = r2描述了一个球心在笛卡尔坐标系原点,半径为r的球体。

相关主题