IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Pb de texture Opengl <-> Bitmap


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Par défaut Pb de texture Opengl <-> Bitmap
    Bonjour,

    dsl de faire encore un nouveau post la dessus mais je n'arrive pas à trouver la solution à mon pb

    J'ai fait une methode de chargement de bitmap ( en C++ ) qui me renvoi un objet Bitmap (que j'ai fait aussi ) et cette objet est passé en texture à mapper sur un carré, dessiné avec opengl, de la taille de l'image.

    Seulement le problem c que cela ne marche pas, je n'arrive pas à parametrer correctement glTexImage2D et la taille de mon buffer pour les données de l'image.

    Si j'ai bien compris, pour mon fichier bitmap (non compresse) de profondeur 8 bits, la couleur de chaque pixels est stockée sur 1 octets
    Donc j'en deduit que la taille du buffer de données devrait etre de taille :
    Largeur * hauteur
    donc mon buffer est :
    unsigned char * imagedata = (unsigned char*)malloc(nbByteInBitmap);


    et voila comment j'ai ecrit glTexImage2D
    glTexImage2D(GL_TEXTURE_2D, 0, 3, _TextureImage->_ImageHeader.bmp_largeur, _TextureImage->_ImageHeader.bmp_hauteur, 0, GL_RGB, GL_UNSIGNED_BYTE, _TextureImage->_imagedata);
    mais voila j'ai un crash sur cette ligne

    en revanche si je multiple la taille de mon buffer par 3 sa passe mais l'image n'est pas correctement affichée

    si ca vous dit qqc je suis preneur..

    merci

    PS : mon image est en 128 * 128 donc multiple de 2.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le x3 vient du format que tu spécifies : GL_RGB, soit 3 composantes par pixel. Si ton image source est en niveaux de gris 8 bits, tu devrais utiliser GL_LUMINANCE.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Par défaut
    J'ai essayé ta solution est en effet l'image est affichée mais en niveau de gris, mais mon image est en 256 couleurs.
    SI je remet RGB j'ai de nouveau le crash

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    8 bits 256 couleurs c'est du palettisé, or moi je pensais que tu étais sur du niveau de gris. Je crois qu'OpenGL gère ça, mais honêtement tu pourrais passer à quelque chose de moins antique (à moins que ta plateforme t'impose certaines contraintes).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Par défaut
    dsl pour le manque de precision..

    en fait ma plateforme ne m'oblige a rien (Windows Xp 32 bits), mais n'ayant pas connaissance des API permetttant de charger un bitmap je me suis lancé dans le dev de mon propre loader, le but du loader est d'appliquer des textures sur des models directX (chargé sans directX).

    Mais maintenant que mon code est fait, j'aimerai bien le faire tourner correctement.

    Mais je suis ouvert à toute proposition pour le faire evoluer vers un truc plus stable.

    Une question rapide, le fait que l'image soit palettisee signifie que du coup les valeurs pour les pixels sont donc les indices dans la palette. Mais en revanche, ou est stockée la palette ? Est ce une palette standard ?
    (je pose la question mais je n'ai pas encore cherche sur le net)

    merci pour les infos

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il me semble que la palette est stockée dans le bmp.

    Par contre tu ferais mieux d'utiliser une bibliothèque de chargement d'image :
    http://c.developpez.com/faq/cpp/?pag...ERALITE_images

    Perso j'utilise DevIL (OpenIL), très simple à utiliser et qui supporte tous les formats habituels (même le dds, que tu pourras rencontrer avec les modèles DirectX). Parce que bon, si tu recodes le chargement de tous les formats...

  7. #7
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    Citation Envoyé par _chafouin_
    J'ai essayé ta solution est en effet l'image est affichée mais en niveau de gris, mais mon image est en 256 couleurs.
    SI je remet RGB j'ai de nouveau le crash
    pour une image 8 bits (256 couleurs) il y a GL_RGB8
    mais comme le dit Laurent, passer en 24/32 bits serait moins archaique et Devil est la bibliothèque la plus performante
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    GL_RGB8 est plutôt un remplacement pour le 3ème paramètre (le format interne de la texture), où plutôt que de simplement dire qu'on veut 3 composantes, on précise leur rôle et leur taille.
    Mais je ne pense pas que ça aide plus que ça pour le 8 bits palettisé

  9. #9
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    en effet, ca n'aide pas du tout pour du palettisé et a priori, je ne connait rien pour charger des texture en palettisé sans recopier la LUT directement dans l'image (donc passer de palettisé a RGB standard). On peut créer un render buffer palettisé, mais pour les textures, je ne sais pas
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Par défaut
    bon bonne nouvelle j'ai resolu mon problem...

    En fait grace a vos info, j'ai compris comment etait fait mon fichier. Il est bien palettisé et en fait je ne chargeait pas la palette.

    Donc j'ai modifier le truc et j'ai chargé la palette et pour simplifier le chargement dans opengl, je fait moi meme la transformation en 24 bits.
    A partir de la palette et des indices contenu dans le buffer de l'image, je recrée une matrice au foramt RGB.

    Je la passe en argument a Opengl au format RGB et l'affaire est reglée...

    merci pour vos infos

  11. #11
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    il faut spécifier GL_RGB8 pour dire que l'image est palettisée, et le 7ème paramètre de glTexImage (format) doit être GL_COLOR_INDEX pour dire que les données sont des indices de couleur

    sauf que si la carte ne supporte pas l'extension GL_EXT_texture_color_table ça ne servira à rien vu que c'est la seule solution pour spécifier à opengl la palette à utiliser
    http://developer.3dlabs.com/document...ortableext.htm

    donc il faut convertir l'image 8 bits indexée en 24 (ou 32) bits

    vu le faible nombre de carte supportant l'extension et l'utilité de textures 8 bits, autant utiliser directement des images 24 ou 32 bits
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. perte texture opengl
    Par Duguesclin dans le forum OpenGL
    Réponses: 1
    Dernier message: 05/08/2006, 18h28
  2. [DevIL] Aide DevIL pour chargement texture Opengl
    Par CPPTryer dans le forum DevIL
    Réponses: 1
    Dernier message: 10/02/2006, 16h47
  3. texture opengl-sdl
    Par ffomnislash dans le forum OpenGL
    Réponses: 20
    Dernier message: 21/07/2005, 12h14
  4. application de texture opengl
    Par batman60 dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/06/2005, 17h08
  5. [ActiveX] Texturing OpenGL
    Par MaGaX dans le forum OpenGL
    Réponses: 10
    Dernier message: 17/03/2005, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo