Comprender cómo crear / usar texturas para juegos cuando está limitado por el poder de dos tamaños

8

Tengo algunas preguntas sobre la creación de gráficos para un juego.

Como ejemplo. Quiero crear una moto. (1 píxel = 1 centímetro) Entonces mi moto tendrá 200 de ancho y 150 de altura. (200x150) ¡Pero el libgdx solo permite cargar tamaños con la potencia de 2 ?! (2,4,8,16, ...)

Primero pensé de esa manera. Crearé mi bicicleta con el tamaño (200x150) y la guardaré como png. Luego, lo abriré nuevamente (por ejemplo, con gimp), cambia el tamaño de la imagen a un tamaño que use valores con una potencia de 2 (128x128). Cargaré eso como textura en el programa y estableceré el ancho como 200 y la altura como 150.

¿Pero no sería un problema? Porque perderé información de píxeles cuando haga la primera conversación. ¿No es así?

Matthias Reisner
fuente
1
Libgdx tiene un empaquetador de texturas que combinará sus imágenes en algunas imágenes más grandes (atlas) y lo ayudará a dibujar solo la parte que desea.
Matsemann

Respuestas:

11

La razón por la que está limitado a la potencia de dos tamaños se debe a cómo funciona el video ram. Tenga en cuenta que lo que debe hacer es hacer que la imagen tenga la siguiente potencia más alta de dos (.e. 512x256), y luego simplemente use una parte de esa imagen para sus gráficos. Estaría configurando sus coordenadas UV para usar solo una subsección de la imagen en los triángulos que esté renderizando.

Si le preocupa el uso de la memoria, también puede usar parte del espacio sobrante en diferentes objetos y asignar esos objetos a esa parte de la textura. Hacer una textura como esta también se conoce como un "atlas".

Tétrada
fuente
44
Vale la pena mencionar que los atlas también optimizan el rendimiento, porque cuanto menos cambies las texturas, menos lotes, un dibujo más rápido.
Gustavo Maciel
3

Debe usar coordenadas de textura en lugar de cambiar el tamaño, como dibujar solo una parte de la textura completa. No sé cómo funciona en libgdx, pero es común usar este enfoque. Otro enfoque es usar el atlas de textura, que tiene en la memoria, por ejemplo, 1024x1024 y luego, cuando carga su imagen, la carga en un rectángulo de atlas.

Yevhen
fuente
0

Puede convertir el tamaño de su imagen un poco más grande o más pequeño según el tamaño apropiado. Había usado este enlace: http://www.garyshood.com/imageconvert/ Puede usar un tamaño que sería completamente divisible por 2. Por ejemplo, si el tamaño de su imagen es 200, entonces 200/2 = 100; 100 / 2 = 50; 50/2 = 25, entonces aquí 25 no es divisible por 2. Por lo tanto, 200 no es un tamaño apropiado. Puede usar 1024, 512, 256, 128, etc. Y luego puede usar partes de esa imagen en sus gráficos. La otra alternativa sería combinar todas sus texturas en el atlas de textura fácilmente usando la GUI libgdx Texture Packer y luego usar la textura de ese atlas.

alex
fuente