【问题标题】:Rendering two objects in OpenGL: One buffer vs two buffers?在 OpenGL 中渲染两个对象:一个缓冲区与两个缓冲区?
【发布时间】:2015-08-07 13:27:39
【问题描述】:

我想在 OpenGL 中使用着色器渲染两个对象。

为了渲染我的第一个对象,我使用glGenBuffers() 创建一个顶点缓冲区,然后使用glBufferData() 用数据填充顶点缓冲区,最后使用glDrawArrays() 绘制顶点缓冲区。

现在,要绘制我的第二个对象,我可以想到两种方法。首先,我可以将我的第二个对象的所有顶点附加到上面创建的顶点缓冲区,然后使用一次调用glDrawArrays() 绘制两个对象的所有顶点。或者,我可以创建第二个顶点缓冲区,用来自第二个对象的数据填充该缓冲区,然后为该第二个对象再次调用 glDrawArrays()

哪种方法最好?第二种方法允许我保持每个对象的独立呈现,这可能会使代码更容易理解,但在运行时也可能会更慢......

【问题讨论】:

  • 一个和两个缓冲区之间的差异不会影响您的运行时性能(除非您以纳秒为单位进行测量)。如果您必须每帧执行数千次调用,我会坚持使代码清晰,并且只考虑将所有内容合并到一个缓冲区中。

标签: opengl


【解决方案1】:

如果您可以将多个对象组合到 1 个绘图调用中,那么这样做总是一个好主意,因为这意味着对 opengl 的调用更少并且速度更快。一个问题是,当您的对象需要不同的变换矩阵、不同的着色器等时,它会稍微复杂一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多