Является ли EBO избыточным?

#opengl

Вопрос:

Поэтому я понимаю, как работают EBO и VAO, как их создавать, но я не знаю, было бы эффективнее использовать EBO или просто VAO. Насколько я понимаю, EBO полезен, когда у вас повторяющиеся вершины, но что, если мои данные о вершинах имеют, помимо, скажем, положения и нормали, положение текстуры(возможно, даже данные, связанные с анимацией, или что-то еще). Тогда будет очень маловероятно, что все они будут совпадать и получат лучшую память с помощью EBO(что добавит для каждого треугольника еще 3 int). Было бы лучше в таком случае использовать только VAO и не привязывать его к EBO, или есть какая-то работа с этим, например, установка индексов треугольников в EBO и положение текстуры(или любые другие данные, которые он может также содержать) в другом?

Комментарии:

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

2. В моем случае у меня есть только треугольники и квадратики в сетках, а вершины в одном и том же положении могут относиться к разным объектам, которым, скорее всего, будут присвоены разные текстуры и разные нормали. Прошу прощения за путаницу, забыл добавить это в посте

3. Там есть кнопка «редактировать» для добавления информации к вашему вопросу. Кроме того, теперь ваш вопрос звучит так: «У меня есть очень специализированный вариант использования, для которого EBOs, похоже, не подходит. Почему существуют EBOS, если они не подходят для моего варианта использования?»

4. Даже для одного квадрата с только позициями у вас есть 6 вершин * 3 поплавка = 18 байт без EBO, но всего 4 вершины * 3 поплавка 6 int = 18 байт. Это означает, что даже для четырехъядерного компьютера без каких-либо дополнительных атрибутов потребление памяти EBO/без EBO одинаковы. С каждым добавленным атрибутом вы начинаете экономить память с помощью EBO.

5. Если вы беспокоитесь о том, что пространство индексов может перевесить пространство, сохраненное в VBO, просто вычислите его, как это сделал @BDL, но учтите, что вы не ограничены только 32-разрядными индексами для индексов. Вы можете использовать 16-разрядные или даже 8-разрядные целые числа, если вы не собираетесь использовать такое количество индексов. Очевидно, что если ни одна вершина не будет повторена, при использовании EBO не будет сохранена память, но это зависит от вашей конкретной сетки, что это такое?