图像引擎算法及其应用的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像引擎算法及其应用的研究
作者:李梅陈立
来源:《电脑知识与技术》2008年第35期
摘要:随着视频游戏的发展,新技术的不断出现、更新,使得游戏变得更为精彩,游戏玩家们对游戏质量的要求也在不断地提高,而精彩的游戏需要一套好的图像引擎来实现,但国内现在的图像引擎的发展还不够强大。在此背景下这篇文章研究了几种图像引擎的算法,并将之用于计算机三维图像编程中,制作了一个演示软件——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) 光的材质:材质用于描述对象的反光性能,使光看起来有光泽。主要是通过设置漫反射颜色、法线等来实现。