Я пишу приложение OpenGL3 + и немного замешаны в использовании VAO. Прямо сейчас у меня только один VAO, нормализованный квадрат вокруг начала координат. Этот единственный VAO содержит 3 VBOs; один для позиций, один для поверхностных нормалей и один GL_ELEMENT_ARRAY_BUFFER для индексации (поэтому я могу хранить только 4 вершины, а не 6).
Я установил некоторые вспомогательные методы для рисования объектов на сцену, таких как drawCube()
, который принимает значения положения и вращения и следует процедуре;
- Привяжите квадроцикл VAO.
- На кубической поверхности:
- Создайте матрицу модели, которая представляет это лицо.
- Загрузите матрицу модели в переменную
uniform mat4 model
vertex shader. - Вызовите
glDrawElements()
, чтобы нарисовать квадрат в положение для этого лица.
Я только что задал задачу добавления цветов на куб и понял, что я не могу добавить свой цвет VBO в единственный VAO, поскольку он будет меняться с каждым кубом, и это не кажется правильным.
Я только что прочитал вопрос; Лучшие практики OpenGL VAO, в котором говорится, что мой подход неправильный, и что я должен использовать больше VAO для сохранения работы по настройке всей сцены каждый раз.
Сколько VAO должно использоваться? Очевидно, что мой подход с 1 не является оптимальным, должен ли быть VAO для каждой статической поверхности в сцене? Как насчет тех, кто движется?
Я пишу для равномерной переменной для каждой вершины, это правильно? Я читал, что переменные шейдера uniform
не должны меняться в середине кадра, если я могу записать разные значения в мою переменную uniform
, как униформа отличается от простых переменных in
в вершинном шейдере?