Chargement des textures en opengl

Description

Bonjour à tous

En apprenant l'opengl, j'ai remarqué que si on voulait faire quelque chose d'un peu diversifié, on devait faire appel à un grand nombre d'images différentes, créer des textures et les appeler. Ce qui est assez lourd comme méthode car apparemment la fonction : glBindTexture(GL_TEXTURE_2D, textures) est assez gourmande en ressouces.

Je me suis donc inspiré de ceci :

http://jeux.developpez.com/faq/opengl/?page=techniques#TECHNIQUES_meta_texture

L'avantage de la fonction que j'ai codé est qu'elle fait quasiment tout toute seule :p.
Vous verrez que dans les sources il y a un fichier : fichier_textures.txt, il suffit d'y noter le noms des images que l'on souhaite utiliser en tant que texture et la fonction les chargera les unes après les autres (grâce à SDL_Image, elle gère donc les formats : TGA, BMP, PNM, XPM, XCF, PCX, GIF, JPG, TIF, LBM, PNG), créera une SDL_Surface suffisamment grande pour toutes les accueillir, collera les différentes images dessus et créera un index dans une structure (voir "structure.h").

Au final, une fois les noms des textures rentré dans le fichier txt, 1 seul appel de glBindTexture(GL_TEXTURE_2D, textures) suffit et les coordonnées des textures seront :

coordonnees_textures[i].haut_gauche.x coordonnees_textures[i].haut_gauche.y
coordonnees_textures[i].haut_droite.x coordonnees_textures[i].haut_droite.y
coordonnees_textures[i].bas_droite.x coordonnees_textures[i].bas_droite.y
coordonnees_textures[i].bas_gauche.x coordonnees_textures[i].bas_gauche.y

i étant le numéro de l'image, 0 correspond à la première dans le fichier.

On peut donc très facilement passer d'une texture à une autre, simplement en changeant la valeur de i.


Quelques remarques :
-J'ai lu que "normalement" OpenGL ne prend que des textures qui on une taille du type : 2^n, j'ai donc mis dans ma fonction de chargement un bout de code qui cherche la puissance de 2 permettant de faire rentrer toutes les images. Aucune idée si c'est nécessaire :p

-La fonction plante si la taille de la surface d'accueil dépasse 8192 x 8192 pixel, il y a déjà moyen de mettre pas mal de textures, mais je préfère vous prévenir.

[CONTRAINTE SUPPRIMEE LORS DE LA MODIFICATION]
-La seule contrainte sur le fichier .txt est qu'il ne doit pas contenir de ligne vierge, même pas à la fin du fichier, car sinon il la lira et ne trouvera pas de fichier correspondant => plantage.

Voili voilou, j'espère que ma fonction sera utile à certains d'entre vous.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Jackyzgood)