基于粒子系统的虚拟烟花的建模与绘制
2010-07-09宁云隆
李 哲, 苏 莹, 宁云隆
(装甲兵技术学院电子工程系,吉林长春 130117)
0 引 言
计算机视景仿真是虚拟现实技术在实际应用中的热门研究课题之一,其中,包括对烟花、雨雪、沙尘、浪花等动态自然景物的模拟与绘制,在气象预报、航空航天、装潢广告等领域有着广泛应用[1]。自然景物具有丰富的表面纹理和不规则的表面外形,并且能够随时间的推移而动态、随机地发生变化,因此,很难使用传统的计算机图形学的建模方法来生成。如何逼真地模拟诸如烟花、雨雪、沙尘、浪花等不规则自然景物,成为计算机真实感图形生成的关键技术。处理这类问题较好的办法有Fournier的分形算法和Reeves的粒子系统方法[2],而粒子系统能够充分体现自然景物的动态性和随机性,其优点在于使用简单的粒子图元来构造出传统计算机图形学难以构造的复杂物体,而且具有很强的真实感和实时性。
文中在经典粒子系统的基础上对烟花进行建模,创建烟花粒子数据结构,动态地改变烟花粒子的运动状态,使烟花粒子的运动更加灵活,体现烟花不规则的表面形态与随机的运动特征,并且使用纹理映射技术增强烟花绘制的真实感。
1 粒子系统
1.1 建模原理
粒子系统是构建具有不规则形状物体的经典算法,其主要思想是采用大量具有一定属性的微小粒子图元作为基本元素来绘制不规则的模糊物体[3]。在粒子系统中,粒子图元的形状可以是小球、立方体、正四面体或者其它形体;此外,系统中每个粒子还具有自身的属性:大小、颜色、透明度、位置、运动速度和生命周期等[4]。粒子在系统中要经过“产生”、“运动”和“消亡”3个阶段,期间粒子的各种属性随时间变化,从而体现出不规则物体运动的随机性,其建模过程如图1所示。
图1 粒子系统建模过程
1.2 烟花粒子
烟花粒子(Particle)定义为实数域上的一个n维向量,表示为:
粒子具有空间位置、大小尺寸、颜色、亮度、运动速度、加速度及生存期等属性。
1.3 粒子属性
对于每个新产生的火焰粒子,系统都要赋予其一定的属性,在不同的粒子系统中,粒子可以有不同的属性,但主要包括空间位置属性、外观属性、运动属性、生存周期属性等。
1.3.1 初始位置
初始位置反映了烟花粒子的分布及烟花的初始形状,假定烟花燃点中心粒子密集、边界稀疏,采用正态分布确定烟花的初始形状[5]。又假设烟花的燃点中心坐标为P0={x0,y0,z0},爆炸区域半径为R0,粒子初始位置为I(t0)={Xi(t0),Yi(t0),Zi(t0)},则烟花粒子的分布为:
式中:R=1/3R0。
1.3.2 初始颜色
粒子的初始颜色包括粒子的三原色值(R,G,B)和粒子的透明度值(Alpha),即:
InitColor=MeanColor+Rand()×VarColor InitColor(Alpha)=1.0
粒子从产生到消亡的过程中,粒子颜色从初始颜色渐变成消亡颜色,体现了烟花颜色分布的物理特性。
1.3.3 初始速度
粒子的初始速度表示为粒子的平均速度与粒子速度变化范围与随机函数乘积的和。
假设粒子的平均速度为:
Speed0={Speedx0,Speedy0,Speedz0}速度变化范围为:
VarSpeed={VarSpeedx,VarSpeedy,VarSpeedz}
则粒子的初始运动速度由下式确定:
1.3.4 生命周期
粒子的生存属性即生存周期指的是粒子在系统的模拟过程中存在时间的长短,描述时间的单位可以是显示帧数或者系统的时钟周期。使用显示帧数描述粒子生命周期实现起来相对容易,如在第T帧某个粒子的生命周期表示为:
式中:InitialLifetime——粒子的初始生命周期;
Attenuationperframe——每帧粒子生命衰减率。
2 系统实现
烟花燃放的形状有许多种,对不同的形状粒子将有不同的属性。文中设计研究了最基本的模型,其它许多类型的烟花可以由它们合成。
2.1 文中算法
2.1.1 烟花运动分析
烟花的本质是化学物质点燃后发生的爆炸现象,以热力学原理为基础可以对物质运动进行受力分析[4],烟花粒子的运动微分方程比较复杂,为了简化求解,根据物理动力学等相关知识可得第i帧时刻粒子的各种属性值。
2.1.1.1 位置
2.1.1.2 速度
式中:a——粒子的运动加速度。
2.1.1.3 颜色
式中:ΔC——粒子颜色变化率。
2.1.1.4 生命周期
2.1.2 烟花粒子消亡
烟花粒子消亡有两种情况[6]:一种粒子消亡条件是生命周期Lifetime(T)减至0;另一种情况是粒子生命周期Lifetime(T)不为0,但是,粒子的运动超出了预定或显示范围,粒子也会自动消亡。
2.2 烟花粒子模块
float m_fAlpha;//烟花粒子的透明度
float m_fLifetime;//烟花粒子的生存期
float m_fSize;//烟花粒子的大小
COLORVECTOR m_vColor;//烟花粒子的颜色
POINTVECTOR m_vLocation;//烟花粒子的空间位置
POINTVECTOR m_vVelocity;//烟花粒子的速度
……}烟花粒子类
2.3 纹理映射
为了满足模拟烟花爆炸现象的实时性和真实性,文中采用纹理映射技术,为烟花粒子贴上简单的纹理图片。纹理是一个数组,其中的数据为颜色和辉度或者颜色和alpha值,纹理数组中的值通常称为纹素(texel)[7]。通过创建纹理数组来定义不同的纹理,用户选择不同的纹理来产生不同的烟花爆炸效果。
2.3.1 纹理载入
在系统初始化时调用函数BuildTexture()载入纹理图片:
glBindTexture(GL_TEXTURE_2D,texture[0]);
texture[0]=loadTexture("flare.bmp");
texture[1]=loadTexture("fire.bmp");
glEnable(GL_TEXTURE_2D);//启用纹理
2.3.2 纹理贴图
将载入的纹理图片映射到烟花粒子表面上[8],这样代替纯色的点光源从而大大减少了整个系统中所需的粒子数,从而加快了系统的运行速度,并且在绘制烟花的真实感方面也取得较好的效果。
3 实验结果
上述算法是在PC机(CPU:酷睿2.4 GHz,内存:1 GB,NVIDIA GeForce 6600显卡),软件环境为Window sXP操作系统,基于Microsoft Visual C++6.0与OpenGL图形开发库编程实现。
系统实时绘制效果如图2所示。
图2 纹理映射前后不同绘制效果
4 结 语
以经典粒子系统理论为基础,构建了烟花粒子模型,对烟花爆炸的整个过程进行了仿真,基本实现了逼真的视觉效果,但为了更好地模拟动态自然景象,增强系统的实时性与绘制的真实感,是今后需要努力的研究方向。
[1] 傅莹.虚拟现实技术的应用方法研究[J].中国科技信息,2010,12(6):102-106.
[2] Reeves.Particle system-a technical modeling a class of fuzzy objects[J].Computer Graphics,1983,17(3):359-376.
[3] 朱诗孝.粒子系统及其在自然现象模拟中的应用[J].教育技术导刊,2009,12(6):105-106.
[4] 王晓娟,基于粒子系统动态烟花的模拟[J].青海大学学报:自然科学版,2009,27(4):29-32.
[5] 韩文君,赵伟.基于随机场的碰撞检测控制算法[J].长春工业大学学报:自然科学版,2008,29(2):152-158.
[6] 杨子华,刘宏芳.基于粒子系统模型的自然景物生成技术应用研究[J].计算技术与自动化,1998,17(3):20-23.
[7] Dave Shreiner,Mason Woo,Jackie Neider.OpenGL编程指南[M].邓郑祥,译.北京:人民邮电出版社,2005.
[8] 陈志伟,马小虎.基于粒子系统和纹理绘制的火焰模拟[J].计算机工程与科学,2010,32(1):71-73.