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