2013-04-10 63 views
2

我正在繪製一個基本的多邊形,它的5邊幾乎看起來像一個C形。OpenGL GL_POLYGON不能正確打印

(50,60) _____(70,60) 
     | /
     | /
     | /(60,40) 
     | \ 
     | \ 
(50,20)|____\(70,20) 

很簡單。

當我使用

wcPt2D verts[5] = {{50,20}, {70,20}, {**60**,40}, {70,60}, {50,60}}; 

enter image description here

我得到這個。預期。但是,當我改變中心件到

wcPt2D verts[5] = {{50,20}, {70,20}, {**51**,40}, {70,60}, {50,60}}; 

我得到

enter image description here

其中明確是從左壁/ 9個單位圖像1的左側不是1個單元,它清楚地滴y值大約爲10個單位。爲什麼是這樣?

void polygon (wcPt2D *verts) 
{ 
GLint k; 

glBegin(GL_POLYGON); 
    for (k = 0; k < 5; k++) 
    { 
     glVertex2f(verts [k].x,verts [k].y); 
    } 
glEnd(); 
} 

回答

5

GL_POLYGON的行爲僅限於凸多邊形。你的多邊形是凹的,所以這個函數的行爲是不確定的(並且,正如你所看到的,它並不總是工作)。

您需要將您的多邊形分解爲一個或多個凸多邊形,才能正常工作。在你的情況下,這樣做的一個簡單方法是在多邊形上水平「切割」:

 
(50,60) _____(70,60) 
     | /
     | /
(50,40)|__/(60,40) 
     | \ 
     | \ 
(50,20)|____\(70,20) 
+0

優秀。非常感謝。 – 2013-04-11 00:34:33