“顶点数组对象”是由 OpenGL ARB 愚蠢名称小组委员会为您带来的。
将其视为一个几何对象。 (作为一个旧时的 SGI Performer 程序员,我称它们为 geoset。)对象的实例变量/成员是顶点指针、法线指针、颜色指针、attrib N 指针,...
当第一次绑定 VAO 时,您可以通过调用来分配这些成员
glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer...;
glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer...;
等等。启用哪些属性以及您提供的指针存储在 VAO 中。
之后,当您再次绑定VAO时,所有这些属性和指针也将变为当前值。那么一个glBindVertexArray
调用相当于之前设置所有属性所需的所有代码。它可以很方便地在函数或方法之间传递几何图形,而无需创建自己的结构或对象。
(一次设置,多次使用是使用 VAO 的最简单方法,但您也可以通过绑定它并进行更多启用/指针调用来更改属性。VAO 不是常量。)
回答帕特里克问题的更多信息:
新创建的 VAO 默认为空(据我所知)。根本没有几何图形,甚至没有顶点,所以如果你尝试绘制它,你会得到一个 OpenGL 错误。这是相当合理的,就像“将所有内容初始化为 False/NULL/0”一样。
你只需要glEnableClientState
当你设置好东西时。 VAO 会记住每个指针的启用/禁用状态。
是的,VAO 将存储glEnableVertexAttribArray
and glVertexAttrib
。旧的 vertex, normal, color, ... 数组与属性数组相同,vertex == #0 等等。