Vertex数组对象和缓冲区对象之间的区别?

时间:2014-02-17 00:18:04

标签: opengl

我刚开始用OpenGL编程(v.3.3),我对这两个“对象”究竟是什么以及如何正确使用它感到困惑。

例如,假设我想在屏幕上绘制两个对象 - 球体和立方体。我应该创建两个VAO和两个缓冲区对象 - 每个一个,或者我应该创建一个VAO和两个缓冲区对象(中间调用glBindBuffer()),或者创建一个VAO和一个缓冲区对象并调用{{ 1}}在绘制调用之间更新缓冲区对象?

1 个答案:

答案 0 :(得分:0)

首先,由于您只有静态几何,为了获得最佳性能,您应该避免在绘制调用之间更新任何缓冲区数据,并且只使用静态缓冲区对象(一个用于球体,一个用于多维数据集,或者一个用于保存两个数据) )。

其次,顶点数组对象捕获当前绑定的缓冲区对象,因此您需要保留两个对应于两个缓冲区对象的顶点数组对象(一个用于球体,一个用于多维数据集)或者使用单个一个球体和立方体的数据已合并到单个缓冲区对象中。在后一种情况下,glDrawArraysglDrawElements的参数将允许您选择球体或立方体数据(或者可以使用单个绘制调用绘制两者)。