VBO для тайла карты (порядок прорисовки и наклонная антенна 2D) - PullRequest
0 голосов
/ 17 августа 2011

Я хочу нарисовать карту тайлов в (ANSI C, C99 нельзя использовать из-за совместимости с Windows), в которой для ускорения графики используется GL, хотя игра представляет собой двухмерную перспективу сверху вниз с использованием текстурированных четырехугольников.Похоже, популярное мнение о работе с временной картой использует объект буфера вершин GL, который я собираюсь написать.Однако я понял, что хочу, чтобы некоторые плитки выходили за пределы вертикальных границ, имитируя наклонный вид с воздуха.Это сделает все, что находится непосредственно над блоком, частично покрытым плиткой.Если я использую VBO здесь, мне нужно будет нарисовать всю плитку за один присест.Это означает, что любой объект, который я нарисую впоследствии, будет находиться непосредственно над плиткой.

Какой самый разумный подход к этой проблеме?Должен ли я сначала нарисовать карту тайлов, затем сущности (игроки / враги), а затем лишнее вертикальное пространство, чтобы они покрывали сущности, и, наконец, эффекты, которые отображаются над обоими?(например, выстрелы, взрывы и так далее).Но это поставило бы меня перед вопросом о том, что кадры не покрыты рельефом, и если я изменю порядок, рельеф неловко покрывает большие взрывы.В качестве альтернативы я могу отсортировать все визуальные объекты и нарисовать их сверху вниз, но это означало бы, что мне нужно часто менять текстуры, поскольку сортировка по текстуре в этом конкретном случае не слишком поможет.

Какну, я хочу иметь возможность динамически изменять цвета каждой отдельной вершины в сетке, чтобы объекты могли преобразовывать цвета в карту.Из того, что я понимаю, путь для достижения этого был бы с помощью вершинного шейдера.Это правильно?

РЕДАКТИРОВАТЬ: Последнее.Если я нарисую VBO, как та карта тайла, которая больше экрана, переводя, переводит ли GL автоматически выбрасывание лиц вне поля зрения или мне нужно изменить VBO каждый раз, когда я перемещаю «камеру»?

Ответы [ 2 ]

1 голос
/ 18 августа 2011

VBO - это просто часть абстрактной памяти, зарезервированная в графической памяти.Вы можете разместить данные в любом макете и расположении, как вам нравится.Вы можете использовать один VBO для хранения нескольких независимых мешей. gl {Vertex, Normal, TexCoord, Color, Attrib} Pointer Функции используются для установки смещения в память, что означает либо адресное пространство процесса, либо смещение в связанный VBO.

Более того, один разможно легко нарисовать только подмножества связанных данных с помощью glDrawArrays и glDrawElements , выбрав в качестве первого элемента или первого индекса индексы в буфере индекса.

Итак, нет, вы нене нужно рисовать целые VBO.

0 голосов
/ 18 августа 2011

Я действительно ответил на свой вопрос.Мне нужно было разделить карту на две части: блоки с пустым пространством сверху, а затем остальные.Эффекты будут прорисованы в два прохода: «обычный» и «верхний» «слой»

Я чувствую себя довольно плохо из-за бесполезного вопроса, лежащего без дела, поэтому, если какой-то администратор должен удалить его, пожалуйста, продолжайте.

...