Я пытаюсь создать 2d карту (для игры, думаю, карту из плиточного мира) в OpenGL ES 2.0 для Android-игры. В принципе, существует несколько типов плитки, которые имеют разные текстуры, а карта генерируется случайным образом из этих типов, поэтому из игры в игру меняется карта, но на протяжении одной игры она остается неизменной.Как текстурировать прямоугольник с несколькими текстурами в OpenGL
Моя первая мысль состояла в том, чтобы сгенерировать одну большую текстуру/изображение/растровое изображение (независимо от OpenGL) заранее, в основном сшивая повторяющиеся текстуры плитки вместе, чтобы сделать большую карту, а затем используя эту единственную текстуру для одного большого прямоугольника карты. В теории я думаю, что это просто и будет работать нормально, но я обеспокоен тем, что он не будет хорошо масштабироваться для больших карт, и особенно на мобильных устройствах. У меня закончится память с такой большой картинной картой. Кроме того, есть небольшой набор плиток, которые дублируются снова и снова, поэтому кажется, что огромные отходы дублируют данные пикселей в большой текстуре снова и снова.
Моей второй мыслью было много текстур, по одному для каждой текстуры плитки. Но я не уверен, как это будет работать, с текстурной привязкой, мне нужны шейдеры, чтобы содержать несколько ссылок на текстуры, а в шейдере есть логика для использования правильной?
Наконец-то я подумал, что использование текстурного атласа может работать, иметь одну текстуру/изображение со всеми данными плитки в нем, это было бы относительно мало. Но я изо всех сил пытаюсь представить, как заставить математику работать так, чтобы «плитки» или подразделы прямоугольника карты использовали совершенно разные координаты текстуры.
Я подхожу к этому неправильно? Должен ли я использовать прямоугольник для каждой плитки? По крайней мере, таким образом я могу передавать шейдеры как вершины, так и текстурные координаты для каждой плитки независимо. Это кажется более простым, но также кажется неправильным, так как карта действительно представляет собой только один прямоугольник, который не будет меняться.