2011-04-15 78 views
1

我有以下代碼:openGL怪異的錯誤?

glNormal3f(0, 0, 1); 
glColor3f(1, 0, 0); 
glBegin(GL_POINTS); 
    glVertex3f(-45, 75, -5); 
    glVertex3f(-45, 90, -5); 
    glVertex3f(-30, 90, -5); 
    glVertex3f(-30, 80, -5); 
    glVertex3f(-35, 80, -5); 
    glVertex3f(-35, 75, -5); 
    glVertex3f(-45, 75, -5); 

glEnd(); 
glColor3f(1, 1, 0); 
glBegin(GL_POLYGON); 
    glVertex3f(-45, 75, -5); 
    glVertex3f(-45, 90, -5); 
    glVertex3f(-30, 90, -5); 
    glVertex3f(-30, 80, -5); 
    glVertex3f(-35, 80, -5); 
    glVertex3f(-35, 75, -5); 
    glVertex3f(-45, 75, -5); 

glEnd(); 

請注意,在每一種情況下在glBegin和glEnd之間的代碼如何都是相同的。

但GL_POLYGON(黃色)的頂點與GL_POINTS(紅色)不匹配。 下面是截圖:

openGL bug

我使用OpenGL的越多,我恨它。但我想這可能是我做錯了什麼......有什麼?

+0

你的榜樣形象有很多其他的東西在裏面太...你與上面的代碼只嘗試? – Rookie 2011-04-15 11:23:50

+0

不,但最終我還是需要那些東西......我已經檢查過,並且我正在結束每一個glBegin ...我不知道它會是什麼。不過,我應該補充一點,我是GL的noob。 – Xenoprimate 2011-04-15 11:25:12

+0

有趣的是,人們總是責怪這個工具。你沒有提到它可能是一個編譯器錯誤:P – 2011-04-15 14:17:36

回答

5

這是因爲您的多邊形不是凸面 - 右上角是凹面。 GL_POLYGON只適用於凸多邊形。

嘗試使用GL_TRIANGLE_FAN代替,並從左下角開始:您的多邊形是星形的,所以如果從內核中的一個點開始繪製它(如果您的頂點的頂點,只有一個是滿足這個條件的)。

如果您期望更復雜的多邊形,您需要將它們分解爲凸位(三角形將是最好的)來渲染它們。

3

規範說的GL_POLYGON:

只有凸多邊形保證是由GL正確繪製。如果 指定的多邊形是投影到窗口上的 時是非凸的,那麼渲染的多邊形只需要位於其邊界的投影的凸包的 內。

既然您定義了一個凹多邊形,這是一個有效的行爲。 嘗試使用三角形條而不是多邊形。這會更快,因爲多邊形需要由GL進行三角剖分。

順便說一句:我到目前爲止還沒有使用GL_POLYGON。但我認爲你不需要指定最後一個頂點(它等於第一個頂點)。據我所知,它會自動連接。