Comprendre comment créer / utiliser des textures pour les jeux lorsqu'ils sont limités par la puissance de deux tailles

8

J'ai des questions sur la création de graphiques pour un jeu.

Par exemple. Je veux créer une moto. (1pixel = 1 centimètre) Donc ma moto aura 200 largeur et 150 hauteur. (200x150) Mais le libgdx ne permet de charger des tailles qu'avec la puissance de 2?! (2,4,8,16, ...)

J'ai d'abord pensé à ça. Je vais créer mon vélo avec la taille (200x150) et l'enregistrer en png. Ensuite, je vais l'ouvrir à nouveau (par exemple avec gimp) redimensionner l'image à une taille qui utilise des valeurs avec une puissance de 2 (128x128). Je vais charger cela comme texture dans le programme et définir une largeur de 200 et une hauteur de 150.

Mais ne serait-ce pas un problème? Parce que je perdrai des informations sur les pixels lors de la première conversation.?! N'est-ce pas?

Matthias Reisner
la source
1
Libgdx a un pack de texture qui combinera vos images à quelques images plus grandes (atlas) et vous aidera à n'en dessiner que la partie que vous voulez.
Matsemann

Réponses:

11

La raison pour laquelle vous êtes limité à la puissance de deux tailles est due au fonctionnement du ram vidéo. Notez que ce que vous devez faire est généralement de faire de l'image la deuxième puissance la plus élevée de deux (.e. 512x256), puis d'utiliser simplement une partie de cette image pour vos graphiques. Vous définiriez vos coordonnées UV pour n'utiliser qu'une sous-section de l'image sur les triangles que vous effectuez.

Si vous êtes préoccupé par l'utilisation de la mémoire, vous pouvez également utiliser une partie de l'espace restant sur différents objets et mapper ces objets UV à cette partie de la texture. Faire une texture comme celle-ci est également connu comme un "atlas".

Tetrad
la source
4
Il convient de mentionner que les atlas optimisent également les performances, car moins vous changez de textures, moins de lots, plus le dessin est rapide.
Gustavo Maciel
3

Vous devez utiliser les coordonnées de texture au lieu de redimensionner, comme dessiner seulement une partie de la texture entière. Je ne sais pas comment cela fonctionne dans libgdx mais il est courant d'utiliser cette approche. Une autre approche consiste à utiliser un atlas de texture, vous avez en mémoire par exemple 1024x1024, puis lorsque vous chargez votre image, vous la chargez dans un rectangle d'atlas.

Yevhen
la source
0

Vous pouvez convertir la taille de votre image un peu plus ou moins en fonction de la taille appropriée. J'avais utilisé ce lien - http://www.garyshood.com/imageconvert/ Vous pouvez utiliser une taille qui serait complètement divisible par 2. Par exemple, si la taille de votre image est 200, alors 200/2 = 100; 100 / 2 = 50; 50/2 = 25, donc ici 25 n'est pas divisible par 2. Par conséquent, 200 n'est pas une taille appropriée. Vous pouvez utiliser 1024, 512, 256, 128 et ainsi de suite .. Et puis vous pouvez utiliser des parties de cette image dans vos graphiques. L'autre alternative serait de combiner facilement toutes vos textures dans l'atlas de texture à l'aide de l'interface graphique de libgdx Texture Packer, puis d'utiliser la texture de cet atlas.

alex
la source