Какой самый эффективный способ отправить мою геометрию в glsl?

В моей сцене у меня есть дерево ячеек. Каждая сетка содержит матрицу преобразования, список вершин, нормали, uvs и список дочерних сеток.

Я хотел бы отправить свою геометрию в "массиве структур" в glsl, используя VBO, но я не знаю, как справиться с обновлением матрицы каждой сетки в случае преобразования матрицы родительской сетки. Должен ли я пройти по сетке дерева и добавить матрицу для каждой вершины каждого кадра? Должен ли я предварительно умножить вершины каждого кадра? Должен ли я держать список матриц в униформе и ссылаться на матрицу текущей вершины по индексу? Должен ли я использовать один glDrawArrays или glDrawElements для каждой сетки?

1 ответ

Решение

"Стандартный" подход заключается в использовании вызова glDraw для каждой сетки.

Для каждой сетки вы передаете ее матрицу преобразования в единую униформу, которая применяется для всей сетки. Затем эта матрица используется в вершинном шейдере для преобразования меша из "пространства объектов" в "пространство клипов".

Наличие нескольких матриц для одной сетки (или вызов отрисовки) обычно используется для нежестких преобразований в сетках (например, деформации, вызванные костями).

Другой подход, в зависимости от количества мешей, которые вы должны нарисовать, состоит в том, чтобы использовать "аппаратное копирование". Где вы можете нарисовать похожую сетку несколько раз, предоставив массив матриц, и предоставьте оборудованию возможность выбрать соответствующую матрицу с учетом рисуемого instanceID.

Другие вопросы по тегам