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