Сегодня я только начинаю изучать OpenGL из этого руководства: http://openglbook.com/the-book/
Я перешел к главе 2, где рисую треугольник и понимаю все, кроме VAO (это аббревиатура в порядке?). В руководстве есть этот код:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Хотя я понимаю, что код необходим, я понятия не имею, что он делает. Хотя я никогда не использую VaoId после этого момента (кроме как для его уничтожения), код без него не работает. Я предполагаю, что это связано с тем, что это необходимо, но я не знаю почему. Должен ли этот точный код быть частью каждой программы OpenGL? В учебнике VAO объясняются как:
Объект массива вершин (или VAO) - это объект, который описывает, как атрибуты вершин хранятся в объекте буфера вершин (или VBO). Это означает, что VAO - это не фактический объект, хранящий данные вершины, а дескриптор данных вершин. Атрибуты вершин можно описать с помощью функции glVertexAttribPointer и двух ее сестринских функций glVertexAttribIPointer и glVertexAttribLPointer, первую из которых мы рассмотрим ниже.
Я не понимаю, как VAO описывает атрибуты вершин. Я их никак не описал. Получает ли он информацию из glVertexAttribPointer? Я думаю, это должно быть оно. Является ли VAO просто местом назначения информации от glVertexAttribPointer?
Кстати, приемлемо ли руководство, которому я следую? Есть ли что-нибудь, чего мне следует остерегаться, или лучшее руководство, которому нужно следовать?