2013-04-10 4 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

Который явно не 1 блок от левой стенки/9 единиц слева от изображения 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

Отлично. Спасибо. –