Я только начинаю изучать OpenGL сегодня из этого урока: http://openglbook.com/the-book/
Я добрался до главы 2, где я рисую треугольник, и я все понимаю, кроме VAO (это аббревиатура ОК?). Учебник имеет следующий код:Что такое объекты вершинного массива?
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Хотя я понимаю, что код надо, я понятия не имею, что он делает. Хотя я никогда не использую VaoId за этот момент (кроме его уничтожения), код не работает без него. Я предполагаю, что это связано с тем, что требуется связать, но я не знаю, почему. Этот точный код просто должен быть частью каждой программы OpenGL? Руководство объясняет, как VAOs:
A Vertex массив объектов (или ВАО) является объектом, который описывает, как атрибуты вершин хранятся в объекте вершинного буфера (или VBO). Это означает, что VAO не является фактическим объектом, хранящим данные вершин, а дескриптором данных вершин. Атрибуты вершины могут быть описаны функцией glVertexAttribPointer и ее двумя сестринскими функциями glVertexAttribIPointer и glVertexAttribLPointer, первый из которых мы рассмотрим ниже.
Я не понимаю, как VAO описывает атрибуты вершин. Я никоим образом не описал их. Получает ли он информацию из glVertexAttribPointer? Думаю, это и должно быть. Является ли VAO просто пунктом назначения для информации из glVertexAttribPointer?
На боковой ноте, является ли учебное пособие приемлемым? Есть ли что-нибудь, за чем я должен следить или лучше следовать учебнику?
«Объект вершинного массива» представлен вам подкомитетом OpenGL ARB для глупых имен. Да, такое глупое имя для ** объекта **, который хранит ** vertex ** ** array ** привязки. –
Если я правильно вас понимаю, вызывая 'glGenVertexArrays (1, & VaoId);' и 'glBindVertexArray (VaoId);' создает VAO со стандартными значениями по умолчанию, чтобы спасти вас от 'glEnableClientState'? Или я полностью вас недопонимаю? В будущем, скорее всего, я буду использовать много 'glEnableClientState'? – Patrick
Кроме того, VAO вообще связаны с 'glVertexAttribPointer' – Patrick