c++ - 如何在 OpenGL(使用 GLUT)上绘制像圆锥体一样的填充包络?

标签 c++ opengl glut freeglut

我正在使用 freeglut 进行 opengl 渲染...

我需要绘制一个看起来像圆锥体 (2D) 的包络,必须填充一些颜色并应用一些透明度。

freeglut 工具包是否配备了绘制填充几何图形的内置功能(或一些技巧)? 或者是否有其他一些 api 对填充的几何图形具有内置支持..

编辑1: 只是为了澄清 2D 锥体的东西……包络是飞机在拦截(敌机)期间覆盖区域的图形解释……类似于圆的一个扇区……我应该提到扇区。 .

而 glutSolidCone 对我没有帮助,因为我想绘制一个圆的填充扇区......我已经完成了......剩下要做的就是用一些颜色填充它...... 如何在 opengl 中用颜色填充几何图形?

编辑2: 发布到这个问题的所有答案都可以在某种程度上解决我的问题.. 但我肯定想知道如何用某种颜色填充几何图形的方法。 假设我想绘制一个抛物线包络线……在那种情况下,将没有默认的 glut 函数来实际绘制一个填充的抛物线(或者是否有任何抛物线?).. 所以要概括这个问题...如何以某种纯色绘制自定义几何图形?

编辑 3: mstrobl 发布的答案适用于 GL_TRIANGLES 但适用于这样的代码:

glBegin(GL_LINE_STRIP);

glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 0.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(200.0, 0.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(200.0, 200.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 200.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 0.0, 0.0);

glEnd();

它绘制了一个正方形...只绘制了一个连线正方形...我需要用蓝色填充它。

无论如何都要这样做?

如果我为闭合曲线放置了一些绘图命令..就像一个馅饼..我需要用一种颜色填充它有没有办法让它成为可能...

我不知道 GL_TRIANGLES 是如何实现的...但是对于任何闭合曲线如何做到这一点?

最佳答案

在 Edit3 上:我理解你的问题的方式是你想让 OpenGL 绘制边框,并且它们之间的任何东西都应该用颜色填充。

你的想法是对的,但线带就是一条线,它没有任何面积。

但是,您可以让这些线相互连接以定义一个多边形。这将在每个顶点的基础上填充多边形的区域。调整您的代码:

glBegin(GL_POLYGON);

glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 0.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(200.0, 0.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(200.0, 200.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 200.0, 0.0);
glColor3f(0.0, 0.0, 1.0);
    glVertex3f(0.0, 0.0, 0.0);

glEnd();

但是请注意,以这种方式绘制多边形有两个限制:

  • 多边形必须是凸的。
  • 这是一个缓慢的操作。

但我假设您只是想完成工作,这就可以了。对于 future ,您可能会考虑只对多边形进行三角测量。

关于c++ - 如何在 OpenGL(使用 GLUT)上绘制像圆锥体一样的填充包络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237899/

相关文章:

c - GLFW3 中是否有 glutDisplayFunc 等效项?

c++ - Arduino:将 String hex "#FFFFFF"转换为 3 int

c++ - OpenGL/Glut 无法在其上绘制 [

opengl - OpenGL 与 Direct3D + 其他游戏组件的学习曲线

opengl - 关于 GL_VERTEX_ARRAY 的一个问题

c++ - glReadPixels 存储 x, y 值

c++ - 宏的参数可以传递给char数组的变量吗?

c++ - 对 Qt 的事件循环系统感到困惑?

c++ - getline 错误

c - Monodevelop 和过剩问题