李 哲, 蘇 瑩, 寧云隆
(裝甲兵技術學院電子工程系,吉林長春 130117)
計算機視景仿真是虛擬現(xiàn)實技術在實際應用中的熱門研究課題之一,其中,包括對煙花、雨雪、沙塵、浪花等動態(tài)自然景物的模擬與繪制,在氣象預報、航空航天、裝潢廣告等領域有著廣泛應用[1]。自然景物具有豐富的表面紋理和不規(guī)則的表面外形,并且能夠隨時間的推移而動態(tài)、隨機地發(fā)生變化,因此,很難使用傳統(tǒng)的計算機圖形學的建模方法來生成。如何逼真地模擬諸如煙花、雨雪、沙塵、浪花等不規(guī)則自然景物,成為計算機真實感圖形生成的關鍵技術。處理這類問題較好的辦法有Fournier的分形算法和Reeves的粒子系統(tǒng)方法[2],而粒子系統(tǒng)能夠充分體現(xiàn)自然景物的動態(tài)性和隨機性,其優(yōu)點在于使用簡單的粒子圖元來構造出傳統(tǒng)計算機圖形學難以構造的復雜物體,而且具有很強的真實感和實時性。
文中在經典粒子系統(tǒng)的基礎上對煙花進行建模,創(chuàng)建煙花粒子數(shù)據(jù)結構,動態(tài)地改變煙花粒子的運動狀態(tài),使煙花粒子的運動更加靈活,體現(xiàn)煙花不規(guī)則的表面形態(tài)與隨機的運動特征,并且使用紋理映射技術增強煙花繪制的真實感。
粒子系統(tǒng)是構建具有不規(guī)則形狀物體的經典算法,其主要思想是采用大量具有一定屬性的微小粒子圖元作為基本元素來繪制不規(guī)則的模糊物體[3]。在粒子系統(tǒng)中,粒子圖元的形狀可以是小球、立方體、正四面體或者其它形體;此外,系統(tǒng)中每個粒子還具有自身的屬性:大小、顏色、透明度、位置、運動速度和生命周期等[4]。粒子在系統(tǒng)中要經過“產生”、“運動”和“消亡”3個階段,期間粒子的各種屬性隨時間變化,從而體現(xiàn)出不規(guī)則物體運動的隨機性,其建模過程如圖1所示。
圖1 粒子系統(tǒng)建模過程
煙花粒子(Particle)定義為實數(shù)域上的一個n維向量,表示為:
粒子具有空間位置、大小尺寸、顏色、亮度、運動速度、加速度及生存期等屬性。
對于每個新產生的火焰粒子,系統(tǒng)都要賦予其一定的屬性,在不同的粒子系統(tǒng)中,粒子可以有不同的屬性,但主要包括空間位置屬性、外觀屬性、運動屬性、生存周期屬性等。
1.3.1 初始位置
初始位置反映了煙花粒子的分布及煙花的初始形狀,假定煙花燃點中心粒子密集、邊界稀疏,采用正態(tài)分布確定煙花的初始形狀[5]。又假設煙花的燃點中心坐標為P0={x0,y0,z0},爆炸區(qū)域半徑為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
粒子從產生到消亡的過程中,粒子顏色從初始顏色漸變成消亡顏色,體現(xiàn)了煙花顏色分布的物理特性。
1.3.3 初始速度
粒子的初始速度表示為粒子的平均速度與粒子速度變化范圍與隨機函數(shù)乘積的和。
假設粒子的平均速度為:
Speed0={Speedx0,Speedy0,Speedz0}速度變化范圍為:
VarSpeed={VarSpeedx,VarSpeedy,VarSpeedz}
則粒子的初始運動速度由下式確定:
1.3.4 生命周期
粒子的生存屬性即生存周期指的是粒子在系統(tǒng)的模擬過程中存在時間的長短,描述時間的單位可以是顯示幀數(shù)或者系統(tǒng)的時鐘周期。使用顯示幀數(shù)描述粒子生命周期實現(xiàn)起來相對容易,如在第T幀某個粒子的生命周期表示為:
式中:InitialLifetime——粒子的初始生命周期;
Attenuationperframe——每幀粒子生命衰減率。
煙花燃放的形狀有許多種,對不同的形狀粒子將有不同的屬性。文中設計研究了最基本的模型,其它許多類型的煙花可以由它們合成。
2.1.1 煙花運動分析
煙花的本質是化學物質點燃后發(fā)生的爆炸現(xiàn)象,以熱力學原理為基礎可以對物質運動進行受力分析[4],煙花粒子的運動微分方程比較復雜,為了簡化求解,根據(jù)物理動力學等相關知識可得第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,但是,粒子的運動超出了預定或顯示范圍,粒子也會自動消亡。
float m_fAlpha;//煙花粒子的透明度
float m_fLifetime;//煙花粒子的生存期
float m_fSize;//煙花粒子的大小
COLORVECTOR m_vColor;//煙花粒子的顏色
POINTVECTOR m_vLocation;//煙花粒子的空間位置
POINTVECTOR m_vVelocity;//煙花粒子的速度
……}煙花粒子類
為了滿足模擬煙花爆炸現(xiàn)象的實時性和真實性,文中采用紋理映射技術,為煙花粒子貼上簡單的紋理圖片。紋理是一個數(shù)組,其中的數(shù)據(jù)為顏色和輝度或者顏色和alpha值,紋理數(shù)組中的值通常稱為紋素(texel)[7]。通過創(chuàng)建紋理數(shù)組來定義不同的紋理,用戶選擇不同的紋理來產生不同的煙花爆炸效果。
2.3.1 紋理載入
在系統(tǒng)初始化時調用函數(shù)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],這樣代替純色的點光源從而大大減少了整個系統(tǒng)中所需的粒子數(shù),從而加快了系統(tǒng)的運行速度,并且在繪制煙花的真實感方面也取得較好的效果。
上述算法是在PC機(CPU:酷睿2.4 GHz,內存:1 GB,NVIDIA GeForce 6600顯卡),軟件環(huán)境為Window sXP操作系統(tǒng),基于Microsoft Visual C++6.0與OpenGL圖形開發(fā)庫編程實現(xiàn)。
系統(tǒng)實時繪制效果如圖2所示。
圖2 紋理映射前后不同繪制效果
以經典粒子系統(tǒng)理論為基礎,構建了煙花粒子模型,對煙花爆炸的整個過程進行了仿真,基本實現(xiàn)了逼真的視覺效果,但為了更好地模擬動態(tài)自然景象,增強系統(tǒng)的實時性與繪制的真實感,是今后需要努力的研究方向。
[1] 傅瑩.虛擬現(xiàn)實技術的應用方法研究[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] 朱詩孝.粒子系統(tǒng)及其在自然現(xiàn)象模擬中的應用[J].教育技術導刊,2009,12(6):105-106.
[4] 王曉娟,基于粒子系統(tǒng)動態(tài)煙花的模擬[J].青海大學學報:自然科學版,2009,27(4):29-32.
[5] 韓文君,趙偉.基于隨機場的碰撞檢測控制算法[J].長春工業(yè)大學學報:自然科學版,2008,29(2):152-158.
[6] 楊子華,劉宏芳.基于粒子系統(tǒng)模型的自然景物生成技術應用研究[J].計算技術與自動化,1998,17(3):20-23.
[7] Dave Shreiner,Mason Woo,Jackie Neider.OpenGL編程指南[M].鄧鄭祥,譯.北京:人民郵電出版社,2005.
[8] 陳志偉,馬小虎.基于粒子系統(tǒng)和紋理繪制的火焰模擬[J].計算機工程與科學,2010,32(1):71-73.