資源描述:
《粒子系統(tǒng)原理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、粒子系統(tǒng)原理粒子系統(tǒng)幾乎是每個(gè)引擎中比不可少的部分,它主要用來解決由大量按一定規(guī)則運(yùn)動(dòng)(變化)的微小物質(zhì)組成的大物質(zhì),在計(jì)算機(jī)上的生成與顯示的問題。經(jīng)常使用粒子系統(tǒng)模擬的現(xiàn)象有火、爆炸、煙、水流、火花、落葉、云、霧、雪、塵、流星尾跡或者象發(fā)光軌跡這樣的抽象視覺效果等等。如圖8-1,8-2他們都是由粒子系統(tǒng)來完成的。圖8-1SimplePhysicsParticles1.0中的截圖圖8-2由粒子系統(tǒng)完成的爆炸等效果通過上面的兩幅圖我們可以看出,其實(shí)粒子系統(tǒng)是一種特效發(fā)生器,它可以制造大量的小粒子來達(dá)到某種特殊的效果,比如煙霧、火焰或者爆炸。好的粒子效果甚至比渲染好的動(dòng)畫都出色,正因?yàn)槿?/p>
2、此,當(dāng)前幾乎所有的游戲中都使用了粒子系統(tǒng)。為了制造真實(shí)的粒子效果,粒子發(fā)生器必須在不影響幀率的情況下控制成千上萬的粒子運(yùn)動(dòng)。簡單的粒子系統(tǒng)只允許設(shè)置粒子的一些屬性,比如生存時(shí)間、重力或者顏色;復(fù)雜的粒子系統(tǒng)允許為每個(gè)粒子的運(yùn)動(dòng)函數(shù)編寫代碼。一些粒子系統(tǒng)也包含了光線生成器來創(chuàng)建光線或者軌跡。粒子系統(tǒng)基本原理粒子系統(tǒng)是采用大量的、具有一定生命和屬性的微小粒子圖元作為基本元素來描述不規(guī)則的模糊物體。在粒子系統(tǒng)中,每一個(gè)粒子圖元均具有:形狀、大小、顏色、透明度、運(yùn)動(dòng)速度和運(yùn)動(dòng)方向、生命周期等屬性。而一個(gè)粒子究竟有什么樣的屬性,主要取決于粒子系統(tǒng)用來模擬什么。粒子系統(tǒng)是動(dòng)態(tài)變化的,粒子系統(tǒng)的所
3、有屬性都是時(shí)間t的函數(shù),隨著時(shí)間的推移,系統(tǒng)中不斷有新粒子的加入,舊的粒子死亡,系統(tǒng)中“存活”的粒子其位置及生命值亦隨時(shí)間變化而變化。隨著虛擬世界時(shí)間的流逝,每個(gè)粒子都要在虛擬世界經(jīng)歷“產(chǎn)生”、“活動(dòng)”和“消亡”三個(gè)階段。一般而言,粒子系統(tǒng)的繪制基本可按照以下步驟進(jìn)行。①產(chǎn)生新的粒子加入系統(tǒng)中;②賦予每個(gè)粒子一定的屬性;③刪除超過生命值上限的粒子;④根據(jù)粒子屬性的動(dòng)態(tài)變化對(duì)粒子進(jìn)行移動(dòng)和變換;⑤繪制并顯示由有生命的粒子組成的圖形。其中第③、④、⑤步循環(huán)形成了物體的動(dòng)態(tài)變化過程。粒子系統(tǒng)的組成通過前面的學(xué)習(xí),我們知道了粒子系統(tǒng)中每一顆粒子他都具有自己的各種屬性,因此這每一顆粒子就是一個(gè)
4、粒子對(duì)象,所以我們的例子系統(tǒng)首先需要一個(gè)代表粒子的類Particle。由于我們每一種特效都需要很多粒子來實(shí)現(xiàn),這些粒子的運(yùn)動(dòng)方式以及發(fā)射的頻率都是我們能夠控制的,所以我們還需要一個(gè)用于控制粒子特效的類ParticleSystem。綜上所訴,粒子系統(tǒng)將由粒子(Particle)和發(fā)射器(ParticleSystem)組成。粒子(Particle)這里我們的粒子類Particle主要就用于表示粒子特效中的每一顆粒子,他將包括每一顆粒子的各種屬性,如代碼清單8-1是我們用于表示粒子對(duì)象的類Particle的實(shí)現(xiàn)。代碼清單8-1:Particleviewplaincopytoclipboar
5、dprint?1.//粒子類??2.public?class?Particle?{??3.????//位置??4.????YFSPoint?pos?=?YFSPoint.makeZero();??5.????//開始位置??6.????YFSPoint?startPos?=?YFSPoint.makeZero();??7.????//顏色??8.????YFSColor4F?color?=?new?YFSColor4F();??9.????//輔助顏色變化??10.????YFSColor4F?deltaColor?=?new?YFSColor4F();??11.????//尺寸和輔
6、助尺寸變化??12.????float?size;??13.????float?deltaSize;??14.????//自轉(zhuǎn)速度,輔助自轉(zhuǎn)速度??1.????float?rotation;??2.????float?deltaRotation;??3.????//生命周期??4.????float?timeToLive;??5.????//方向??6.????YFSPoint?direction?=?YFSPoint.makeZero();??7.????//徑向加速度,逃離發(fā)射原點(diǎn)的速度??8.????float?radialAccel;??9.????//切線加速度,圍繞發(fā)射原
7、點(diǎn)旋轉(zhuǎn)速度??10.????float?tangentialAccel;??11.????//弧度...??12.????float?radian;??13.????float?radianPerSecond;??14.????//半徑...??15.????float?radius;??16.????float?deltaRadius;??17.}??//粒子類publicclassParticle{//位置YFSPointpos=YFSPoint.ma