Как пакетировать один и тот же квадрат в одном glVertexPointer - PullRequest
1 голос
/ 20 мая 2009

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

(см. Рекомендации по разработке приложений PowerVR MBX.3D.1.0.67a - стр. 5)

Ответы [ 2 ]

1 голос
/ 21 мая 2009

Полагаю, вы обдумываете шаг "программного преобразования". Я предполагаю, что у вас есть какой-то массив вершин для ОДНОГО квадрата и вы хотите объединить несколько различных экземпляров этого массива в один большой массив, содержащий все вершины для ваших квадратов, а затем, наконец, нарисовать большой массив.

В этом случае большой массив будет содержать предварительно преобразованные данные вершин, которые затем отправляются в графический процессор за один вызов отрисовки. Поскольку вы знаете, сколько квадратов вы собираетесь нарисовать, скажите N из них. Этот массив должен содержать N * 4 * 3 элементов (при условии, что вы работаете в 3d и, следовательно, имеете 3 координаты на вершину).

Затем шаг программного преобразования выполняет итерацию по всем квадратам и добавляет преобразованные данные в большой массив, который, в свою очередь, может быть нарисован с помощью вызова glVertexPointer () .

Однако я немного скептически отношусь к этому шагу программного преобразования. Это означает, что вы позаботитесь обо всех этих преобразованиях самостоятельно, что означает, что вы не используете возможности графического процессора. То есть вы будете использовать мощность процессора, а не мощность графического процессора, чтобы получить ваши преобразованные координаты. Лично я бы начал с создания атласа текстуры, а затем сгенерировал бы все координаты текстуры для каждого квадрата. Это нужно только один раз, так как координаты текстуры не изменятся. Затем вы можете использовать координаты текстуры путем вызова glTextureCoordPointer () перед тем, как вы начнете рисовать свои квадраты (нажмите матрицу i, нарисовать квад, поп-матрицу и т. Д.)

Edit:

Да, это то, что я хочу. Уверены ли вы это медленнее на процессоре? из чего они говорят накладные расходы на звонки несколько раз glVertexPointer и glDrawArrays будет медленнее.

Я забираю свой скептицизм! :) Почему бы вам не предпринять какие-либо меры, просто ради этого? Компромисс должен, по крайней мере, заключаться в том, что вы должны перетасовывать намного больше данных. Поэтому, если графический процессор не может хранить все эти данные, могут потребоваться обычные преобразования.

О, есть еще одна вещь. Как только бабочка перемещается, ее данные должны быть преобразованы вручную, это не нужно, если вы позволяете графическому процессору преобразовывать данные для вас. Таким образом, вы должны пометить какое-то состояние для каждого экземпляра, когда оно грязное, и вам необходимо выполнить повторное преобразование перед выполнением вызова отрисовки.

0 голосов
/ 21 мая 2009

Похоже, вы хотите использовать индексы? См. GlDrawElements.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...