OpenGL / GLU:是不是有用于绘制圆的内置函数?

Posted

技术标签:

【中文标题】OpenGL / GLU:是不是有用于绘制圆的内置函数?【英文标题】:OpenGL / GLU : Is there a built-in function for drawing circles?OpenGL / GLU:是否有用于绘制圆的内置函数? 【发布时间】:2015-03-20 22:34:31 【问题描述】:

我知道有用于绘制矩形的内置函数(例如glRecti()),并且认为圆形也是一种非常基本的用法。

有这种画圆的内置函数吗?还是我应该始终自己实现它?

【问题讨论】:

即使有一个内置的绘制圆圈的方法我认为你仍然应该学习如何手动完成 IMO 我很高兴自己知道如何做,但现在我想避免错误和测试,更喜欢使用已经测试和广泛使用的东西 如果您不绘制点、线或三角形,则说明您使用的是折旧的功能。 OpenGL 是一种低级 API,旨在尽可能快地绘制内容;诸如绘制基本原语之类的便利内容被故意遗漏(或删除)以精简 API。我建议您使用核心配置文件 (fairly decent tutorial) 或使用更高级别的框架。 【参考方案1】:

gluDisk() can be used to do so:

void gluDisk(GLUquadricObj *obj,
             GLdouble innerRadius, GLdouble outerRadius,
             GLint slices, GLint loops)

innerRadiusouterRadius 控制孔和磁盘的大小。

innerRadius 设置为 0.0 以呈现实心圆。 slices:磁盘的边数(例如,等边三角形为 3,a 为 6 垫圈 20 圈)。 循环:渲染的同心环的数量,例如。 1 用于圆圈 2 用于垫圈。对循环使用较大的值可以提高镜面反射光照和聚光灯的效果。

Official manpage.

【讨论】:

【参考方案2】:

如果您习惯使用 GLU(整体上已弃用),那么可以。 gluDisk() 默认渲染一个实心圆,但也可以用来只渲染一个圆的轮廓:

GLUquadric quad = gluNewQuadric();
...
gluQuadricDrawStyle(quad, GLU_SILHOUETTE);
gluDisk(quad, 0.0, radius, 64, 1);
...
gluDeleteQuadric(quad);

以上代码未经测试。

【讨论】:

我在大学学习计算机图形学课程,我们使用非常古老的软件 - 带有 GLU 和 GLUT 的 OpenGL。从 2001 年开始,我一直在努力寻找 GLUT 的工作二进制文件。我们用glBegin()glEnd() 绘制线条和多边形...我希望它也能帮助我使用新技术【参考方案3】:

不,没有内置的 openGL 函数...阅读本文以开始编写自己的 drawCircle 函数:

http://www.openglprojects.in/2014/03/draw-circle-opengl.html

===编辑====

GLU 已弃用且完全不受支持。所以我什至不会为这样的库建议一个内置函数。

【讨论】:

谢谢,看起来不错。如果我也想填充圆圈,如果我使用线而不是点,它会起作用吗? @SomethingSomething 如果你想要线条(所以圆形的轮廓),你应该使用线条,如果你想要其他东西,你应该使用三角形。 @immibis,感谢您的意见。我刚刚在大学开始了计算机图形课程,目前我们只需要绘制简单的形状,所以他们只是看到我们以某种方式使用 OpenGL 取得了成功。仍然没有达到理解这些三角形练习的水平 @SomethingSomething "simple shapes" 在 opengl IMO 中,圆几乎不能称为简单形状,因为它不像绘制三角形或正方形那样简单,因为真正的圆有无限边 使用GL_TRIANGLE_FAN 代替GL_LINE_LOOPGL_LINES 作为glBegin() 函数的参数。

以上是关于OpenGL / GLU:是不是有用于绘制圆的内置函数?的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL 中绘制一个实心立方体

OpenGL 绘制纹理

在 OpenGL 中绘制多个形状

在 OpenGL 中绘制形状的标准(常用)方法是啥?

绘制带纹理的四边形 OpenGL

关于opengl无法运行的问题