Comment charger une image avec DevIL et l'afficher avec OpenGL

| JeGX | Alexandre Laurent |

Traducteur

Jérôme Marsaguet

Comme je l'avais promis dans ce sujet, voici un tutoriel sur DevIL. Ce tutoriel présente une façon de charger un fichier image et de l'utiliser comme texture dans OpenGL. Nous utiliserons DevIL 1.7.5.

Commentez

- Titre : Comment charger une image avec DevIL et l'afficher avec OpenGL

- Auteurs : JeGX, Alexandre Laurent

- Traducteur : Jérôme Marsaguet

- Parution : 21 février 2013

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Geeks3D. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Devil

- II. Introduction

- III. DevIL et OpenGL

- IV. Chargement d'une image

- V. Accès au tampon de l'image

- VI. Remerciements

I - Devil

Chanson de DevIL :

« La la la, une bibliothèque d'images multiplateforme utilisant une

syntaxe simple pour charger, enregistrer, convertir, manipuler, filtrer et

afficher une variété d'images en toute simplicité, la la la »

II - Introduction

Ceci est le premier vrai tutoriel sur Geeks3D. J'ai un million de tutoriels à écrire et un blog est l'endroit parfait pour cela en raison de la forte interaction avec vous, cher lecteur. Pour ceux qui connaissent mon travail sur le site oZone3D.Net, les tutoriels de Geeks3D peuvent être considérés comme la suite…

Ceci dit, plongeons-nous dans DevIL.

III - DevIL et OpenGL

DevIL (également connu sous le nom d'OpenIL) est une bibliothèque d'images permettant le chargement et la manipulation (filtrage, redimensionnement) d'images. Le développeur de DevIL, Denton Woods, avait mis le projet en sommeil pendant deux ans, mais a récemment relancé le codage de DevIL. C'est pourquoi cela vaut la peine de connaître cette bibliothèque cool.

DevIL suit la philosophie d'OpenGL dans la syntaxe des fonctions et la manière dont nous les utilisons. Donc si vous êtes habitué à OpenGL, vous devriez être opérationnel avec DevIL en quelques minutes. DevIL est Open Source et devrait être libre pour des projets commerciaux et non commerciaux. J'ai dit « devrait », car je n'ai pas trouvé de texte de licence clair…

Vous pouvez trouver plus d'informations sur DevIL ICI.

IV - Chargement d'une image

Le tutoriel que je propose montre une façon de charger une image JPG et l'utiliser en tant que données RVB codées sur des octets pour appliquer une texture sur un quadrilatère. Le noyau du tutoriel est la fonction DevILTextureLoader() (dans le fichier ctexture.cpp).

Fondamentalement, cette fonction effectue les étapes suivantes :

1. génère le nom d'une image et le lie ;

La même chose qu'OpenGL avec les fonctions glGenTextures() / glBindTexture().

ILuint ImgId = 0;

ilGenImages(1, &ImgId);

ilBindImage(ImgId);

2. charge l'image du nom du fichier ;

ilLoadImage(filename);

3. récupère la taille de l'image et alloue de la mémoire pour copier la texture (RVB en octets) ;

width = ilGetInteger(IL_IMAGE_WIDTH);

height = ilGetInteger(IL_IMAGE_HEIGHT);

pixmap = new BYTE[width * height * 3];

ilCopyPixels(0, 0, 0, width, height, 1, IL_RGB,

IL_UNSIGNED_BYTE, pixmap);

4. délie l'image et libère la mémoire de l'image DevIL.

ilBindImage(0);

ilDeleteImage(ImgId);

V - Accès au tampon de l'image

Selon votre application, l'étape 3 n'est pas nécessaire. DevIL garde un tampon mémoire avec les données de l'image lié au nom de l'image (ImgId dans notre exemple). Vous pouvez accéder directement au tampon de l'image DevIL comme ceci :

ilBindImage(ImgId);

BYTE* data = ilGetData();

IlGetData() permet d'obtenir un pointeur direct sur le pointeur actuel lié à l'image. Ainsi, tant que le nom de l'image est valide, vous pouvez utiliser les données pointées par ilGetData().

OK, je pense que ce court tutoriel est suffisant pour débuter avec DevIL. Pour rendre votre vie de geek plus facile, j'ai préparé un projet Visual C++ 2005 prêt à être compilé. Ce projet contient tout ce dont vous avez besoin pour créer l'exécutable de démo : les données et les fichiers DevIL (*.h + *.dll + *.lib). Vous pouvez télécharger le projet ici.

Amusez-vous !

VI - Remerciements

Cet article est une traduction autorisée de l'article paru sur Geeks3D.com.

Je tiens à remercier LittleWhite pour sa relecture lors de la traduction de cet article, ainsi que zoom61 pour ses corrections.