当我绘制具有透明纹理的平面(例如房屋的窗户)时,会看到不应有的直线或三角形。我怎样才能解决这个问题?
(来源:troll.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();
}
最佳答案
这是由于启用了多边形平滑处理导致的,这将导致GL渲染多边形的边缘不同,从而导致alpha混合问题。
它是AA的一种过时形式,因此最好将其关闭,并改用全屏抗锯齿方法,例如MSAA或其他类似技术。
而且标准建议也适用-固定功能管道已过时和过时,通常不建议这样做。