Какой самый эффективный способ отправить мою геометрию в glsl? - PullRequest
2 голосов
/ 16 декабря 2010

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

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

1 Ответ

1 голос
/ 16 декабря 2010

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

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

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

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

...