Понимание того, как создавать / использовать текстуры для игр, когда они ограничены силой двух размеров

8

У меня есть несколько вопросов о создании графики для игры.

Например. Я хочу создать мотоцикл. (1 пиксель = 1 сантиметр) Так что мой мотоцикл будет иметь ширину 200 и высоту 150. (200x150) Но libgdx позволяет загружать только размеры со степенью 2 ?! (2,4,8,16, ...)

Сначала я думал об этом. Я создам свой велосипед с размером (200x150) и сохраню его в формате png. Затем я открою его снова (например, с помощью gimp) и изменим размер изображения до размера, который использует значения со степенью 2 (128x128). Я загрузлю это как текстуру в программе и установлю ширину как 200 и высоту как 150.

Но не будет ли это проблемой? Потому что я потеряю некоторую информацию о пикселях при первом разговоре.?! Не так ли?

Матиас Рейснер
источник
1
В Libgdx есть упаковщик текстур, который объединит ваши изображения с несколькими большими изображениями (атласы) и поможет вам нарисовать только ту его часть, которую вы хотите.
Мацеманн

Ответы:

11

Причина, по которой вы ограничены степенями двух размеров, связана с тем, как работает видеопамять. Обратите внимание, что обычно вы должны сделать изображение следующей по величине степенью двойки (т.е. 512x256), а затем просто использовать часть этого изображения для своей графики. Вы бы установили свои UV-координаты, чтобы использовать только часть изображения для любых треугольников, которые вы визуализируете.

Если вы беспокоитесь об использовании памяти, вы также можете использовать часть оставшегося пространства на разных объектах и ​​UV-отображение этих объектов на эту часть текстуры. Создание такой текстуры также называется «атлас».

тетрада
источник
4
Стоит отметить, что атласы также оптимизируют производительность, потому что чем меньше вы переключаете текстуры, тем меньше пакетов, тем быстрее рисуется.
Густаво Масиэль
3

Вы должны использовать координаты текстуры вместо изменения размера, например, рисовать только часть всей текстуры. Я не знаю, как это работает в libgdx, но этот подход распространен. Другой подход заключается в использовании текстурного атласа, который у вас есть в памяти, например, 1024x1024, а затем, когда вы загружаете свое изображение, вы загружаете его в прямоугольник атласа.

Евгений
источник
0

Вы можете преобразовать размер вашего изображения немного больше или меньше в зависимости от размера. Я использовал эту ссылку - http://www.garyshood.com/imageconvert/ Вы можете использовать размер, который будет полностью делиться на 2. Например, если размер вашего изображения составляет 200, то 200/2 = 100; 100 / 2 = 50; 50/2 = 25, поэтому здесь 25 не делится на 2. Следовательно, 200 не является подходящим размером. Вы можете использовать 1024, 512, 256, 128 и т. Д. И затем вы можете использовать части этого изображения в вашей графике. Другой альтернативой было бы объединить все ваши текстуры в атласе текстур с помощью графического интерфейса libgdx Texture Packer и затем использовать текстуру из этого атласа.

Алекс
источник