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 :
- génère le nom d'une image et le lie ;
La même chose qu'OpenGL avec les fonctions glGenTextures() / glBindTexture().
SélectionnezILuint ImgId
=
0
; ilGenImages(1
,&
ImgId); ilBindImage(ImgId); - charge l'image du nom du fichier ;Sélectionnez
ilLoadImage(filename);
- récupère la taille de l'image et alloue de la mémoire pour copier la texture (RVB en octets) ;Sélectionnez
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); - 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.