李引弟
?
基于粒子系統(tǒng)的奧運(yùn)五環(huán)煙花模擬
李引弟
(五邑大學(xué) 計(jì)算機(jī)學(xué)院,廣東 江門 529020)
以粒子系統(tǒng)理論和煙花燃放原理為基礎(chǔ),采用VC++和OpenGL作為開發(fā)工具并結(jié)合紋理映射和色彩融合技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了對(duì)奧運(yùn)五環(huán)煙花的模擬,解決了模擬模糊物體計(jì)算不能很好達(dá)到實(shí)時(shí)性的問(wèn)題,并對(duì)傳統(tǒng)的煙花仿真模型進(jìn)行了改進(jìn). 實(shí)驗(yàn)結(jié)果表明所構(gòu)建的煙花模擬系統(tǒng)實(shí)現(xiàn)簡(jiǎn)單,實(shí)時(shí)性好,并具有真實(shí)的三維效果.
粒子系統(tǒng);紋理映射;色彩融合;三維效果;奧運(yùn)五環(huán)煙花
粒子系統(tǒng)將景物定義為大量隨機(jī)分布的粒子集合,并通過(guò)簡(jiǎn)單圖元表示景物的整體形態(tài)、特征以及動(dòng)態(tài)變化,以充分體現(xiàn)不規(guī)則模糊物體的動(dòng)態(tài)和隨機(jī)性[1]. 粒子系統(tǒng)可以模擬許多自然現(xiàn)象和景物[2-4]. 其中,模擬煙花已有一系列的研究成果,如,陳利平[5]、甘露[6]等通過(guò)深入研究煙花燃放過(guò)程的特點(diǎn),給出了不同狀態(tài)下的煙花的具體算法,但用這種方法模擬的煙花,煙花粒子數(shù)目的多少很大程度上影響了模擬效果的實(shí)時(shí)性和逼真性;羅玉玲[7]給出了一種基于粒子系統(tǒng)與紋理映射結(jié)合的煙花動(dòng)態(tài)模型,模擬出的煙花動(dòng)態(tài)視覺(jué)效果較為真實(shí);李清暢等[8]將粒子系統(tǒng)與BillBoarding技術(shù)相結(jié)合,取得了逼真的煙花模擬燃放效果. 通過(guò)深入研究上述方法的優(yōu)缺點(diǎn),本文以粒子系統(tǒng)和煙花燃放的基本原理為基礎(chǔ),以VC++和OpenGL為開發(fā)工具并結(jié)合紋理映射和圖像融合技術(shù),對(duì)五環(huán)煙花燃放的全過(guò)程進(jìn)行了仿真.
在忽略風(fēng)力、空氣阻力作用下,五環(huán)煙花的形式分為4個(gè)階段:1)煙花從地面的某點(diǎn)生成,2)煙花爆炸,3)粒子爆炸后上升,4)粒子在空中形成五環(huán). 令重力方向?yàn)檩S,軸為水平方向,軸垂直平面,此動(dòng)畫的視角為仰視,仰視角為30°.
煙花系統(tǒng)的數(shù)據(jù)比較簡(jiǎn)單,其數(shù)據(jù)結(jié)構(gòu)如下:
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;};
煙花粒子在水平面上方的一定高度產(chǎn)生,在定義了粒子的數(shù)據(jù)結(jié)構(gòu)后,需要對(duì)粒子進(jìn)行初始化,具體如下:
// 初始位置 // 初始速度 // 初始加速度
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;
空中出現(xiàn)五環(huán)煙花之前的圖案,如圖1所示,此時(shí)粒子的各屬性模型如下:
// 粒子位置更新 // 粒子速度更新 // 五環(huán)出現(xiàn)前粒子顏色
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為煙花粒子運(yùn)動(dòng)速度的控制因子.
粒子上升到空中一定高度以后,生命衰減到一定的值時(shí),其顏色和亮度發(fā)生改變,五環(huán)圖案開始靠近并套在一起,如圖2所示. 此時(shí),其屬性描述如下:
// 粒子顏色 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 五環(huán)出現(xiàn)前的圖案
圖2 空中出現(xiàn)五環(huán)的圖案
使用數(shù)學(xué)方程對(duì)粒子的運(yùn)動(dòng)軌跡加以控制,采用紋理映射技術(shù)以提高系統(tǒng)的實(shí)時(shí)性,采用色彩融合技術(shù)以增強(qiáng)五環(huán)動(dòng)態(tài)煙花的逼真性.
煙花從地面的某一點(diǎn)生成并向上(軸方向)作減速運(yùn)動(dòng),在、軸方向速度為0. 當(dāng)方向速度為0時(shí)煙花爆炸生成小煙花,此時(shí)給煙花平面上的速度rad賦初值,并將其分解到、方向上(與坐標(biāo)軸的夾角根據(jù)下標(biāo)確定),軸的加速度不變直至小煙花運(yùn)動(dòng)軌跡為拋物線. 爆炸后煙花小粒子的運(yùn)動(dòng)軌跡方程為:
其中,rad為粒子在平面上的速度,為粒子在方向上繞軸旋轉(zhuǎn)形成的角度,speed為粒子在軸上的速度,為粒子的重力加速度,為粒子的運(yùn)動(dòng)時(shí)間.
OpenGL是個(gè)專業(yè)的圖形程序接口,是一個(gè)功能強(qiáng)大、調(diào)用方便的底層形庫(kù),它具有7大功能,并能實(shí)現(xiàn)深度暗示、運(yùn)動(dòng)模糊、混合、透明等特殊的效果.
2.2.1 紋理映射技術(shù)
能夠模擬物體表面顏色細(xì)節(jié)或幾何細(xì)節(jié)的計(jì)算機(jī)圖形學(xué)技術(shù)稱為紋理映射技術(shù),利用OpenGL紋理映射功能可以十分逼真地表達(dá)物體的表面細(xì)節(jié). 紋理映射的基本步驟:定義紋理→濾波→指定映射方式→繪制場(chǎng)景. 本文對(duì)紋理映射的實(shí)現(xiàn)過(guò)程如下:
//定義紋理
glTexImage2D(GL_TEXTURE_2D, 0, , info->bmiHeader. biWidth, info->bmiHeader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba);
//紋理過(guò)濾
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);
//繪制場(chǎng)景
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();
和傳統(tǒng)仿真煙花的方法相比,紋理映射技術(shù)可以在不增加場(chǎng)景繪制復(fù)雜度、不顯著增加計(jì)算量的前提下,大幅提高煙花模擬的真實(shí)感.
2.2.2 色彩融合技術(shù)
色彩融合的基本原理就是先將待分色的圖像各像素的顏色以及背景顏色按照RGB規(guī)則分離,再根據(jù): 圖像的RGB顏色分量*alpha值+背景的RGB顏色分量*(1-alpha值)進(jìn)行融合,最后將融合得到的RGB分量重新合并. 合并后產(chǎn)生的新顏色為
為了方便顏色混合,我們采用RGBA顏色模式,按照式(2)計(jì)算煙花粒子中2個(gè)像素的混色結(jié)果. 當(dāng)顏色的某一分量超過(guò)了1.0它會(huì)被自動(dòng)截取為1.0,所以不需要考慮越界的問(wèn)題.
文獻(xiàn)[9-10]對(duì)有形煙花的仿真建立在某種固定的數(shù)學(xué)模型上,而沒(méi)有固定數(shù)學(xué)模型的有形煙花的仿真則較難實(shí)現(xiàn). 本文利用粒子系統(tǒng)仿真的五環(huán)煙花是沒(méi)有固定數(shù)學(xué)模型的,且據(jù)我們所查文獻(xiàn)資料,還沒(méi)有人實(shí)現(xiàn)過(guò). 我們?cè)趭W運(yùn)五環(huán)煙花生成的過(guò)程中結(jié)合OpenGL的紋理映射、色彩融合等技術(shù)以保證五環(huán)煙花仿真的逼真性,同時(shí)對(duì)某組煙花粒子的屬性不斷進(jìn)行更新,控制其運(yùn)動(dòng)軌跡,從而使爆炸后的粒子組成五環(huán)煙花形狀.
實(shí)驗(yàn)表明,粒子系統(tǒng)與紋理映射、色彩融合相結(jié)合的方法較傳統(tǒng)的粒子方法實(shí)現(xiàn)的煙花形態(tài)更逼真且具有真正的三維效果、速度快、達(dá)到了實(shí)時(shí)性要求.
基于粒子系統(tǒng)的不規(guī)則物體模擬是計(jì)算機(jī)仿真中的一項(xiàng)復(fù)雜課題. 我們根據(jù)粒子系統(tǒng)的基本原理對(duì)煙花粒子系統(tǒng)和它的燃放原理進(jìn)行了詳細(xì)分析,實(shí)現(xiàn)了奧運(yùn)五環(huán)煙花的模擬仿真. 下一步的研究工作:仿真北京奧運(yùn)開幕式上的笑臉等煙花,并配上相應(yīng)的音頻系統(tǒng). 為了達(dá)到最佳的真實(shí)感,在以后的工作中計(jì)劃把禮花爆炸時(shí)天空的亮度及煙花燃放時(shí)所生成的煙霧考慮進(jìn)去,從而形成一個(gè)更加真實(shí)完美的系統(tǒng).
[1] 徐烈輝. 粒子系統(tǒng)基本理論及其應(yīng)用[J]. 電腦與信息技術(shù),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] 朱軍,林琿,徐丙立. 基于粒子系統(tǒng)的空氣污染擴(kuò)散模擬研究[J]. 高技術(shù)通訊,2009, 19(3): 308-313.
[4] 羅勇,文建國(guó). 面向?qū)ο蟮耐ㄓ昧W酉到y(tǒng)設(shè)計(jì)及其在火焰模擬中的應(yīng)用[J]. 科學(xué)技術(shù)與工程,2008, 8(15):1 4174-4178.
[5] 陳利平,王國(guó)才. 基于粒子系統(tǒng)的蠟燭焰火實(shí)時(shí)模擬[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2006, 16(5): 186-188.
[6] 甘露,王文永,孫博. 基于粒子系統(tǒng)的煙花建模方法研究[J]. 長(zhǎng)春師范學(xué)院學(xué)報(bào):自然科學(xué)版,2008, 27(1): 1 63-66.
[7] 羅玉玲. 粒子系統(tǒng)與紋理映射相結(jié)合模擬禮花的研究[J]. 電腦知識(shí)與技術(shù),2004, 20: 70-72.
[8] 李清暢,楊高波,王小靜. 基于粒子系統(tǒng)的焰火建模及其算法仿真[J]. 系統(tǒng)仿真學(xué)報(bào),2009, 21(8):12179-2184.
[9] 姚莉,肖健,劉平. 基于粒子系統(tǒng)的禮花模擬方法[J]. 東南大學(xué)學(xué)報(bào),2010, 40(6): 1185-1189.
[10] 胡文平,汪繼文. 基于粒子系統(tǒng)的三葉玫瑰動(dòng)態(tài)煙花模擬[J]. 計(jì)算機(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
廣東省科技計(jì)劃項(xiàng)目(2010B010600039);廣東省自然科學(xué)基金資助項(xiàng)目(S2011010003681);五邑大學(xué)重點(diǎn)科研基金資助項(xiàng)目
李引弟(1985—),女,廣西桂林人,在讀碩士生,研究方向?yàn)樘摂M現(xiàn)實(shí)、計(jì)算機(jī)圖形學(xué).