清源游民
gameogre@gmail.com粒子系統(tǒng)
ogre中的粒子系統(tǒng)既可用腳本描述,也可用代碼完成。用粒子腳本定義的粒子系統(tǒng)實(shí)際上是個(gè)模板,因此它定義的粒子系統(tǒng)可在程序中方便地重用。
粒子系統(tǒng)與場(chǎng)景粒子系統(tǒng)會(huì)被掛到場(chǎng)景結(jié)點(diǎn)上,因此,結(jié)點(diǎn)的平移,縮放,旋轉(zhuǎn)會(huì)關(guān)聯(lián)到粒子系統(tǒng),影響粒子反射的向。
粒子會(huì)被發(fā)射到世界空間中,這意味著當(dāng)場(chǎng)景移動(dòng)時(shí),它會(huì)牽連到發(fā)射器,但已經(jīng)發(fā)射出去的粒子不受影響。假如需要這些粒子受結(jié)點(diǎn)的影響,可以把粒子發(fā)射到本地空間(local space)中。粒子系統(tǒng)不能無限制的發(fā)射粒子,它有一個(gè)限額(quota)。一旦到達(dá)限額,粒子系統(tǒng)不會(huì)再發(fā)射粒子,直到已經(jīng)存在的粒子消亡。缺省的限額是10。
粒子系統(tǒng)約束(Bounds)粒子系統(tǒng)的動(dòng)態(tài)特征意味著它們的綁定盒必須規(guī)律地被重新計(jì)算。缺省情況下,ogre會(huì)在10秒之后,停止
更新綁定盒。可以用ParticleSystem::setBoundsAutoUpdated(? bool? autoUpdate,? Real? stopIn = 0.0f )來改變?nèi)笔⌒袨椤topIn這個(gè)參數(shù)告訴ogre多長(zhǎng)時(shí)間后停止更新。假如有個(gè)粒子系統(tǒng),可以知道它的增長(zhǎng)不會(huì)超過某個(gè)范圍,可以事先用ParticleSystem::setBounds()設(shè)置綁定盒尺寸。這樣做效率很高,如果無法事先確定粒子系統(tǒng)的增長(zhǎng)情況,可先用setBounds()設(shè)定一個(gè)初始尺寸,而用setBoundsAutoUpdated()讓它在一段時(shí)間之后更新。
粒子系統(tǒng)更新
對(duì)于粒子系統(tǒng)的更新,ogre采用適度啟發(fā)式的策略。舉例來說,當(dāng)粒子系統(tǒng)不在視錐體之內(nèi),ogre仍會(huì)對(duì)粒子系統(tǒng)進(jìn)行更新,這是考慮到不久之后,粒子系統(tǒng)有可能會(huì)重新進(jìn)入視錐體之內(nèi)。這就避免了這種情況下的視覺上的不和諧。但是出于性能上的考慮,當(dāng)粒子系統(tǒng)退出視錐體一段時(shí)間之后,粒子確實(shí)會(huì)停止更新。這又會(huì)碰到上面的問題:被凍結(jié)的粒子系統(tǒng)突然重新進(jìn)入視錐體的情況。ogre提供了一個(gè)所謂的
"fast-forward"機(jī)制,允許粒子系統(tǒng)在被凍結(jié)之后,快速超越當(dāng)前狀態(tài)。這種特性也可以用在剛創(chuàng)建的粒子系統(tǒng),使它們狀態(tài)提前一段時(shí)間,使用的方法是ParticleSystem::fastForward ();
粒子系統(tǒng)排序
可以指示ogre根據(jù)與相機(jī)之間的距離,對(duì)粒子進(jìn)行排序。雖然這會(huì)影響性能,但有時(shí)不得不用。在煙的
例子中,不使用排序的結(jié)果是,從煙的頂部依然清晰地看到火苗,而使用了排序之后火苗被煙霧模糊掉了。顯然后者更加真實(shí)。
發(fā)射器
點(diǎn)發(fā)射器從空間中單一點(diǎn)發(fā)射粒子。box發(fā)射器可以從規(guī)則四方體的任何位置發(fā)射粒子。cylinder定義了一個(gè)圓柱體。ellipsoid定義了一個(gè)橢球體。hollow elipsoid只是橢球體的外殼。ring只出平面圓環(huán)的邊發(fā)射。被發(fā)射粒子的速度,方向也可以配置。粒子系統(tǒng)會(huì)被掛到場(chǎng)景結(jié)點(diǎn)上,因此發(fā)射器與父結(jié)點(diǎn)有一個(gè)相對(duì)的位置。粒子通常不會(huì)沿直線發(fā)射,它們?cè)诎l(fā)射器方向的一個(gè)錐內(nèi)發(fā)射,有一個(gè)angle參數(shù)來定義。假如希望沿直線發(fā)射,angle應(yīng)該設(shè)為0,假如希望全方向發(fā)射,angle設(shè)為180, 90表示會(huì)在方向向量的半球內(nèi)隨機(jī)發(fā)射。
發(fā)射率用 粒子數(shù)/秒 表示。發(fā)射器可以按某個(gè)發(fā)射率發(fā)射,也可以使用一個(gè)范圍內(nèi)的隨機(jī)值。粒子可
以有固定的生命期,也可以從一個(gè)范圍隨機(jī)指定。顏色也一樣,固定值,隨機(jī)值都可以。也可以在運(yùn)動(dòng)時(shí),以插件的形式提供定制發(fā)射器,這是擴(kuò)展ogre粒子系統(tǒng)最簡(jiǎn)單的方法。
影響器
粒子一旦被發(fā)射到世界中,影響器可被用來影響粒子的運(yùn)動(dòng)路徑與生命期。
LinearForce:加一個(gè)力到粒子上,力是一個(gè)向量,有方向與大小(模)。
ColourFader:用于改變粒子顏色。表示每秒減少的值,是一個(gè)絕對(duì)值。
ColorFader2:與ColourFader相似,但是粒子生命到到達(dá)其生命期的某個(gè)階段時(shí),可以轉(zhuǎn)換到另一個(gè)褪色函數(shù)。
ColourInterpolator:與上面兩個(gè)相似,但是它最多可以有6個(gè)階段,分別對(duì)每個(gè)階段的時(shí)間與顏色進(jìn)行定義,然后不同階段之間進(jìn)行插值,這與關(guān)鍵幀動(dòng)畫的思想有點(diǎn)像。
Scaler:用來縮放粒子尺寸,以時(shí)間為函數(shù)來定義一個(gè)縮放因子。
Rotator:通過一組隨機(jī)數(shù)量,或是隨機(jī)速率來旋轉(zhuǎn)粒子的紋理,這些被定義在某個(gè)范圍之內(nèi)。
colourImage:從圖像中攻取顏色,方向從左到右,適合一維紋理 。
posted on 2007-03-20 18:04
清源游民 閱讀(2046)
評(píng)論(2) 編輯 收藏 引用 所屬分類:
OGRE