2010-12-15 98 views
5

我想基於粒子模擬渲染OpenGL中的火焰效果。我有數百個具有位置和溫度(以及顏色)的粒子以及所有其他屬性。使用過剩只是簡單地渲染solidSphere看起來不太現實,因爲這些粒子散佈得太寬。如何根據粒子信息繪製火焰?在OpenGL中渲染火

+0

聽起來像你需要內插,或找到一些方法,爲你做到這一點? – ccook 2010-12-15 13:10:47

+0

是的,我正在尋找一種方法在openGL中進行插值,因爲我還不是很熟悉它。某種固體動力學模型可能......透明度對於在邊緣上進行逼真的火焰也很重要 – Etan 2010-12-15 13:16:14

回答

5

如果你只是想創造一種逼真的火焰效果,我會用某種在其他答案中推薦的重新存在的圖書館。但在我看來,你是在模擬顯示之後。

一個值得嘗試的直接解決方案可能是用廣告牌(即總是朝向相機的圖形圖像)替換當前的球體,它們在中間呈現純白色,並且向邊緣逐漸變淡 - 顯然根據圖像對圖像進行定位和着色到你的粒子。

我覺得一個更好的解決方案是將火焰作爲一組二維網格,在其上可以控制網格上每個頂點的透明度和顏色。人們可以在OpenGL中通過從四邊形構建一個平面並使用您的粒子系統來計算(通過從您擁有的最近粒子插值)每個頂點的顏色和透明度。 OpenGL將爲您插入頂點之間的每個像素,併爲您提供平滑的「區域中的平均粒子」圖片。

+0

好!後者可以作爲程序紋理來實現,對嗎?嗯...不,這沒有意義 - 每個片段着色器實例可能有太多的事情要做。所以我們需要在渲染任何火之前每幀創建一次紋理。 – Kos 2010-12-15 14:25:42

+0

謝謝。你能否添加關於這些2D網格的更多信息? – Etan 2010-12-15 15:02:06

+0

如果我們確切地知道你想要達到的目標,它確實會有所幫助:你是試圖實時繪製模擬還是隻渲染特定的靜止圖像?你想要它忠實地代表模擬還是應該看起來好看? – Elemental 2010-12-16 10:15:28