0

当我绘制具有透明纹理的平面时(例如房子的窗户),我会看到不应该出现的线条或三角形。我怎样才能解决这个问题?

三角形
(来源:巨魔.ws

这是我用来绘制一个窗口的方法。我暂时启用混合以使窗口透明。

 static void drawWindow(int startX, int startY, int endX, int endY) {

    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    Textures.window.bind();
    glPushMatrix();
    glTranslatef(startX, startY, 0);

    glBegin(GL_QUADS);
    glTexCoord2d(1, 1);
    glVertex3d(0, 0, 0);
    glTexCoord2d(0, 1);
    glVertex3d(endX - startX, endY - startY, 0);
    glTexCoord2d(0, 0);
    glVertex3d(endX - startX, endY - startY, 200);
    glTexCoord2d(1, 0);
    glVertex3d(0, 0, 200);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);

    glPopMatrix();
}
4

1 回答 1

2

这是因为打开了多边形平滑,这会导致 GL 以不同的方式渲染多边形的边缘,从而导致 alpha 混合出现问题。

这是一种过时的 AA 形式,因此最好将其关闭,并改用全场景抗锯齿方法,例如 MSAA 或其他类似技术。

标准建议也适用 - 固定功能管道已过时和弃用,通常不推荐。

于 2013-01-13T00:12:02.530 回答