Как использовать разные индексы для массива координат координат и массива вершин, используя glDrawElements - PullRequest
4 голосов
/ 06 августа 2011

Я пытался использовать glDrawElements в моей 2D-игре OpenGL на основе плиток. Однако, когда я рисую плитки, текс-координаты могут быть разными для разных граней в одной и той же вершине: например, здесь текскорды будут разными для двух квадов в общей вершине:

___|
___|___
   |___
   |___

Проблема в том, что glDrawElements принимает только один индексный массив, и поэтому кажется, что я могу использовать только одну координату текс на вершину. Есть ли способ преодолеть это ограничение?

1 Ответ

7 голосов
/ 06 августа 2011

Краткий ответ: Вы этого не сделаете.Вместо этого вы разбиваете свои вершины на уникальные вершины, так что вы можете иметь единый индексный список для каждого атрибута.Если у вас есть несколько списков индексов, вам нужно пройти этот список индексов, реплицируя данные атрибутов (позиции, координаты текстуры и т. Д.) Для любого набора индексов, который не повторяется.

Длинный ответ: Вы не должны .

С современными аппаратными возможностями ( буферные текстуры в OpenGL 3.x и / или загрузка / сохранение изображения шейдера в 4.x), вы можете полностью прекратить конвейер атрибута и произвольно загрузить данные из буферных объектов.Тем не менее, вы не должны ожидать, что это будет почти так же быстро, как просто делать все правильно.

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

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