- Нам нужно сгенерировать наши Vertex-Buffer-Objects из вершин, индексов, нормалей, цветов, uvs и т. Д.
Нет необходимости использовать VBO, клиентские Vertex Arrays также работают. Тем не менее, настоятельно рекомендуется использовать VBO, потому что это облегчает жизнь водителю, и в конечном итоге вы как тот, кто должен манипулировать данными. Затраты кода незначительны (это примерно то же самое, что генерирование и загрузка текстурных данных), и производительность будет только увеличиваться.
- тогда мы можем использовать GLM для преобразования матрицы, и мы используем только VBO для создания или манипулирования сетками, наконец, мы передаем все в вершинный шейдер GLSL, как это ...
Вы не ограничены GLM. Подойдет любая матричная математическая библиотека. Если вы ищете что-то, что вы можете использовать в C99, взгляните на мой (все еще не полный) linmath.h
https://github.com/datenwolf/linmath.h, который является просто файлом заголовка с функциями static inline
. Я пока не тестировал, если дублирование кода отрицательно влияет на производительность (размер кода создает нагрузку на кэш-память первого уровня).
ВОПРОС: Как мы выполняем иерархические преобразования без pushMatrix / popMatrix? (или, может быть, мы делаем иерархическое преобразование, используя наши VBO, это возможно?)
VBO не имеют к этому никакого отношения. Большинство пользователей старомодных проблем OpenGL доставляют те функции стека матриц, которые делают OpenGL немного похожим на граф сцены. Но это не так.
Если вы забудете о стеке матриц старого OpenGL, станет понятно, как выполнять иерархические преобразования: в каждой ветви иерархии сделайте копию матрицы преобразования и оперируйте ею. Вы получаете иерархическое дерево преобразований, в каждом узле которого хранится соответствующая матрица. Затем вы передаете эти матрицы как униформу вершинному шейдеру; или только одна матрица, если вы рисуете жесткий объект, который имеет только одно преобразование. Несколько матриц, которые обычно нужны только для таких деформируемых элементов, как скелетная анимация персонажа, подобного этому
worldtransform ->
pelvis ->
left upper leg -> left lower leg -> left foot
right upper leg -> right lower leg -> right foot
torso ->
neck -> head ->
left eye
right eye
facial deformation // this is a whole chapter of it's own
left upper arm -> left lower arm -> left hand
right upper arm -> right lower arm -> right hand
Каждый раз, когда вы вводите ->
в такой иерархии, вы делаете копию матрицы и продолжаете работать над ней. Возвращаясь к более высокому уровню дерева, вы снова начинаете работать с этой матрицей.