2010-12-17 88 views
0

我想呈現具有淡出到外部的六邊形的粒子。我已經爲每個粒子使用了TRIANGLE_FAN。但是,透明度看起來不太好。在OpenGL中將粒子渲染爲具有透明度的GL_TRIANGLE_FANs

glBegin(GL_TRIANGLE_FAN); 
    glColor4f(c.x, c.y, c.z, particle.temperature/100.0); 
    glVertex3f(0, 0, 0); 
    glColor4f(0, 0, 0, 0); 
    glVertex3f(0.866025404 * H/2, 0.5 * H/2, 0); 
    glVertex3f(0, 1 * H/2, 0); 
    // other vertices omitted 
glEnd(); 

我得到被閃爍的輸出和其中黑色透明部件被繪製在不透明物體在一些幀。我該如何改變渲染例程以避免這些錯誤?

output

+2

你的混合設置是怎樣的? – Kos 2010-12-17 20:24:31

+0

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); – Etan 2010-12-17 21:09:21

+1

啊,我發現了一個同胞的Minecraft玩家(例如屏幕底部的Minecraft圖標):-) – Jonathan 2014-05-23 14:54:25

回答

3

您看到的是什麼人家後面顆粒不要糾纏,因爲更接近Z值出現在Z緩衝區。

  1. 您可以將粒子重新繪製到前面。

  2. 您也可以禁用深度測試,但標準的alpha混合將不正確。在ALPHA/ONE模式下,您將累積所有粒子,因此順序也不會很重要。