【问题标题】: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 像素,则使用几百个面是有意义的,但对于小的人来说,这是不值得的(没有人会注意到) - 即较小的圆需要更少的多边形。

标签: c++ c opengl


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你看过this的文章吗?

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

    【讨论】:

    • GLUDisk 是否超级高效?
    • 我不确定 - 我已经很久没有玩过 OGL 了。为什么不试试呢? :-)
    • gluQuadrics 基于即时模式,即 glBegin/glEnd。不惜一切代价避免。
    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多