OpenGL: мультитекстурирование массива связанных четырехугольников

Недавно я закончил свою систему для загрузки массива квадов в VBO. Эта система позволяет квадроциклам использовать общие вершины для экономии значительного объема памяти. Например, массив 100x100 quads обычно использует 100x100x4=40000 вершин (4 вершины на quad), но с этой системой будет использоваться только 101x101=10201 вершина. Это огромная экономия места, когда вы получаете еще большие масштабы.

Моя проблема заключается в том, что для текстурирования каждого четырехугольника по отдельности каждой вершине нужна пара координат «UV» (или координата «ST») для сопоставления одной части текстуры. Это приводит к проблеме, как текстурировать каждый квадрат независимо друг от друга? Даже если два одинаковых текстурированных четырехугольника находятся рядом друг с другом, я не могу использовать одну и ту же текстурную координату для обоих четырехугольников. Это показано ниже: введите здесь описание изображения

*Каждый четырехугольник имеет размер 16x16 пикселей, а координаты текстуры имеют диапазон от 0 до 1.

Чтобы еще больше усложнить ситуацию, некоторых четырехугольников в массиве может вообще не быть (потому что эта часть ландшафта — просто пустой блок). Итак, как вы могли догадаться, это движок рендеринга для тех игр с 2D-тайлами, которые все пытаются сделать.

Есть ли способ текстурировать квадроциклы, используя технику сохранения вершин, или мне просто придется отказаться от этого метода и использовать менее эффективный способ?


person CoderTheTyler    schedule 05.08.2013    source источник


Ответы (1)


Вы не можете.

Вершины в OpenGL представляют собой набор данных. Они могут содержать позиции, но они также содержат координаты текстуры или другие вещи. Каждая вершина, каждый набор позиций/координат/и т. д. должен быть уникальным. Поэтому, если вам нужно связать одну и ту же позицию с разными координатами текстуры, у вас будут разные вершины.

person Nicol Bolas    schedule 05.08.2013
comment
Я боялся этого... Ну ладно. Думаю, я просто соглашусь на большое количество вершин. Возможно инстанс рендеринг.. Спасибо за помощь! - person CoderTheTyler; 06.08.2013
comment
@MrDoctorProfessorTyler: Нет; инстансный рендеринг вам не поможет. - person Nicol Bolas; 06.08.2013