基于OpenGL与粒子系统的实时降雪模拟

时间:2022-09-17 12:42:19

基于OpenGL与粒子系统的实时降雪模拟

摘要:为了增强虚拟现实系统的沉浸感,自然景物模拟一直是学者研究的热点之一。利用OpenGL函数包和粒子系统相关原理,模拟了自然降雪过程。整个降雪系统通过限制雪粒子初始化区域,大大减少了粒子数量,降低了算法的时间复杂度;通过宏定义每秒产生雪粒子数及雪粒子大小,模拟了不同情景的降雪过程,保证了系统模拟的多样性。

关键词:OpenGL 粒子系统; 真实感图形绘制; 虚拟现实

中图分类号:TP

文献标识码:A

文章编号:1672-3198(2011)06-0292-02

使用计算机模拟自然景物,如云、水流、树等一直是虚拟现实中真实感图形绘制领域具有挑战性的研究课题之一。签于自然景物和复杂性和随意性,传统的几何建模工具一般难以对其进行逼真的模拟。目前主要有两种方法实现自然景物模拟:一是基于物理建模技术的方法,二是基于粒子系统的方法。前者通过对Navier-Stockes方程求解,求出流体过断面时的平均流速,但由于N-S方程组是非线性的,计算较为复杂,因而难以达到实时要求;后者是,由Reeves等人于1983年提出的至今为止模拟不规则模糊景物最成功的一种图形算法。粒子系统的主要优点是可以利用非常简单的体素来构造复杂物体,为自然现象的造型提供了强有力的技术手段。

粒子系统从应用的角度可分为三类,即随机粒子系统、结构化粒子系统、方向粒子系统。随机粒子系统主要通过可控制的随机过程控制粒子属性的变化,可用来生成火、烟、灰尘、爆炸等场景图像;结构化粒子系统主要用来模拟具有一定结构的物体或现象,如树、草、云、彩虹等;方向粒子系统因为考虑到粒子间的相互影响,粒子除了具有速度和位置等动态属性外,还必须有方向属性,可用来模拟织物、可变形物体和刚体等。降雪现象没有一定的结构,模拟时无需考虑雪粒子间的相互作用,宜采用随机粒子系统进行模拟。随机粒子系统采用大量的、具有一定生命和属性的微小粒子图元作为基本元素,绘制不规则的模糊物体对象,其中,粒子图元的形状可以是小球、立方体、正四面体或其它的形体。粒子系统把物体定义为许多不规则、随机分布的粒子,且每个粒子均有一定的生命周期。随着时间的住移,旧的粒子不断死亡,新的粒子不断加入。粒子的这种出生、成长、衰老和死亡的过程,能够较好地反映模糊物体的动态特性。

本文依据粒子系统的仿真方法,对降雪进行了模拟。用大量雪粒子来描述降雪的形状属性及运动属性。降雪粒子系统是不断进化的,在生命期的每一刻,都要完成如下四步:第一步,系统产生新的雪粒子;第二步,更新雪粒子属性;第三步,删除“死”雪粒子;第四步,绘制雪粒子。本文降雪粒子系统中采用四边形来描述雪粒子几何特征,并给雪粒子加上纹理,进而逼真描述雪的自然现象。

1 雪粒子系统初始化

雪粒子系统由大量的雪粒子构成,雪粒子系统初始化需包含雪粒子初始化算法。对于雪粒子系统需要考虑的属性有雪粒子链表、雪粒子总数目、当前渲染的雪粒子数目,雪粒子系统的中心位置、消逝时间;对雪粒子则要考虑当前位置、上次位置、速度、加速度、生命期、尺寸大小等属性。

雪粒子产生区域是一个覆盖地面场景的长方体,并与水平面平行。在雪粒子密度相同的情况下,较大的产生区域需要较多的粒子,因此产生区域在满足视觉效果的前提下应尽可能小,这里,仅用视图体顶部的外接长方体作为产生区域。随着视点位置、视线方向的变化,视图体在空间移动,产生区域也作相应移动。本文雪粒子系统中雪粒子的初始化和发射被控制一个长、宽、高分别为mheight、mwidth、mdepth的长方体内。初始化时雪粒子x、y、z坐标分别由如下表达式确定:mheight、morigin.x+FRAND*mwidth、morigin.z+FRAND*mdepth。其中morign表示雪粒子系统场景的中心点。用自然语言描述雪粒子初始化、雪粒子系统初始化算法如下:

算法名称:雪粒子初始化;

