openGL 如何同时在屏幕上画两个圆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openGL 如何同时在屏幕上画两个圆相关的知识,希望对你有一定的参考价值。

参考技术A glBegin(GL_POLYGON);
for (int j = 0; j <= n ; ++j)
glVertex2f(c1.x + R1 * sin(2 * Pi / n * j), c1.y + R1 * cos(2 * Pi / n * j));

glEnd();

glBegin(GL_POLYGON);
for (int j = 0; j <= n ; ++j)
glVertex2f(c2.x + R2 * sin(2 * Pi / n * j), c2.y + R2 * cos(2 * Pi / n * j));

glEnd();

c1,c2就是两个圆的圆心坐标了,R1,R2是两个圆的半径,用GL_POLYGON模式画图,取一个n值就行了

为多边形轮廓绘制圆的最有效方法

【中文标题】为多边形轮廓绘制圆的最有效方法【英文标题】:Most efficient way to draw circles for polygon outlines 【发布时间】:2010-06-14 22:01:34 【问题描述】:

我正在使用 OpenGL,并被告知我应该在轮廓的每个顶点上画圆以获得平滑度。我试过了,效果很好。问题是速度。它削弱了我在每个顶点画一个圆圈的应用程序。我不知道如何解决除圆圈以外的轮廓异常,但使用显示列表和尝试使用顶点数组都非常缓慢。谢谢

见:Edges on polygon outlines not always correct

【问题讨论】:

如果您被告知 SO,请您提供该问题的链接,因为我不能仅从您的问题中理解原始问题;) 当您说“尝试使用顶点数组”时,您是如何使用它们的?一个 VA 包含一个带有多个 glTranslates()/glDrawElements() 的圆,还是一个带有一个 glDrawElements() 调用的单个大 VA? 带有 GLDrawArrays() 的单个大型 VA “它使我的应用程序无法在每个顶点绘制一个圆圈。”现代 GPU 应该能够每帧渲染几百万个三角形而不会阻塞——如果你做得好的话。你到底是如何渲染圆圈的?邮政编码。尝试更改圆形分辨率。如果半径为 3 像素,则不需要高分辨率圆 - 4..6 段就足够了。尝试根据圆圈大小更改圆圈分辨率。 IE。如果圆的大小超过 100 像素,则使用几百个面是有意义的,但对于小的人来说,这是不值得的(没有人会注意到) - 即较小的圆需要更少的多边形。 【参考方案1】:

一个(也许太花哨)的替代方法是绘制一个以圆形为边界的多边形(例如,一个四边形),然后使用片段程序丢弃片段。这写起来并不简单,但我敢打赌这是最快的方法。

如果从片段中心到圆心的距离大于所需的半径,您只需将圆参数传递给片段程序并丢弃片段。

【讨论】:

【参考方案2】:

你看过this的文章吗?

..或者如果您可以访问 GL 实用程序库,您可以使用 gluDisk

【讨论】:

GLUDisk 是否超级高效? 我不确定 - 我已经很久没有玩过 OGL 了。为什么不试试呢? :-) gluQuadrics 基于即时模式,即 glBegin/glEnd。不惜一切代价避免。

以上是关于openGL 如何同时在屏幕上画两个圆的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL/GLSL 中对特定颜色进行阈值处理

如何在Android中以相同直径在不同屏幕(设备)上画一个圆

C ++ / OpenGL - 2D - 如何在矩形边界框中剪切圆

在现代 OpenGL 中画一条线

OpenGL 缠绕不正确

OpenGL使旋转函数给出向量