OpenGL ES 1.1 несколько текстур на сетку - PullRequest
2 голосов
/ 07 января 2011

Я очень новичок в OpenGL, поэтому извините, если это может быть очень простой (или не имеет смысла).

Я работаю над 2D-игрой, в которой есть многоспрайты, размер которых не является степенью двойки.Таким образом, у меня будут текстуры, например, 520x260, которые нельзя изменить.Теперь я понимаю, что поскольку OpenGL ES 1 требует, чтобы текстуры имели степень двойки, я фактически буду тратить много памяти (так как текстура в моем предыдущем примере на аппаратном уровне фактически будет занимать 1024x512).

Я думал о том, что вместо того, чтобы спрайт представлял собой два треугольника с этой одной большой текстурой, я мог бы сделать спрайт из более мелких треугольников, и что я мог бы разбить на большую текстуру в более мелких кусках pow2(скажем, 128x128), который можно использовать отдельно для этих треугольников (используя что-то вроде карты сетки).

Итак, мой вопрос: возможно ли и возможно ли использовать несколько текстур для одной сетки?И если да, то будут ли дополнительные вычисления (необходимые для всех меньших треугольников и их текстурирование) стоить сохранения памяти текстур?

PS Я работаю на Android, но не думаю, что это имеет большое значение.

Ответы [ 2 ]

1 голос
/ 07 января 2011

Я почти уверен, что текстуры не должны быть такими же размерами, как ваши спрайты.Если у вас есть спрайты 520x260, вы сможете уменьшить текстуру до 512x256 и отобразить ее поверх спрайта, не заметив немного меньшее разрешение.

1 голос
/ 07 января 2011

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

Например, скажем, вы хотите поместить три текстуры в сетку 128x128:

+-----------------+
|1.               |
|     128x64      |
|                 |
+-----------------+
|2.      |3.      |
| 64x64  |  64x64 |
|        |        |
+--------+--------+

Если вы хотите отобразить каждую текстуру, ваши UV-координаты будут следующими:

  1. от (0,0, 0,0) до (1,0, 0,5)
  2. от (0,0, 0,5) до (0,5, 1,0)
  3. от (0,5, 0,5) до (1,0, 1,0)

Вы должны будете соответственно перевести их на свои вершины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...