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

Posted

技术标签:

【中文标题】为多边形轮廓绘制圆的最有效方法【英文标题】: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。不惜一切代价避免。

以上是关于为多边形轮廓绘制圆的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章

使用Python,OpenCV进行涂鸦(绘制文字线圆矩形椭圆多边形轮廓多边形填充箭头~)

26opencv入门轮廓查找与绘制——正外接矩形

TTF字体的渲染曲线

计算在谷歌地图上绘制的多边形的面积

有一个更好的方法吗?

来自 Emgu CV(或 OpenCV)中多边形集的 Voronoi 图