劉韜
【摘 要】虛擬場景中的自然景物模擬已經成為計算機圖形學的一個研究熱點。使用粒子系統能夠相對充分地體現自然景觀中模糊物體的隨機性和動態性,得到良好的模擬效果。本文結合實際情況,在深入分析粒子系統理論基礎上,結合Windows XP和Microsoft VC++6.0編譯環境為開發平臺,基于OpenGL圖形庫設計并實現了一個用于常見自然景物模擬的3D粒子特效系統,完成了噴泉的模擬。
【關鍵詞】粒子系統;噴泉;OpenGL
【Abstract】Nature sceneries simulation in virtual scene has been research highlight of Computer Graphics. The particle system can sufficiently reflect the dynamicity and randomness of the fuzzy objects which can simulate these complex three-dimensional nature sceneries.So,the thesis developed a three-dimensional particle special effects system for usual nature sceneries simulation.Which used Windows XP and Microsoft VC++6.0 compiler environment respectively as development platform,OpenGL as its graphics library,and particle system theory as its theoretical basis.It finished the simulatons of nature sceneries fountains.
【Key words】Particle system; Spraying fountains; OpenGL
0 引言
本文重點研究了OpenGL 三維圖形開發一些關鍵技術的實現方法與步驟。通過OpenGL 與VC++6.0 編程開發實現了三維噴泉場景模型的一個實例,在實例中綜合運用燈光、材質及紋理效果構造了一個逼真的三維噴泉場景模型場景,并實現了一些常用的交互操作功能。
1 噴泉粒子的屬性具體分析
下面,將結合噴泉模型來介紹噴泉粒子的各個屬性:
(1)噴泉粒子的空間位置屬性
噴泉粒子系統中所模擬的噴泉具有特定的位置,并非要布滿整個可視區域。日常生活中我們所看見的噴泉通常都是往上噴出,并以拋物線的形式噴射。因此,噴泉所噴射出的每一顆粒子都是相對均勻的分布在一個圓柱體的內。噴泉的噴頭一開始噴射出來的是豎直向上的水柱,因此需要通過相應的算法在VC++6.0平臺上利用OpenGL的代碼 將噴泉粒子初始化,并且分布設定的圓柱體內,為了使粒子產生的位置看起來是從同一個一個中心點噴出的,設定的圓柱體的軸心必須與顯示空間的y軸平行。噴泉粒子分布如圖1所示。
(2)噴泉粒子的運動屬性
噴泉的水柱通常是從噴頭里面垂直向上的噴出來的,但是每一顆粒子在虛擬系統里面又是需要配置相應的重力屬性,這要它才能夠像現實中的水粒子,受到重力的作用,落到地面。每顆粒子從噴頭噴射出都做自由落體運動,直到降落到水池中完成循環。每顆粒子的初始化后的速度為:
公式中的R和r分別為噴泉粒子系統設定的圓柱體的半徑和每顆噴泉粒子到圓柱體中心軸的距離,θ為散射角,如圖2所示。
是變化不確定的速度,由相應的算法通過代碼的確定的速度與方向。
(3)噴泉粒子的生存屬性
噴泉的粒子也是存在生存屬性的,可以通過循環的算法來控制粒子的生存屬性,例如噴泉粒子在粒子系統中正常的運動,隨著時間的推移,粒子的生命周期到期時就自然消亡,并且系統自動刪除死亡粒子;還有就是粒子的運動范圍超出了噴泉粒子系統所設定的圓柱體的范圍,則粒子就自然消亡,系統自動刪除死亡粒子。
2 噴泉粒子的運動軌跡分析
噴泉粒子在噴泉粒子系統中運動的力學分析,每顆粒子就如同現實中一樣,在垂直方向是受到地球引力和空氣阻力的合力,次合力的方向向下,而在水平方向可以通過風力來影響每顆粒子的運動方向。可以根據風力的隨機性,在x軸方向和z軸方向上進行力學分解,然后通過算法和代碼來實現系統中風力的不確定性。
為了準確的描述噴泉粒子運動可以通過以下公式的解釋:
每顆粒子速度的方向由P和Y表示,V是每顆粒子的最初速度,R則是[0,1]之間的任意值,Var是每顆粒子速度的變化范圍,Rand(Var)是取[-Var.Var]內的任意速度值,分別是每顆粒子的初速度的方向與X,Y,Z軸之間的夾角,θ是每顆粒子所散射的角度,Rand 取 內的任意角度。
通過對每顆粒子的力學分析,粒子所受合力是由地球引力G、空氣阻力f以及風力w的合力,在合力的作用下,每顆粒子的位置和速度都在隨機的,在t1+t2這段時間內每顆粒子的速度v(vx,vy,vz)和空間位置p(px,py,pz)分別表示為:
式中,v(vx,vy,vz)表示t時刻噴泉粒子的速度;p(px,py,pz)表示t時刻噴泉粒子的位置,WinV表示風力的速度,α表示水平方向上風向的角度,f表示空氣的浮力,Rand(θ)是隨機函數,表示風速干擾量。
3 噴泉粒子系統實現的工作流程圖(圖3)
4 結論
本文是基于OpenGL的噴泉粒子系統設計與實現,使用戶在客戶端(vc++ 6.0工具)就能實現噴泉粒子系統的查看、以及對噴泉粒子系統的相關控制。在研究本設計過程中,需求階段,本文主要分析本系統所面向的用戶,從用戶的角度去分析功能。在完成了基本的功能設計同時,成功之處總結如下:
(1)通過在VC++6.0平臺上,利用OpenGL相關的函數,對噴泉粒子系統的場景的繪制,包括,地面,以及水池臺的繪制。
(2)通過在VC++6.0平臺上,利用OpenGL相關的函數,成功實現了,對噴泉粒子的初始化的渲染。通過創建一個攝像機模塊,實現了用戶可以在噴泉粒子系統的場景漫游,從多角度觀看噴泉外形。
【參考文獻】
[1]齊治昌,譚慶平,寧洪.軟件工程[M].高等教育出版社,2006,4.
[2]Scott Meyers.Effective C++[M].華中科技大學出版社,2001,9.
[3]張芹,謝雋毅,吳慧中,等.火焰、煙、云等不規則物體的建模方法研究綜述[M].電子工業出版社,2000,5.
[4]馬駿,朱衡君.基于動態紋理和粒子系統的噴泉模擬[M].北京交通大學出版社,2005,2.
[5]Samuel R. Buss.3D計算機圖形學(OpenGL版)[M].清華大學出版社,2006,10.
[6]郭兆榮,李菁,王彥.[Visual C++ OpenGL]應用程序開發[M].人民郵電出版社,2006,6.
[7]秦培煜,陳傳波,等.基于物理模型的水波動畫[M].電子工業出版社,2000,6.
[責任編輯:楊玉潔]