清源游民 gameogre@gmail.com
粒子系統(tǒng)
ogre中的粒子系統(tǒng)既可用腳本描述,也可用代碼完成。用粒子腳本定義的粒子系統(tǒng)實際上是個模板,因此它定義的粒子系統(tǒng)可在程序中方便地重用。
粒子系統(tǒng)與場景
粒子系統(tǒng)會被掛到場景結(jié)點上,因此,結(jié)點的平移,縮放,旋轉(zhuǎn)會關(guān)聯(lián)到粒子系統(tǒng),影響粒子反射的向。
粒子會被發(fā)射到世界空間中,這意味著當場景移動時,它會牽連到發(fā)射器,但已經(jīng)發(fā)射出去的粒子不受影響。假如需要這些粒子受結(jié)點的影響,可以把粒子發(fā)射到本地空間(local space)中。粒子系統(tǒng)不能無限制的發(fā)射粒子,它有一個限額(quota)。一旦到達限額,粒子系統(tǒng)不會再發(fā)射粒子,直到已經(jīng)存在的粒子消亡。缺省的限額是10。
粒子系統(tǒng)約束(Bounds)
粒子系統(tǒng)的動態(tài)特征意味著它們的綁定盒必須規(guī)律地被重新計算。缺省情況下,ogre會在10秒之后,停止
更新綁定盒。可以用ParticleSystem::setBoundsAutoUpdated(? bool? autoUpdate,? Real? stopIn = 0.0f )來改變?nèi)笔⌒袨椤topIn這個參數(shù)告訴ogre多長時間后停止更新。假如有個粒子系統(tǒng),可以知道它的增長不會超過某個范圍,可以事先用ParticleSystem::setBounds()設(shè)置綁定盒尺寸。這樣做效率很高,如果無法事先確定粒子系統(tǒng)的增長情況,可先用setBounds()設(shè)定一個初始尺寸,而用setBoundsAutoUpdated()讓它在一段時間之后更新。
粒子系統(tǒng)更新
對于粒子系統(tǒng)的更新,ogre采用適度啟發(fā)式的策略。舉例來說,當粒子系統(tǒng)不在視錐體之內(nèi),ogre仍會對粒子系統(tǒng)進行更新,這是考慮到不久之后,粒子系統(tǒng)有可能會重新進入視錐體之內(nèi)。這就避免了這種情況下的視覺上的不和諧。但是出于性能上的考慮,當粒子系統(tǒng)退出視錐體一段時間之后,粒子確實會停止更新。這又會碰到上面的問題:被凍結(jié)的粒子系統(tǒng)突然重新進入視錐體的情況。ogre提供了一個所謂的
"fast-forward"機制,允許粒子系統(tǒng)在被凍結(jié)之后,快速超越當前狀態(tài)。這種特性也可以用在剛創(chuàng)建的粒子系統(tǒng),使它們狀態(tài)提前一段時間,使用的方法是ParticleSystem::fastForward ();
粒子系統(tǒng)排序
可以指示ogre根據(jù)與相機之間的距離,對粒子進行排序。雖然這會影響性能,但有時不得不用。在煙的
例子中,不使用排序的結(jié)果是,從煙的頂部依然清晰地看到火苗,而使用了排序之后火苗被煙霧模糊掉了。顯然后者更加真實。
發(fā)射器
點發(fā)射器從空間中單一點發(fā)射粒子。box發(fā)射器可以從規(guī)則四方體的任何位置發(fā)射粒子。cylinder定義了一個圓柱體。ellipsoid定義了一個橢球體。hollow elipsoid只是橢球體的外殼。ring只出平面圓環(huán)的邊發(fā)射。被發(fā)射粒子的速度,方向也可以配置。粒子系統(tǒng)會被掛到場景結(jié)點上,因此發(fā)射器與父結(jié)點有一個相對的位置。粒子通常不會沿直線發(fā)射,它們在發(fā)射器方向的一個錐內(nèi)發(fā)射,有一個angle參數(shù)來定義。假如希望沿直線發(fā)射,angle應(yīng)該設(shè)為0,假如希望全方向發(fā)射,angle設(shè)為180, 90表示會在方向向量的半球內(nèi)隨機發(fā)射。
發(fā)射率用 粒子數(shù)/秒 表示。發(fā)射器可以按某個發(fā)射率發(fā)射,也可以使用一個范圍內(nèi)的隨機值。粒子可
以有固定的生命期,也可以從一個范圍隨機指定。顏色也一樣,固定值,隨機值都可以。也可以在運動時,以插件的形式提供定制發(fā)射器,這是擴展ogre粒子系統(tǒng)最簡單的方法。
影響器
粒子一旦被發(fā)射到世界中,影響器可被用來影響粒子的運動路徑與生命期。
LinearForce:加一個力到粒子上,力是一個向量,有方向與大小(模)。
ColourFader:用于改變粒子顏色。表示每秒減少的值,是一個絕對值。
ColorFader2:與ColourFader相似,但是粒子生命到到達其生命期的某個階段時,可以轉(zhuǎn)換到另一個褪色函數(shù)。
ColourInterpolator:與上面兩個相似,但是它最多可以有6個階段,分別對每個階段的時間與顏色進行定義,然后不同階段之間進行插值,這與關(guān)鍵幀動畫的思想有點像。
Scaler:用來縮放粒子尺寸,以時間為函數(shù)來定義一個縮放因子。
Rotator:通過一組隨機數(shù)量,或是隨機速率來旋轉(zhuǎn)粒子的紋理,這些被定義在某個范圍之內(nèi)。
colourImage:從圖像中攻取顏色,方向從左到右,適合一維紋理 。
FeedBack:
# re: 《Pro Ogre 3D Programming》讀書筆記 之 第十章 布告板與粒子 第二部分
只有注冊用戶登錄后才能發(fā)表評論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
![]() |
||
相關(guān)文章:
|
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 | 1 | 2 | 3 | 4 | 5 | 6 |
留言簿(35)
隨筆分類(78)
- Boost
- C++(14)
- DirectX
- gamebyro
- Lua(6)
- MFC(1)
- mmorpg
- OGRE(28)
- Python(2)
- Qt(23)
- ScaleForm
- Unreal Engine 3(1)
- Virtools(2)
- 雜記(1)
隨筆檔案(74)
- 2009年5月 (3)
- 2009年4月 (3)
- 2007年11月 (2)
- 2007年10月 (4)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年6月 (8)
- 2007年5月 (5)
- 2007年4月 (5)
- 2007年3月 (25)
- 2007年2月 (1)
- 2006年12月 (6)
- 2006年11月 (1)
- 2006年10月 (2)
文章檔案(5)
搜索
最新評論

- 1.?re: CString和string的互相轉(zhuǎn)換
- 沒必要這么復(fù)雜直接使用CStringA 定義字符串就可以了
- --焰
- 2.?re: CString和string的互相轉(zhuǎn)換
- 太給力了,這么簡單就解決了
- --張三
- 3.?re: CString和string的互相轉(zhuǎn)換[未登錄]
-
@King
在VS2008的Unicode編碼上不行 - --z
- 4.?re: Ogre3D嵌入Qt框架 之 小結(jié)
- 您好,最近在學(xué)習(xí)ogre,看到您這篇文章感覺寫的很好很強大,想學(xué)習(xí)學(xué)習(xí)。能把完整的源碼發(fā)一份嗎1124670369@qq.com。謝謝了
- --耿肖
- 5.?re: Ogre3D嵌入Qt框架 之 秀圖
- 您好,我是ogre初學(xué)者,請問能夠發(fā)一份完整的源碼嗎?我的郵箱是1124670369@qq.com
- --耿肖