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 :

charger une texture TGA


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Par défaut charger une texture TGA
    salut

    j'ai trouvé un loader tga ICI, j'ai l'utilisé pour plaquer une texture de format .tga sur un cube et ça fonctionne bien.

    j'ai convertis quelques textures du format bmp et jpeg vers .tga pour les utilisés mais lors du placage la couleur de la texture change !!! si la texture est maron elle devient violet !!!

    j'ai essayé de trouver dex texture directement .tga (sans les convertir) mais j'ai pas trouvé !!!

    Une autre question: est ce que l'utilisation des bmp ou jpeg ou tga donne le meme résultat ou il y a des avantages au plus dans un format ?

  2. #2
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Alors, il faut savoir que les differents formats de fichier ont chacun des particuliarités ( compression , couleur transparente, nombre de couches etc ) et autre, qui font qu'a la sauvegarde on peut obtenir des images dans le même formats mais qui ne se liront pas exactement de la même façon.

    Du coup si ton loader n'est pas spécialement aboutit, et que tu lui envoie une image que tu as crées toi même mais pas sauvegardé de la bonne façon, il l'interpretera mal et créera un objet texture foireux pour opengl.

    Penche toi sur glTexImage, c'est la fonction qui crée l'objet texture sur la carte graphique, mais il faut lui passer les attributs exacts, selon de comment ton image est faite

    Il faut savoir aussi qu'opengl est optimisé pour bosser sur des textures de taille 512 x 512 , donc essaie d'avoir des images de cette taille , ou du moins de taille en puissance de 2.

    Ceci dit, si tu veux être tranquille avec le chargement d'une texture, utilises la librairie devIL, tu peux lui balancer n'importe quelle image, elle te la chargera correctement , je n'ai pas encore rencontré de problème avec !

    http://openil.sourceforge.net/

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Par défaut
    Merci pour ta repense Harooold

    je vais essayé ce truc

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Par défaut
    SALUT

    j'ai visité le lien que tu m'as donné et j'ai télécharger un kit que je crois qui est le bon kit , j'ai trouver un répertoire "lib" un autre "include" !!!

    Qu'est ce que je fait après ??!!!

    si tu as un exemple de l'utilisation de ce truc merci de le me montrer car je comprends pas bien l'anglais

  5. #5
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Je suppose que tu es sous windows, du coup installer la lib risque d'être un peu plus chiant que sous linux :p
    Je ne peux pas trop t'aider à ce niveau là, je ne m'en suis jamais servi sous windows.
    Mais je pense qu'il suffirait de mettre les .dll dans ton repertoire où il y a l'executable de ton programme, puis tout les .h dans un fichier /devil dans ton repertoire de travail, puis tu n'auras plus qu'a faire
    #include "devil/il.h" pour l'utiliser.

    Après, pour t'en servir, tu as la doc, en anglais pas très technique, je suis sur que tu peux t en sortir avec un dico :p

    http://openil.sourceforge.net/docs/DevIL%20Manual.pdf

    Ceci dit, si plus tard tu comptes pousser un peu plus loin en 3D, tout les papiers officiels sur les techniques et algorithmes sont en anglais, il faut s y mettre

    Bref, une fois que la lib est installée et incluse correctement :

    dans l'initialisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(ilGetInteger(IL_VERSION_NUM) < IL_VERSION)
    {
    	std::cerr << "Mauvaise version de DevIL" << std::endl;
    	exit(1);	
    }
     
    ilInit();
    Ca teste si la version est correcte et puis initialise IL.
    Là je ne me sers pas de ILU ni ILUT, ce n'est pas nécessaire pour le chargement de texture, me suis pas penché plus que ça sur ce que ça peut faire d'autre :p

    Bref, ensuite tu te crée une petite fonction pour charger une texture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    GLuint chargeTexture(char * fich)
    {
    	ILboolean success;
    	ILuint iltexID;
            GLuint texID;
    	GLsizei width, height;
    	GLint internalFormat;
    	GLenum format;
    	GLenum type;
     
    	ilGenImages(1, &iltexID);       // genere identifiant pour l'image IL
    	ilBindImage(iltexID);             // définit comme image active
    	success = ilLoadImage(fich); // charge l'image
     
    	if (success) // si le chargement s'est bien passé
      	{
    		glGenTextures(1,&texID); // Genere l'identifiant de l'objet texture
     
    		width = ilGetInteger(IL_IMAGE_WIDTH); // récupere la largeur de l'image
    		height = ilGetInteger(IL_IMAGE_HEIGHT); // récupere la hauteur de l'image
    		internalFormat = ilGetInteger(IL_IMAGE_BPP); // recupere le format des pixels de l'image
    		format = ilGetInteger(IL_IMAGE_FORMAT); // récupere le format de l'image
    		type = ilGetInteger(IL_IMAGE_TYPE); // récupere le type de l'image
     
     
        	glBindTexture(GL_TEXTURE_2D, texId); // Met l'objet texture actif
     
    	gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, width, height, format, type, ilGetData()); // Crée l'objet texture sur la carte video
     
    	glBindTexture(GL_TEXTURE_2D, 0); // désactive l'objet texture
      }
      else // le chargement de l'image s'est mal passé
      {
    		std::cerr << "Erreur de chargement avec devIL" << std::endl;
    		exit(1); // on quitte le programme
      }
     
      ilDeleteImages(1, &iltexID); // On suprimme l'objet image IL, vu qu'on en a plus besoin
     
       return texID;  // on retourne l'identifiant de l'objet texture crée 
    }
    Après tu récupere l'identifiant de l'objet texture et tu es prete à t'en servir.
    Si tu codes en C et non en C++, utilises printf ou perror (stdio.h) plutot que std::cout et std::cerr (<iostream> ) pour afficher les messages.

    Voilou

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Par défaut


    merci pour ton aide Harooold

    j'ai essayé ce que tu m'as dis mais malheureusement ça marche pas avec moi

    le manuel parle à visuel c++ alors que je travaille sur builder !!!

    l'essentiel j'ai arrivé finallement à résolus le problème de texture avec le loader de tga , finallement la cause du problème etait dans le logiciel de conversion que j'ai utilisé.

    merci pour vos répense

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

Discussions similaires

  1. Impossible de charger une texture BMP en mémoire
    Par trapster dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/07/2010, 07h29
  2. Réponses: 2
    Dernier message: 01/03/2010, 13h46
  3. Couleur transparente sur une texture TGA
    Par alex6891 dans le forum OpenGL
    Réponses: 13
    Dernier message: 29/07/2006, 21h16
  4. Charger une texture ligne par ligne
    Par YéTeeh dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/05/2006, 09h58
  5. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16

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