我试图用OpenGL在C中绘制一个L形的多边形。据我所知,这段代码应该可以完成,但它没有给我预期的结果。我想画的形状和下面类似。发生错误的点在polygon1函数的点2。
是我在这里犯了什么错误,还是OpenGL中的一个bug。下面显示的pic是错误红色输出,下面绘制的图表是代码的预期输出。

    ----
    |  |
    |  |
  ---  |
  |    |
  ------

void polygon1(float x,float y)
{
  glColor3f(0,1,0);
  glBegin(GL_POLYGON);
  glVertex2f(x,y);
  glVertex2f(x,y+25);
  glVertex2f(x+25,y+25);
  glVertex2f(x+25,y+75);
  glVertex2f(x+50,y+75);
  glVertex2f(x+50,y);
  glEnd();
  glFlush();
}

void mydisplay()
{
  polygon1(200.0,25.0);
}

void main(int argc,char **argv)
{
  glutInit(&argc,argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  glutInitWindowSize(400,400);
  glutInitWindowPosition(540,320);
  glutCreateWindow("my first attempt");
  glClearColor(0.0f,0.0f,0.0,0.0f);
  glClear(GL_COLOR_BUFFER_BIT);
  glutDisplayFunc(mydisplay);
  gluOrtho2D(0.0,400.0,0.0,400.0);
  glutMainLoop();
}

最佳答案

正如Drew Hall在前面的回答中指出的,GL U多边形不能绘制凹多边形。不过,你可以用一个三角形扇子来画这个形状。试试这个:

glBegin(GL_TRIANGLE_FAN);
glVertex2f(x+25,y+25);
glVertex2f(x,y+25);
glVertex2f(x,y);
glVertex2f(x+50,y);
glVertex2f(x+50,y+75);
glVertex2f(x+25,y+75);
glEnd();

10-04 10:29