最佳答案
我今天刚刚开始学习 OpenGL,从这个教程: http://openglbook.com/the-book/
到了第二章,我画了一个三角形,除了 VAOs (这个缩写可以吗?) ,我什么都懂了.本教程有以下代码:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
虽然我知道代码是必要的,但我不知道它是做什么的。虽然我从来没有使用 VaoId 超过这一点(除了破坏它) ,代码不会在没有它的情况下运行。我假设这是因为它必须被绑定,但我不知道为什么。这些代码是否需要成为每个 OpenGL 程序的一部分?本教程将 VAO 解释为:
顶点数组对象(或 VAO)是描述顶点属性如何存储在顶点缓冲区对象(或 VBO)中的对象。这意味着 VAO 不是存储顶点数据的实际对象,而是顶点数据的描述符。顶点属性可以由 glVertexAttribPointer 函数及其两个姐妹函数 glVertexAttribIPointer 和 glVertexAttribLPointer 来描述,我们将在下面讨论其中的第一个函数。
我不明白 VAO 如何描述顶点属性。我没有以任何方式描述他们。它是否从 glVertexAttribPointer 获取信息?我想就是这里了。VAO 仅仅是 glVertexAttribPointer 信息的目的地吗?
另外,我所遵循的教程是否可以接受?有没有什么我需要注意的或者更好的教程可以遵循的?