粒子系統的範圍和更新

2021-05-21 23:27:26 字數 1660 閱讀 5400

粒子系統中的發射器有幾個引數需要理解:

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()。

CCParticleSystem粒子系統

第一次接觸粒子系統,以前遊戲裡面的一些小特效,像製作動畫一樣,是採用一幀一幀的切出來的,由於這種特效,變化無常,切出來的幀,都非常的大,也很耗記憶體,一下就記憶體溢位了.呵呵 主要是以前都沒有接觸過.現在接觸了,以後遊戲就可以用到了.開心 建立乙個ccparticlesystem粒子系統 ccpar...

Unity粒子系統

首次接觸unity的粒子系統,內容太多,搞得都不好寫筆記,所以就記錄下unity的粒子系統做出來的東西以及經常用的一些引數。火焰效果製作 這個相對簡單 建立粒子系統物件 1 調duration 1 開啟loop start size 1 start lifetime 1 start speed 1 ...

Unity粒子系統

rateoverdistance 隨著移動距離產生的粒子數量。只有當粒子系統移動時,才發射粒子。bursts sprite 通過相同尺寸的sprite實現粒子動畫。tiles 網格的行列數。animation startframe 開始的幀是哪一幀。flipu 翻轉u。flipv 翻轉v。enabl...