陈姝慧
(长春工业大学电气与电子工程学院,吉林长春 130012)
由于地下煤矿的环境和地质条件复杂多变,各种灾情时有发生,直接影响着煤矿工人的人身安全,而传统的二维地理信息系统(GIS)已经无法对地下煤矿的地质环境和灾情现象进行详细的表达和描述,为了使煤矿业的专业人员和煤矿工人都可以很容易地获得地下煤矿的实际数据,因此,需要采用虚拟现实技术进行模拟实现[1]。透水现象是煤矿的灾情之一,由于水流在随着时间不断地变化,是一个模糊物体,所以需要采用跨平台、可兼容的OpenGL作为主要的开发工具,而水流则采用粒子系统来实现。
OpenGL(Open Graphics Library)是用于三维图像(二维的亦可)的一个跨编程语言、跨平台的专业图形程序接口。它具有建模、变换、颜色模式设置、光照和材质设置、纹理映射、位图显示和图像增强、双缓存动画等功能,OpenGL具有使用简便、功能强大、调用方便等特点。
粒子系统是计算机图形学中模拟模糊物体和现象的最成功的图形生成技术。粒子系统在绘制不规则的对象,如火焰、水流、云彩、爆炸等方面具有独特的优点,因此,若要使模拟物体的效果更加丰富和真实,就必须使用粒子系统。粒子系统的优点是[2]:
1)单体素和复杂物体行为的有机结合。例如,可以利用粒子系统生成火焰、喷泉等。
2)易于实现。只要提供用于粒子属性的随机过程的一些参数即可定义一个粒子系统。
3)粒子简单,易于实现,而且显示效率较高。
由于OpenGL符合光学和计算机图形学原理,非常适合可视化的模糊物体仿真系统,并且能实现高性能的三维图形功能,所以,此系统采用性能优越的底层3D图形函数库OpenGL作为煤矿透水子系统的主要开发工具。
1.1.1 建模
OpenGL除了能绘制基本的点、线、多边形外,还可以绘制复杂的三维物体(如球、锥、多面体等)。OpenGL通常用多边形的顶点来描述三维模型。
1.1.2 变换
OpenGL的模型观察是通过一系列的变换实现的。OpenGL包括基本变换、投影变换、视口变换和取景变换等变换方法。这些变换方法可以减少系统的运行时间,提高图形的显示速度。
1.1.3 颜色模式的设定
颜色模式包括RGBA模式和颜色索引模式。在RGBA模式中,颜色由RGB(红、绿、蓝)值来设定;在颜色索引模式中,颜色值则由颜色表中的一个颜色索引值来设定。
1.1.4 光照和材质的应用
绘制有真实感的三维物体必须做光照处理,OpenGL提供了管理4种光(辐射光、环境光、镜面光和漫反射光)的方法。另外,还可以指定模型表面的反射特性,而光的RGB分量和材质RGB分量的反射率的乘积所形成的颜色才是最后反映到人眼中的颜色。
1.1.5 图像效果增强
OpenGL除了基本的拷贝和像素读写外,还提供了一系列增强三维景观的图像效果的函数,这些函数通过反走样、混合和雾化来增强图像的效果。
1.1.6 位图显示
OpenGL提供了专门对位图和图像进行操作的函数。
1.1.7 纹理映射
纹理是在计算机图形学中,包含颜色、alpha值、亮度等数据的矩形数据组。OpenGL提供的一系列的函数可以逼真地描述物体的表面细节,可以把真实图像贴到景物的多边形上,从而十分逼真地绘制三维景物。
1.1.8 动画
OpenGL的动画功能就是双缓存(double bu ffer)技术,双缓存包括前台缓存和后台缓存两种方式。双缓存技术就是先在内存中生成下一幅图像,然后把已经生成的图像拷贝到屏幕上。
1.1.9 交互技术
在OpenGL中,用户可以自由选择和修改三维景观中的物体[3]。
OpenGL基本工作流程[4]如图1所示。
图1 OpenGL基本工作流程
顶点数据包括几何顶点数据和几何像素装配数据,在对顶点数据进行操作时,根据景物模型的要求来进行。景物模型的要求不同决定采取的操作也就不同。
流程操作到最后,在帧缓冲区内的像素值被送入到帧缓冲器中来实现模拟图形的显示。
OpenGL的图形操作大致可以分为以下4个步骤:
1)建模:建立景物模型,并且对其进行数学描述。建模包括几何建模和行为建模两种模式;
2)设置视点:把模型放到三维空间中去,设置视点来描述观察者的空间位置以及所感兴趣的景观;
3)计算特征:根据景物应用条件的不同来计算模型物体的环境特征;
4)光栅化:把模型的数学描述以及与模型相关的所有信息转换为屏幕上的像素的过程。
通过OpenGL绘制出的巷道模拟效果图如图2和图3所示。
图2 煤矿巷道矿车图
图3 煤矿透水事故图
粒子系统的基本思想是采用大量形状简单、相似而且具有“生命”的微小粒子来定义和描述一些不规则的模糊物体。这些粒子都要在系统中经历“诞生”、“运动和生长”及“死亡”3个阶段。正是由于粒子系统是个有“生命”的系统,所以才形成了动态画面,充分模拟出了物体的随机性和动态性[5]。
对于粒子系统的描述,传统的方法是从粒子的3个阶段进行的,现在的方法是将粒子系统的各个属性统一放到一个集合里,而这些集合就构成了模糊物体的模型。
2.1.1 传统的粒子方法表述
2.1.1.1 “诞生”阶段粒子属性的表述
新诞生的粒子数目
粒子的初始位置s(f0)由粒子的诞生区域决定。
粒子的初始速度v(f0)=粒子的平均速度mv+rand()*粒子的速度方差vv。
粒子的初始颜色c(f0)=粒子的平均颜色mc +rand()*粒子的颜色方差vc。
粒子的初始透明度t(f0)=粒子的平均透明度m t+rand()*粒子的透明度方差v t。
粒子的生存期l(f0)=粒子的平均生存期m l +rand()*粒子的生存期方差vl。
其中,PM(fi)PM和PV(fi)PV是第fi帧新诞生粒子数目的平均值和方差,rand()是[-1,1]上均匀分布的随机函数,平均值和方差是用户给定的常数。
2.1.1.2 “运动和生长”阶段粒子属性的表述
位置:
速度:
颜色:
透明度:
生存期:
式中:a,Δc,Δt ——分别为粒子的加速度、颜色变化率、透明度变化率,可定义为常数。
2.1.1.3 “死亡”阶段粒子属性的表述
粒子的生命期随着每帧的播放而递减,当帧数减为0时,粒子死亡,应从系统中将粒子删除。
2.1.2 现在的粒子方法表述
粒子系统被定义成了一个在实数域上的n维向量,它囊括了粒子的所有属性[6]。
式中:Attri1,Attri2,…,Attrii,…,Attrin——粒子的n个属性。
一个粒子系统是由大量的基本粒子元素构成,每个粒子有一组属性,如位置、速度、颜色和生命期,粒子的初始值由随机过程产生。一个粒子系统是不断进化的,在生命期的每一刻,都要完成以下工作[7]:
1)粒子源产生新粒子。粒子由位于空间的某个地方的粒子源产生;
2)赋予每一个新粒子一定的初始属性。这是粒子系统的初始化过程,它们的初始属性由随机过程控制;
3)删除“死亡”的粒子。检查粒子的生命期,若粒子的生命期为0或者粒子的坐标超过指定的空间边界值,则将粒子从系统中删除;
4)更新粒子属性。根据粒子的动态特性,更新所有粒子的属性,在该步骤中,粒子的生命期递减一个时间步;
5)绘制并显示粒子。显示粒子系统中所有处于生命期中的粒子所组成的图形。
粒子系统运行流程如图4所示。
粒子系统主要是烘托总体的宏观效果,它只是从宏观上设定粒子的参数特性和运动,所有粒子都具有类似的性质,按类似的规律运动。对粒子的操作只能通过对整个粒子系统来操作,而不能单独编辑某一个粒子。又由于世间的自然景观是形态万千、变幻莫测的,所以需要多个粒子系统来描述,因此采用面向对象的思想,引入了粒子系统的概念[8]。算法在每一时刻首先确定新生的子粒子系统的数量,子粒子系统继承父粒子系统的所有属性。因此,在设计过程中,水粒子系统由水粒子系统层和水粒子系统组成,其系统结构如图5所示。
图4 粒子运行流程
图5 水粒子系统结构
由于粒子是有“生命”的,所以随着时间的推移,粒子的相关属性会相应地发生变化,并且旧的粒子随之消亡,新的粒子不断地产生加入。在本系统中,水粒子也有一组属性,它们分别是颜色、形状、大小、速度、位置、生命期等。
3.2.1 水粒子的颜色
水粒子的颜色主要包括初始颜色、消隐颜色和透明度3部分。其中初始颜色是新生粒子的颜色,消隐颜色是粒子在消亡时的颜色。本系统中,水粒子的初始颜色可由下式确定:
水粒子的透明度即亮度是一个从0到1变化的实数,0表示最暗,1表示最亮。而水粒子的初始亮度为1。
3.2.2 水粒子的形状和大小
水粒子的初始形状和大小在系统中产生时就已经被确定下来,为最简单的点。
3.2.3 水粒子的速度
水粒子的初始速度有一定的大小和方向,并且随着时间相应地变化。水粒子的初始速度可由下式确定:
假设水粒子在产生时刻是没有外力作用的,方向为向上运动,则有
3.2.4 水粒子的生命期
粒子的生命期是指粒子在系统中的存活时间,而水粒子的生命期则在粒子生成时已经由系统设定,其初值为+1.0 f。在描述上述属性的公式中,MeanCo lor(R,G,B)和M eanSpeed是颜色和速度的平均值,VarColor(R,G,B)和VarSpeed是颜色和速度的随机值,Rand()是在(-1.0,+1.0)上均匀分布的随机函数,其中平均值和随机值是由用户给定的。
水粒子系统流程如图6所示。
图6 水粒子系统流程
程序按照图6所示的系统流程图执行,最后模拟出的透水效果如图7所示。
图7 模拟出的透水效果图
在这个透水效果图中,水是先从顶部开始一点一点地渗漏,然后侧部也逐渐开始渗漏,最后形成大面积的透水。
基于粒子系统的、以OpenGL为煤矿虚拟现实系统的主要开发工具所做的设计和研究,还只是煤矿虚拟现实系统的起步阶段。而自从1983年粒子系统的方法诞生以来,虽然经历了二十几年的发展和完善,在模拟模糊物体方面已经达到了一定的水平,但是仍然还有许多问题需要进一步解决。
总之,在国内的矿山虚拟现实系统应用中应尽快摆脱理论探讨阶段,加快在理论上的研究,尽快地缩短与国外的差距;在基于粒子系统方法的水模拟研究中,真实感和实时性将是今后发展、研究的重点。
[1] 赵银花.虚拟现实与现代室内设计表现[J].长春工业大学学报:自然科学版,2010,31(5):593-595.
[2] 张芹,吴慧中,张健.基于粒子系统的建模方法研究[J].计算机科学,2003,30(8):144-146.
[3] 和平鸽工作室.OpenGL高级编程与可视化系统开发:系统开发篇[M].2版.北京:中国水利水电出版社,2006.
[4] 徐明亮,卢红星,王琬.OpenGL游戏编程[M].北京:机械工业出版社,2008.
[5] 庞新,王相海.基于OpenGL的礼花粒子系统模拟研究[J].计算机科学,2008,35(5):216-219.
[6] 李哲,艾婷,高文举.基于纹理映射的粒子火焰的模拟与绘制[J].长春工业大学学报:自然科学版,2009,30(2):215-218.
[7] 徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟[J].计算机仿真,2005,22(7):243-245.
[8] 杨冰,鲁敏.基于景物特征的粒子系统建模技术[J].计算机应用研究,2000,17(5):20-22.