2016-06-11 5 views
1

У меня много мелких изображений, и эти изображения можно комбинировать как большие. Теперь я использую VBO для этого, и это действительно так. Часть функции рендеринга такова:сделать много текстур с помощью vbo с помощью JOGL

for (int i = 0; i < mListTexData.size(); i++) { 
    gl.glBindTexture(GL2.GL_TEXTURE_2D, mTexturesIDs.get(i)); 
    gl.glDrawArrays(GL2.GL_QUADS, i*4, 4); 
} 

Интересно, есть ли более удобный способ для этого. Thx.

+0

Сколько? Все ли они одинакового размера? Могут ли они измениться или остаться неизменными? – elect

+0

Число не фиксировано. Может быть, сотни изображений. Нет, они не могут и могут быть заменены другими изображениями. Вершины должны быть изменены при замене изображений.Thx для ответа – Yipx

+0

У вас есть относительно небольшое количество разных размеров? – elect

ответ

0

У вас есть несколько возможностей:

  • использовать атлас, одна большая текстура, где у вас есть все маленькие текстуры внутри, что-то вроде this. Вы можете, конечно, обновить его, то есть переписать (часть) его. Pro: один уникальные окончательные текстуры связывание Минусов: пришлись рассчитать всю координаты текстуры для каждого суб-изображений

  • вы можете использовать несколько текстурных массивы, по одному для каждого различного размера. Затем вы выберете правильное изображение с однородной переменной или атрибутом вершины. Pro: несколько привязок текстур. Минусы: вам нужно уничтожить-восстановить его, если текстура должна быть удалена (вы можете создать массив текстур с жестко закодированной длиной)

  • Вы просто продолжаете делать то, что вы уже делаете. Pro: самый простой подход. Я настоятельно рекомендую вам начать так. Профиль, узнайте, является ли это узким местом, и если да, улучшите. Минусы: может быть неэффективным в зависимости от ситуации

Ps: GL_QUADS осуждается, используйте обычный GL_TRIANGLES

Смежные вопросы