Множество объектов с разными текстурами в OpenGL ES 2.0 - PullRequest
1 голос
/ 22 ноября 2011

Я новичок в OpenGL ES 2.0 с его программируемым конвейером, и я портирую приложение, которое отображает множество объектов с разными текстурами.Так что это потребует вызова glDrawArrays для каждого объекта и изменения текстур между вызовами?Или есть другой способ рисовать несколько объектов с разными текстурами с помощью одного вызова glDrawArrays?

Я спрашиваю, потому что заметил, что выполнение многих вызовов glDrawArrays НАМНОГО медленнее, когда они пытаются использовать их вместо glBegin / glEnd сdesktop 'OpenGL.

Я рендерирую листы карты, чтобы ВСЕ текстуры были разными, они динамически загружались (не могли тратить много времени на их обработку, как если бы они были загружены один раз), а также довольно велики (до 512x512).).

1 Ответ

3 голосов
/ 22 ноября 2011

К сожалению, не существует простого встроенного способа применения нескольких текстур в одном пакетном вызове glDrawArrays.Однако есть способы заставить его работать.Одна из наиболее распространенных стратегий известна как Атлас Текстур.По сути, идея состоит в том, чтобы объединить множество изображений в одну более крупную текстуру, где каждое вспомогательное изображение занимает известный прямоугольник текстуры.Когда вы отображаете их на свои примитивы, вы предоставляете координаты под прямоугольника, соответствующего изображению, которое вы хотите отобразить.

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

Если вы не использовали OpenGLES, вы также можете изучить использование текстурных массивов, если все ваши текстуры имеют одинаковый размер.

...