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

时间:2022-12-18 21:10:02 浏览量:

摘要:随着视频游戏的发展,新技术的不断出现、更新,使得游戏变得更为精彩,游戏玩家们对游戏质量的要求也在不断地提高,而精彩的游戏需要一套好的图像引擎来实现,但国内现在的图像引擎的发展还不够强大。在此背景下这篇文章研究了几种图像引擎的算法,并将之用于计算机三维图像编程中,制作了一个演示软件——Magic Box,模拟了现实世界中的风、雨、雷、电等各种自然现象以及天空顶等。

关键词:图像引擎;粒子系统;OpenGL;DirectX;仿真;虚拟现实

中图分类号:TP301文献标识码:A文章编号:1009-3044(2008)35-2387-03

Study of Graphic Engine Arithmetic and Application

LI 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 reality

1 引言

虚拟现实、科学计算可视化及多媒体技术的飞速发展均对用户界面提出了更高的要求。目前,国内外已存在为数不少的图像引擎,但都或多或少存在一些缺陷,如平台面向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的球体。可以把它写成下面的方程:

f(p) = x2 + y2 + z2 - r2 = 0

方程中,p是圆上一点。以上方程处理球体有些困难,我们把它转向使用球面坐标系,在球面坐标方式下,球体上的一点将由下面的方程决定:

p = (px, py, pz) = f(ρ, φ) = (fx(ρ, φ), fy(ρ, φ), fz(ρ, φ))

方程中,ρ(phi [fai])称为纬度,而φ(theta)称为经度。那么,球面坐标系下球体的方程如下:

fx(ρ, φ) = r sin(ρ) cos(φ)

fy(ρ, φ) = r sin(ρ) sin(φ)

fz(ρ, φ) = r cos(ρ)

其中,r为球体半径,我们将使用这个方程,因为只要给出一个点的纬度和经度,就可以求出该点的x, y, z 值。对于一个球来说,ρ的取值范围是-90°到90°,φ的取值范围是0°到360°,即:

-π/2 <= ρ <=π/2

0 <= φ <= 2π

以上是一个完整的球体的取值。

现在已经知道了怎样获取球体上一个点的坐标,再制定一点算法规则,让有足够的点来渲染球体。首先,需要一点额外信息,球面上有无限多个点,实际上,只要有两百多个点,就能渲染出一个优美的球体。φ的取值范围是0°到360°,有无穷多个取值,在这里就只取一个值,称为Dφ (dtheta),这个值包括了一定的数量,就可以从0 到2π间反复取值,沿XZ平面得到 2π/Dφ个点。如果对于取值为30°的一个Dφ,将得到360°/30°= 12个点,Dφ取得越小,就能得到越多的点(注意:如果选择的Dφ太小,球体将由巨大数量的顶点所组成,从而影响程序性能)。

算法规则的伪码如下:

for (ρ从-π/2到π/2,ρ+= dρ)

{

for (φ从0到2π,φ+= Dφ)

{

px = r * sin(ρ) * cos(φ)

py = r * sin(ρ) * sin(φ)

pz = r * cos(ρ)

}

}

如果还想在游戏中得到更好的效果,还要建立一系列三解形,才能真实地渲染出天空顶。使用的算法将产生一个三角形带。生成一个三角形带需要四个顶点,前面三个顶点构成一个三角形,而第四个顶点描述了第二个三角形,这个三角形的另外两个顶点就是前面三角形的第二和第三个顶点。

构成三角形顶点是:

ρ, φ

ρ+ Dρ, φ

ρ, φ + D φ

ρ+ Dρ, φ + D φ

以上四个点是构成所需的三角形带,用来正确地渲染球体或天空顶。构成球体的顶点数量,实际上就是把360除以D φ的值和90除以Dρ值相乘。方程如下:

(360/Dφ)*(90/Dρ) = 天空顶的顶点数量

4 三维动画——Magic Box的实现

基于以上图像引擎技术,笔者在OpenGL软件开发平台下利用C++语言程式编写,制作了一个演示版三维动画软件——Magic Box,利用了以上引擎技术构建了一个虚拟的空间。其中包括天与地的创建以及建筑物的建造。在空间中应用了一部分的粒子效果,例如:火,雨,雪等等。另外还有一些图像特效,例如:光效,雾效等等。开发的平台选择在Win32位操作系统下进行,能为用户提供一个与设备无关的、面向Win32位的图像引擎。

5 结束语

笔者研究设计的这一套三维动画软件《Magic Box》是图像引擎的一个部分,可以被应用于游戏行业、计算机动画制作行业、电影特效行业,也可以用来制作各种工业监控软件以及图形建模、图形拓扑分析、GIS系统、CAD软件 、工业SCADA系统、图形自动开票系统、工作流程设计、智能表单系统、中文报表系统、图形管理、工程制图等专业应用中。其应用前景极为广阔。

参考文献:

[1] 杨青,杨磊编. 3D游戏编程[M]. 中国科学技术出版社,北京希望电子出版社.

[2] (美)Mark DeLoura. 游戏编程精粹1[M]. 王淑礼,张磊,译. 人民邮电出版社.

[3] (美)Mark A. DeLoura. 游戏编程精粹2[M]. 袁国忠, 陈蔚,译. 人民邮电出版社.

推荐访问:算法 及其应用 图像 引擎 研究