2013-01-12 130 views
1

当我绘制具有透明纹理的平面(例如房屋的窗户)时,我会看到它们不应该是的线条或三角形。我怎样才能解决这个问题?OpenGL中的透明物体中的三角形/线条

triangles http://i.troll.ws/c9821713.png

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

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(); 
} 
+1

你为什么使用即时模式?自从顶点数组可用之后,使用即时消息已经被阻止了将近20年。为什么所有的东西都是好的你是硬编码你的几何体?将几何图形放入您在运行时加载的文件中,并使用顶点数组进行渲染。 – datenwolf

+1

你打开了多边形平滑吗? – JasonD

+0

@JasonD感谢您的评论。是的,它已打开。当我禁用它时,线条确实消失了。我应该关掉它吗? – Yatoom

回答

2

这是通过使多边形平滑引起导通,这导致GL以不同呈现的多边形的边缘,导致与α混合的问题。

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

标准建议也适用 - 固定功能管道已过时并且不推荐使用,一般不建议使用。