c - OpenGL绘制凹多边形(错误)

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

最佳答案

OpenGL 只能正确渲染凸多边形。你的“L”需要被分成一个三角形条。您可以手动或通过 GLU 曲面 segmentation 器执行此操作(我假设 GLU 是您的一个选项,因为您无论如何都在立即模式下渲染)。

关于c - OpenGL绘制凹多边形(错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485519/

相关文章:

c - 如何编译c程序使其不依赖于任何库?

c++ - 我可以使用什么在我的 GUI 应用程序中用颜色渲染 3D 图像(OBJ、PLY)?

c - extern“C”在msvc++ 9.0中无效

java - 从另一个库调用一个库函数

根据用户输入创建函数

c++ - 在 OpenGL/GLSL 中绘制镶嵌的 LineLoops

java - 如何在 Java 中对某些形状进行三角剖分/分割?

c++ - OPENGL:使用 VBO 的方形类

c++ - 如何使用 freetype 从 "Segoe UI Emoji"渲染彩色字形?

c++ - gluTessCallback 错误 C2440