2013-03-21 2 views
4

У меня возникла проблема, когда я пытаюсь использовать Polygon в OpenGL. Я не знаю, как это объяснить, но все мои вершины связаны с начальным. Проблема возникает, когда я пытаюсь покрасить объект. Я хочу нарисовать простой объект.Вогнутый многоугольник OpenGL GL_POLYGON не окрашивается в

void TOP (float x1, float y1, float x2, float h,float n) 
{ 
    float r = x2-x1; 
    if(n==1){glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);} // FOR FILL OR NO FILL OBJECT 
    glBegin(GL_POLYGON); 
    glVertex2f(x1,y1); 
    glVertex2f(x2,y1); 
    glVertex2f(x2,y1+h/7); 
    y1=y1+h/7; 
    glVertex2f(x2-r/5,y1+h/7); 
    x2=x2-r/5; y1=y1+h/7; 
    glVertex2f(x2,y1+2*h/7); 
    y1=y1+2*h/7; 
     glVertex2f(x2+r/5,y1+h/7); 
     y1=y1+h/7; x2=x2+r/5; 
     glVertex2f(x2,y1+2*h/7); 
cout<<y1<<endl; 
     y1=y1+2*h/7; 
     glVertex2f(x2-r/5,y1); x2=x2-r/5; 
     glVertex2f(x2,y1-h/7); y1=y1-h/7; 
     glVertex2f(x2-r/5,y1);x2=x2-r/5; 
     glVertex2f(x2,y1+h/7); y1=y1+h/7; 
     glVertex2f(x2-r/5,y1);x2=x2-r/5; 

     glVertex2f(x2,y1-h/7); y1=y1-h/7; 
     glVertex2f(x2-r/5,y1);x2=x2-r/5; 
     glVertex2f(x2,y1+h/7); y1=y1+h/7; 
     glVertex2f(x2-r/5,y1);x2=x2-r/5; 
     glVertex2f(x2,y1-2*h/7);y1=y1-2*h/7; 
     glVertex2f(x2+r/5,y1-h/7);y1=y1-h/7; x2=x2+r/5; 
     glVertex2f(x2,y1-2*h/7); y1=y1-2*h/7; 
     glVertex2f(x2-r/5,y1-h/7); y1=y1-h/7;x2=x2-r/5; 
      glVertex2f(x2,y1-h/7); 

    glEnd(); 
} 

Выход:

http://i.stack.imgur.com/BLMSJ.png

ответ

11

GL_POLYGON только для convex polygons.

Для concave polygons у вас есть по крайней мере два варианта:

  1. Triangulate the polygon и использовать GL_TRIANGLES.

  2. Use the stencil buffer trick.

+0

Я могу сделать это с помощью GL_LINE_LOOP ... но есть ли способ заполнить этот объект после этого? – Stefan

+2

Я связал вас двумя способами прямо в моем ответе. – genpfault

Смежные вопросы