算法参数:雪粒子索引号。

算法开始:

①初始化雪粒子的位置;

②设置雪粒子大小;

③设置雪粒子的初始速度为随机值;

算法结束。

算法名称:雪粒子系统初始化;

算法开始:

①判断是否存在雪粒子,若有,则雪粒子链表设为空,并设置头指针为空,否则转入第②步;

②调用“雪粒子初始化”算法;

③系统雪粒子总数、消逝时间均置为0;

算法结束 。

2 雪粒子系统的更新

随着视点的不断变化,及雪粒子的不断运动,雪粒子的空间坐标也在不断改变。当某一粒子运动到视口长方体分布区外时,则认为该是雪粒子寿命结束,系统停止对其计算和绘制。本文具体算法通过当前粒子的y轴坐标与场景的中心位置的y轴来判断雪粒子是否超出视口长方体,即:若mparticle[i].mpos.y

算法名称:雪粒子系统更新;

算法参数:(消逝时间)。

算法开始:

①判断当前雪粒子数目是否小于降雪粒子系统所容纳的雪粒子总数,若小于,则进行第②步;

②结合加速度与消逝时间参数计算当前雪粒子的新位置;

③判断当前雪粒子是否超出场景,若是,则删除当前粒子,并将最后一个粒子移到当前位置,否则,当前雪粒子索引加1,并返回第①步继续执行;

④累加并保存消逝时间;

⑤计算雪粒子新产生的数目,若此时新数目少于雪粒子系统所容纳的粒子总数,则转到第⑥步,否退出;

⑥调用“雪粒子初始化”算法;

算法结束。

3 雪粒子系统渲染

OpenGL是美国SGI公司开发的三维图形库,可以集成到各种操作系统中。利用OpenGL函数库可以创建动画的三维彩色图形交互式程序,并能控制计算机图形技术来产生真实感图形。本文利用它的基本图形绘制、变换、着色技术得到了粒子系统的基本模型。OpenGL在计算机屏幕上渲染绘三维图形景观的基本骤步如下:第一步,根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述,其中点、线、多边形、图像和位图都可作为基本图形单元;第二步,把景物模型放在三维空间中的合适位置,并且设置视点以观察所感兴趣的景观;第三步,计算模型号中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理方式等;第四步,把景物模型的数学描述及其色彩信息转换至计算机屏幕上的像素,即光栅化。当然在如上四步中也可执行一些其他操作,如自动消隐等。本文中具体算法首先通过雪粒子大小来反映透视效果,并为了增强雪粒子系统的实时性,尽量减少系统所绘制的多边形数量,将雪粒子简化为二维四边形,然后采用OpenGL的纹理融合技术将降雪的纹理图片映射到二维四边形上。雪粒子渲染算法描述如下:

算法名称:雪粒子系统渲染;

算法开始:

①设置OpenGL视点位置;

②绘制天空盒;

③构造显示列表,绘制一个白色地形;

④开启混合模式,并设置混合因子;

⑤将雪花纹理绑定;

⑥定义变量用于代表雪粒子的位置和大小;

⑦通过绘制四边形方式渲染雪粒子;

⑧关闭混合模式;

算法结束。

4 结语

本文按照粒子系统相关原理与结合OpenGL函数包,使用Visual C++6.0模拟了自然界中降雪的自然过程。降雪粒子系统将雪粒子初始化区域限制在场景顶部长方体内,大大减少所需粒子数量,进而保证了算法的实时性。通过宏定义调整系统每秒产生雪粒子数及雪粒子大小,可以产生不同程度、不同效果的降雪效果。为了更好地反映自然现象,系统实时性和真实性需进一步加强。因此,雪粒子重用技术、视景体优化技术及雪粒子受力情况是今后需努力的研究方向。

参考文献

[1] 王宏伟,刘越,王涌天面向对象的通用粒子系统设计[D]系统仿真学报,2006,(8)

[2]罗维佳,都金康,谢顺平基于粒子系统的三维场地降雨实时模拟[D]中国图象图形学报,2004,9(4).

[3]蒋恒恒,汤宝平,章国稳基于OpenGL与粒子系统实现三维喷泉模拟[J]计算机测量与控制,2009,17(9)

[4 ]何亮,巴力登.基于粒子系统的动态雪景拟[J]西北大学学报(自然科学版),2010,(8).

注:“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”

上一篇:中空超滤在煤矿深井废水预处理中的应用 下一篇:快递企业实现低碳物流问题探讨