李引弟
基于粒子系统的奥运五环烟花模拟
李引弟
(五邑大学 计算机学院,广东 江门 529020)
以粒子系统理论和烟花燃放原理为基础,采用VC++和OpenGL作为开发工具并结合纹理映射和色彩融合技术,设计并实现了对奥运五环烟花的模拟,解决了模拟模糊物体计算不能很好达到实时性的问题,并对传统的烟花仿真模型进行了改进. 实验结果表明所构建的烟花模拟系统实现简单,实时性好,并具有真实的三维效果.
粒子系统;纹理映射;色彩融合;三维效果;奥运五环烟花
粒子系统将景物定义为大量随机分布的粒子集合,并通过简单图元表示景物的整体形态、特征以及动态变化,以充分体现不规则模糊物体的动态和随机性[1]. 粒子系统可以模拟许多自然现象和景物[2-4]. 其中,模拟烟花已有一系列的研究成果,如,陈利平[5]、甘露[6]等通过深入研究烟花燃放过程的特点,给出了不同状态下的烟花的具体算法,但用这种方法模拟的烟花,烟花粒子数目的多少很大程度上影响了模拟效果的实时性和逼真性;罗玉玲[7]给出了一种基于粒子系统与纹理映射结合的烟花动态模型,模拟出的烟花动态视觉效果较为真实;李清畅等[8]将粒子系统与BillBoarding技术相结合,取得了逼真的烟花模拟燃放效果. 通过深入研究上述方法的优缺点,本文以粒子系统和烟花燃放的基本原理为基础,以VC++和OpenGL为开发工具并结合纹理映射和图像融合技术,对五环烟花燃放的全过程进行了仿真.
在忽略风力、空气阻力作用下,五环烟花的形式分为4个阶段:1)烟花从地面的某点生成,2)烟花爆炸,3)粒子爆炸后上升,4)粒子在空中形成五环. 令重力方向为轴,轴为水平方向,轴垂直平面,此动画的视角为仰视,仰视角为30°.
烟花系统的数据比较简单,其数据结构如下:
struct FireWork
{GLfloat x,y,z;
GLfloat vx, vy, vz;
GLfloat r, g, b;
GLfloat life;
GLfloat fade;
GLfloat size;
GLbyte bFire;
GLbyte nExpl;
GLbyte bAddParts;
FireWork* pNext;
FireWork* pPrev;};
烟花粒子在水平面上方的一定高度产生,在定义了粒子的数据结构后,需要对粒子进行初始化,具体如下:
// 初始位置 // 初始速度 // 初始加速度
p. x = xtemp; p.vx = 0.0f; p. xg = 0.0f;
p. y = ytemp; p.vy= speed; p. yg = -2.0f;
p. z = ztemp; p.vz= 0.0f; p. zg = 0.0f;
// 初始颜色 // 尾部初始化
p.r = 0.03; p.x =par->x;
p.g = 0.03; p.y =par->y;
p.b = 0.03; p.z =par->z;
空中出现五环烟花之前的图案,如图1所示,此时粒子的各属性模型如下:
// 粒子位置更新 // 粒子速度更新 // 五环出现前粒子颜色
par->x += par->vx*20; par->vx =speedFator*sin(i*15.0/i*3.14159)) par->r = 0.3f;
par->y += par->vy*20; par->vy =0.02; par->g = 0.3f;
par->z += par->vz*20; par->vz = speedFator*cos(i*15.0/(i*3.14159)); par->b = 0.3f;
其中,speedFator为烟花粒子运动速度的控制因子.
粒子上升到空中一定高度以后,生命衰减到一定的值时,其颜色和亮度发生改变,五环图案开始靠近并套在一起,如图2所示. 此时,其属性描述如下:
// 粒子颜色 par->size = 0.6f;
par->r = GLfloat(rand()%255/255.0f); // 粒子位置
par->g = GLfloat(rand()%255/255.0f); p. x = par->x;
par->b = GLfloat(rand()%255/255.0f); p. y = par->y;
// 粒子生命 p. z = par->z;
par-> Life = 0.8f; // 粒子速度
// 粒子生命衰减 par->vx = 0.02f – float(rand()%40)/1000.0f;
par->fade = 0.01f + float(rand()%20)/1000.0f; par->vy = 0.02f – float(rand()%40)/1000.0f;
// 粒子大小 par->vz = 0.02f – float(rand()%40)/1000.0f;
图1 五环出现前的图案
图2 空中出现五环的图案
使用数学方程对粒子的运动轨迹加以控制,采用纹理映射技术以提高系统的实时性,采用色彩融合技术以增强五环动态烟花的逼真性.
烟花从地面的某一点生成并向上(轴方向)作减速运动,在、轴方向速度为0. 当方向速度为0时烟花爆炸生成小烟花,此时给烟花平面上的速度rad赋初值,并将其分解到、方向上(与坐标轴的夹角根据下标确定),轴的加速度不变直至小烟花运动轨迹为抛物线. 爆炸后烟花小粒子的运动轨迹方程为:
其中,rad为粒子在平面上的速度,为粒子在方向上绕轴旋转形成的角度,speed为粒子在轴上的速度,为粒子的重力加速度,为粒子的运动时间.
OpenGL是个专业的图形程序接口,是一个功能强大、调用方便的底层形库,它具有7大功能,并能实现深度暗示、运动模糊、混合、透明等特殊的效果.
2.2.1 纹理映射技术
能够模拟物体表面颜色细节或几何细节的计算机图形学技术称为纹理映射技术,利用OpenGL纹理映射功能可以十分逼真地表达物体的表面细节. 纹理映射的基本步骤:定义纹理→滤波→指定映射方式→绘制场景. 本文对纹理映射的实现过程如下:
//定义纹理
glTexImage2D(GL_TEXTURE_2D, 0, , info->bmiHeader. biWidth, info->bmiHeader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba);
//纹理过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minfilter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magfilter);
//指定映射方式
glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//绘制场景
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(par->x-par->size, par->y-par->size, par->z);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(par->x-par->size, par->y+par->size, par->z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(par->x+par->size, par->y+par->size, par->z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(par->x+par->size, par->y-par->size, par->z);
glEnd();
和传统仿真烟花的方法相比,纹理映射技术可以在不增加场景绘制复杂度、不显著增加计算量的前提下,大幅提高烟花模拟的真实感.
2.2.2 色彩融合技术
色彩融合的基本原理就是先将待分色的图像各像素的颜色以及背景颜色按照RGB规则分离,再根据: 图像的RGB颜色分量*alpha值+背景的RGB颜色分量*(1-alpha值)进行融合,最后将融合得到的RGB分量重新合并. 合并后产生的新颜色为
为了方便颜色混合,我们采用RGBA颜色模式,按照式(2)计算烟花粒子中2个像素的混色结果. 当颜色的某一分量超过了1.0它会被自动截取为1.0,所以不需要考虑越界的问题.
文献[9-10]对有形烟花的仿真建立在某种固定的数学模型上,而没有固定数学模型的有形烟花的仿真则较难实现. 本文利用粒子系统仿真的五环烟花是没有固定数学模型的,且据我们所查文献资料,还没有人实现过. 我们在奥运五环烟花生成的过程中结合OpenGL的纹理映射、色彩融合等技术以保证五环烟花仿真的逼真性,同时对某组烟花粒子的属性不断进行更新,控制其运动轨迹,从而使爆炸后的粒子组成五环烟花形状.
实验表明,粒子系统与纹理映射、色彩融合相结合的方法较传统的粒子方法实现的烟花形态更逼真且具有真正的三维效果、速度快、达到了实时性要求.
基于粒子系统的不规则物体模拟是计算机仿真中的一项复杂课题. 我们根据粒子系统的基本原理对烟花粒子系统和它的燃放原理进行了详细分析,实现了奥运五环烟花的模拟仿真. 下一步的研究工作:仿真北京奥运开幕式上的笑脸等烟花,并配上相应的音频系统. 为了达到最佳的真实感,在以后的工作中计划把礼花爆炸时天空的亮度及烟花燃放时所生成的烟雾考虑进去,从而形成一个更加真实完美的系统.
[1] 徐烈辉. 粒子系统基本理论及其应用[J]. 电脑与信息技术,17(3): 9-10, 39.
[2]FOURNIER A, REEVES W T. A simple model of ocean waves[J]. Computer Graphics, 1986, 20(4): 75-84.
[3] 朱军,林珲,徐丙立. 基于粒子系统的空气污染扩散模拟研究[J]. 高技术通讯,2009, 19(3): 308-313.
[4] 罗勇,文建国. 面向对象的通用粒子系统设计及其在火焰模拟中的应用[J]. 科学技术与工程,2008, 8(15):1 4174-4178.
[5] 陈利平,王国才. 基于粒子系统的蜡烛焰火实时模拟[J]. 计算机技术与发展,2006, 16(5): 186-188.
[6] 甘露,王文永,孙博. 基于粒子系统的烟花建模方法研究[J]. 长春师范学院学报:自然科学版,2008, 27(1): 1 63-66.
[7] 罗玉玲. 粒子系统与纹理映射相结合模拟礼花的研究[J]. 电脑知识与技术,2004, 20: 70-72.
[8] 李清畅,杨高波,王小静. 基于粒子系统的焰火建模及其算法仿真[J]. 系统仿真学报,2009, 21(8):12179-2184.
[9] 姚莉,肖健,刘平. 基于粒子系统的礼花模拟方法[J]. 东南大学学报,2010, 40(6): 1185-1189.
[10] 胡文平,汪继文. 基于粒子系统的三叶玫瑰动态烟花模拟[J]. 计算机工程,2010,36(22): 286-288.
Simulation of Olympic Rings Fireworks Based on the Particle System
LI Yin-di
(Computer Science School, Wuyi University, Jiangmen 529020, China)
Based on the principle of the particle system and setting off fireworks, an Olympic rings firework simulation is designed and implemented by adopting C++, OpenGL,texture-mapping and color blending technology, which can solve the time-consuming problem of simulating objects and improve the traditional simulation model for fireworks. The experimental results demonstrate that the proposed algorithm is simple, can generate good results in real time and achieve real 3-dimensional effects.
the particle system; texture mapping; color blending; 3-dimentional effect; Olympic rings fireworks
1006-7302(2012)01-0063-05
TP391.9
A
2011-09-26
广东省科技计划项目(2010B010600039);广东省自然科学基金资助项目(S2011010003681);五邑大学重点科研基金资助项目
李引弟(1985—),女,广西桂林人,在读硕士生,研究方向为虚拟现实、计算机图形学.