在OpenGL中将粒子渲染为具有透明度的GL_TRIANGLE_FAN

时间:2010-12-17 20:22:57

标签: c++ opengl graphics transparency alpha

我想渲染具有淡出到外面的六边形的粒子。我为每个粒子使用了TRIANGLE_FAN。但是,透明度看起来不太好。

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

1 个答案:

答案 0 :(得分:3)

您正在观察的是其他不会被绘制的粒子,因为Z缓冲区中存在更接近的Z值。

  1. 您可以将粒子拉回到前面。

  2. 您也可以禁用深度测试,但标准Alpha混合将不正确。使用ALPHA / ONE模式,您将积累所有粒子,因此顺序也不重要。