Я зараз починаю вивчати 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?
Зі сторони, чи підручник, за яким я слідую, прийнятний? Чи є щось, на що я повинен стежити, чи краще навчальний посібник, який слід дотримуватися?