【问题标题】:Improving performance of Contour rendering using OpenGL?使用 OpenGL 提高轮廓渲染的性能?
【发布时间】:2011-08-25 02:28:16
【问题描述】:

请参考the video

在我的应用程序中,我使用使用 GL_LINE_STRIP 创建的 DisplayList 显示轮廓堆栈。

用户可以使用鼠标选择轮廓线。为此,在渲染 DisplayList 之前,我使用独特的颜色渲染所有轮廓并读取鼠标下的像素颜色。(如 here 解释的那样)。这个渲染是 使用“立即模式”完成。

用户还可以移动,删除选定的轮廓。在这种情况下,我重新生成 DisplayList。

我的问题是:

1) 我正在使用旧的 OpenGL 技术。(固定管道架构。)有没有办法使用新的 OpenGL 技术来提高性能? (使用 GPU、着色器...等) 因为对于大量的轮廓,操作并不平滑。

2)我认为为轮廓选择所做的“立即模式”渲染也是一个性能面板。有没有更好的方法来做到这一点?

3) 我需要将轮廓节点显示为点云,使用 GL_POINTS。在此,我应该使用 GL_POINTS 创建另一个 DisplayList? (这意味着有两个 DisplayLists;一个用于显示线,另一个用于显示点)?

【问题讨论】:

    标签: performance opengl graphics rendering opengl-3


    【解决方案1】:

    离开显示列表并切换到vertex arrays (VAs)vertex buffer objects (VBOs) 应该会给您带来不错的加速。

    您可以非常通过将第一个参数更改为glDrawArrays() 轻松地在GL_LINE_STRIPGL_POINTS 之间切换。不需要您的几何图形的两个副本。

    【讨论】:

    • 正确,不要使用显示列表。
    • 在 VA 情况下,对显卡的调用次数将是轮廓线的数量。(每个轮廓使用一个 glDrawArrays() API 调用绘制)。但在 DisplayList 情况下,整个绘图调用被编译并存储在显卡命令缓冲区中,只需要一个 API 调用。那么 VA 怎么能比 DisplayList 更好呢?
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2012-06-14
    • 2013-01-05
    相关资源
    最近更新 更多