OpenGL текстурное отображение без дублированных вершин - PullRequest
1 голос
/ 30 января 2020

Я уже некоторое время использую OpenGL, и сейчас я занимаюсь оптимизацией различных аспектов моего приложения.

Вот проблема: в некоторых случаях я в конечном итоге дублирующие вершины для наложения текстур. Я много пользуюсь этой книгой: http://staff.fit.ac.cy/eng.ap/FALL2017/3d-game-development-with-lwjgl.pdf

Вы можете go перейти на страницы 70-71 и посмотреть проблему и предлагаемое решение. По сути, это говорит о том, что когда вершина должна иметь разные координаты текстуры для разных граней - вы должны продублировать эту вершину. И это единственное решение.

Но я сомневаюсь - не так ли? У многих UV-карт будут случаи, когда координаты немного обрезаются для вершин. Т.е. вершины имеют разные координаты. Дублирование их кажется огромной тратой.

Есть ли способ сделать это по-другому?

1 Ответ

2 голосов
/ 30 января 2020

Вершина - это не просто позиция. Вершина - это весь вектор положения, цвета, координаты текстуры и любых других атрибутов, которые вы в нее вкладываете.

Но я сомневаюсь - это?

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

Есть ли способ сделать это по-другому?

Вы можете использовать различные массивы для каждого атрибута, затем есть первичный индексный массив для адресации во вторичные индексные массивы, по одному для каждого атрибута, которые затем выполняют поиск для каждого атрибута.

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

В целом, способ дублирования позиций вершин также является наиболее эффективным.

...