2010-12-17 56 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模式下,您将累积所有粒子,因此顺序也不会很重要。