ImageMagick et les textures openGL

ImageMagick et les textures openGL - C++ - Programmation

Marsh Posté le 07-03-2003 à 17:37:10    

Bonjour !
 
J'essaye d'ouvrir un fichier image avec Magick++ pour pouvoir l'utiliser comme texture pour un modèle 3D.
Je pensais que ce serais tout simple, mais visiblement une subtilité m'échappe.
Au départ, mon code ressemblait à ça :

Code :
  1. // [...]
  2.     Image im;
  3.     bool status = true;
  4.     // lecture de l'image
  5.     try {
  6. im.read(filename);
  7.     }
  8.     catch(exception &e) {
  9. cerr << e.what() << endl;;
  10. status = false;
  11.     }
  12.    
  13.     if (status) {
  14. // blabla de création de texture
  15.         glGenTextures(1, &texPntr[0]);
  16.         glBindTexture(GL_TEXTURE_2D, texPntr[0]);
  17. // utilisation du fichier chargé
  18. glTexImage2D(GL_TEXTURE_2D, 0, 3, im.columns(),  im.rows(), 0, GL_RGBA, GL_UNSIGNED_SHORT, im.getPixels(0,0,im.columns(), im.rows()));
  19. // et encore du blabla
  20.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  21.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  22.     }
  23.     // [...]

 
 
Après j'ai utilisé des ruses de sioux genre

Code :
  1. im.magick("RGBA" );


 
Mais rien n'y fait, mon modèle a toujours une sale tête.
 
Quelqu'un aurait une idée sur la façon de s'y prendre ?
 
Merci

Reply

Marsh Posté le 07-03-2003 à 17:37:10   

Reply

Marsh Posté le 10-03-2003 à 09:50:43    

Bon, j'ai résolu mon problème : ImageMagick inverse les couleurs, donc il faut ruser avec les options.
 

Code :
  1. image.read(nom_de_fichier);  // lecture sur le dd
  2. image.flip();                // inversion de l'image

 
 
Puis, pour la texture en elle-même, l'option de format est GL_BGRA et non GL_RGBA (composante bleue en premier).

Code :
  1. glTexImage2D(GL_TEXTURE_2D, 0, 3, image.columns(), image.rows(), 0,
  2.       GL_BGRA, GL_UNSIGNED_SHORT,
  3.       image.getPixels(0, 0, im.columns(), im.rows()));
  4. // im.columns() : largeur de l'image
  5. // im.rows()    : hauteur de l'image
  6. // im.getPixels(...) : mets les valeurs des pixels dans le cache et renvoi un pointeur dessus.


 
Maintenant, ça a l'air de fonctionner correctement...  
:)  
 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed