在OpenGL中绘制凹多边形(错误)

时间:2014-05-06 03:32:39

标签: c opengl tessellation

我正在尝试使用C中的OpenGL绘制一个L形多边形。根据我的说法,这段代码应该这样做,但它并没有给我预期的结果。我试图绘制的形状类似于下面。发生错误的点位于函数polygon1的第2点。

我似乎在这里犯了一些错误,或者它是OpenGL中的一个错误。下面显示的图片是错误红色输出,下面绘制的图表是代码的预期输出。

enter image description here

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

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();
}

3 个答案:

答案 0 :(得分:2)

OpenGL只能正确渲染凸多边形。你的" L"需要分成三角形条。您可以手动或通过GLU tesselators执行此操作(我假设GLU是您的选项,因为您无论如何都要立即渲染)。

答案 1 :(得分:1)

正如Drew Hall在之前的回答中指出的那样,GL_POLYGON无法绘制凹多边形。不过,您可以使用单个三角形扇形绘制此形状。试试这个:

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();

答案 2 :(得分:0)

正如已经提到的,OpenGL不能单独执行此操作(除非事先存储三角形)

OpenGL没有提供曲面细分,但正如前面提到的那样,GLU会这样做。

如果libGLU不是一个选项,那里有一些镶嵌器 - libGDX有一个非常简单的实现(在Java中 - 但很容易移植)

Blender有一个带有优化的代码的C端口(使用2D kd-tree)