2013-01-12 72 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或其他類似技術。

標準建議也適用 - 固定功能管道已過時並且不推薦使用,一般不建議使用。