粒子系統的範圍和更新

在Ogre程序中,粒子系統可以利用代碼實現,但也可以利用腳本語言。不過,一般情況下,都是利用腳本語言。
在Ogre中只要將記事本的後綴名定義爲.particle,Ogre會自動識別其爲粒子腳本。
現在有人制作了一個ParticleEditor――粒子腳本編輯器,可以在以下地方進行下載
http://www.game-cat.com/ogre/pe/ParticleEditor_Beta.zip),
可以方便的在其界面中設置我們需要的粒子腳本,同時將其信息存取爲記事本的形式。

粒子系統中的發射器有幾個參數需要理解:
1.   angle
粒子發射器發射出的粒子的最大偏移角
2.   colour
設置所有發射出的粒子的固定顏色
3.   colour_range_start & colour_range_end
粒子顏色將爲這2中顏色值之間隨意的產生
4.   emission_rate
粒子發射器發射出的粒子數
5.   velocity
每次發射粒子的恆定速度
6.   time_to_live
每個粒子在銷燬之前存活的時間。不過,它可以利用參數repeat_delay復活
7.   duration
發射器發射的粒子處於激活狀態的數量
8.   repeat_delay
粒子銷燬到激活需要等待的時間數

在程序中加載一個粒子系統的步驟也很簡單,只需:
1.     創建一個粒子系統對象,如:
ParticleSystem*lightParticle= mSceneMgr->createParticleSystem("LightParticle", "myLight");
createParticleSystem函數中第一個變量爲粒子系統的名稱,有利於根據名稱查找到該粒子系統;第二個變量爲我們創建的粒子系統的腳本語言的名稱。
2.     創建一個節點,用於綁定剛纔創建好的粒子系統對象。
該節點可以根據自己的需要創建,也既是靈活的將粒子綁定在各個不同的節點上。如:
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(lightParticle)
 

粒子系統的範圍:

       粒子系統的動態性質意味着它的包圍盒需要頻繁和規律的重複計算。

       在Ogre默認的情況下每一幀都進行這種更新包圍盒大小的操作,而且在同樣的默認情況下,Ogre會在10秒鐘後停止這種更新操作,從而固定包圍盒的範圍。

       你可以通過ParticleSystem::setBoundsAutoUpdated()這個方法來手動控制這個時間。這個方法接受一個叫做stopin的參數,通過這個參數的值Ogre會在相應的秒數後面停止更新的操作。

       如果你已經知道這個粒子系統的影響範圍,你可以直接通過ParticleSystem::setBounds()方法來設置包圍盒。很明顯的,這種直接設置包圍盒的辦法一定比我們之前提到的那種讓包圍盒“自我生長” 的方法具有更高的效率。

============================================================================


粒子系統更新:

       當更新粒子系統的時候,Ogre採用了一種軟啓發(Mild Heuristics)的方式執行。

       在應用中,如果一個粒子退出了視截體的可視範圍,卻仍然不能停止運行,它將會一直更新直到再次出現在視野中。這樣做是必要的,因爲如果粒子系統在離開之後就停止了更新,這時候會讓再次出現在視野中的粒子系統顯得非常不協調。你可以想象一下,離開你視野的火苗,在一段時間之後重新看到卻仍然沒有任何蔓延開來的感覺。

       不過,在3D應用程序中由於效率的原因,一旦一個粒子系統離開視野一段時間之後,就需要停止更新。這樣就會產生上面一段所說的問題,即粒子系統被凍結。Ogre爲此提供了一種“快進”的機制來允許粒子系統在時間軸上前進一個數量,進而使粒子系統能夠正確的表現“當前”的狀態。這種特性也可以同來讓新建立的粒子系統能夠表現一段時間後的樣子。具體所調用的方法是ParticleSystem::fastForward()。
 

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章