顶点数组对象和缓冲区对象之间的区别



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

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

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

其次,顶点数组对象捕获当前绑定的缓冲区对象,因此您需要保留对应于两个缓冲区对象(一个用于球体,

一个用于立方体)的顶点数组对象,或者如果球体和立方体的数据已合并到单个缓冲区对象中,则需要使用单个顶点数组对象。在后一种情况下,glDrawArraysglDrawElements 的参数将允许您选择球体或立方体数据(或者两者都可以通过一次绘制调用进行绘制)。

最新更新