2014-09-26 252 views
1

我開始使用OpenGL一個簡單的GUI應用程序的工作。繪製一個簡單的背景四邊形會造成很多困難,我不能發現我在做什麼錯誤或什麼是'破碎'。這裏是一個負責制定我的背景「四」的部分代碼:OpenGL的C++ - 不需要的黑色三角形出現

static void Draw(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glColor3f(0.5f, 0.5f, 0.5f); 
    glBegin(GL_QUADS); 
    glVertex2f(-1.0f, -1.0f); 
    glVertex2f(1.0f, -1.0f); 
    glVertex2f(-1.0f, 1.0f); 
    glVertex2f(1.0f, 1.0f); 
    glEnd(); 
    glutSwapBuffers(); 
} 


int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(600, 600); 
    glutCreateWindow("Pro Sound"); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glutDisplayFunc(Draw); 
    glutKeyboardFunc(keyPressed); 
    glutKeyboardUpFunc(keyUp); 

    glutMainLoop(); 
} 

輸出看起來像一個灰色的四,但在它(右側)上有個黑色的三角形頂點上中心,右上角和右下角。所以我的背景看起來像被一個三角形牙像素怪物咬傷。問題是,它最近的工作正常,我甚至可以添加一些紋理,它定位好等

回答

4

看起來你是在錯誤的順序繪製四頂點。默認情況下,頂點應該沿着多邊形的周邊以逆時針方式排序。

所以,你所擁有的是:

(-1.0f, -1.0f) Bottom-Left 
(1.0f, -1.0f) Bottom-Right 
(-1.0f, 1.0f) Top-Left 
(1.0f, 1.0f) Top-Right 

這是創建:

enter image description here

當你想:

(-1.0f, -1.0f) Bottom-Left 
(1.0f, -1.0f) Bottom-Right 
(1.0f, 1.0f) Top-Right 
(-1.0f, 1.0f) Top-Left 

它創建:

enter image description here

又見Face CullingPrimitive - Quads

+0

既簡單又富有啓發性。非常感謝我的救世主。禮炮! – Bizarre 2014-09-26 17:25:57

+0

他使用'GL_QUADS'所以會畫一個四,而不是兩個三角形。 – 2014-09-26 22:27:36

+0

所有現代GPU只消耗三角形,所以它被驅動程序分成兩個三角形。如果GPU在四邊形上工作,那麼他不會看到他所看到的神器。 – ssell 2014-09-26 23:02:24

3

而不是使用GL_QUADS和改變你的座標,讓你的座標,並使用GL_TRIANGLE_STRIP

我相當肯定GL_QUADS已被棄用,並且無論您是否繪製四邊形,使用GL_TRIANGLE_STRIPGL_TRIANGLE_FAN似乎都是一種很好的做法。

你應該使用GL_QUADS的唯一情況是,當你在即時模式,並勾畫了一個小程序,在其中的表現也無所謂。 (這可能是這樣的一個時期;但對於加固和良好的措施,我總是用GL_TRIANGLE_STRIPGL_TRIANGLE_FAN。)

+0

是的,Quads在3.0中被棄用,並在3.1中被完全刪除。這是一個很好的觀點。 – ssell 2014-09-26 17:28:43

+0

馬上就會進入。謝謝你的時間,感謝你,先生。 – Bizarre 2014-09-26 17:30:59