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 :

Chargeur de texture : en charger plusieurs `?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Chargeur de texture : en charger plusieurs `?
    Bonjour,

    J'ai un petit problème. J'ai un chargeur de texture en .bmp que j'ai pris sur le site de nehe.

    Voici le code :

    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
            int Status=FALSE;									
     
        BMPTexture  *BMPTex = NULL;
       // BMPTexture  *BMPTex1 = NULL;
     
     
        BMPTex = OpenGLAPPanel1->LoadBMPTexture ("Data/Crate.bmp", false);
      //  BMPTex1 = OpenGLAPPanel1->LoadBMPTexture ("Data/EarthLow.bmp", false);
     
        if (BMPTex)
    	{
    	     	Status=TRUE;									// Set The Status To TRUE
     
    		glGenTextures(1, &texture[0]);					
     
                    //glGenTextures(1, &texture[1]);
     
    		glBindTexture(GL_TEXTURE_2D, texture[0]);
    		glTexImage2D(GL_TEXTURE_2D,0,3,BMPTex->GetWidth(),
                         BMPTex->GetHeight(),0,BMPTex->Format,BMPTex->Type,BMPTex->GetPixels());
     
        /*            glGenTextures(1, &texture[1]);
                    glBindTexture(GL_TEXTURE_2D, texture[1]);
    		glTexImage2D(GL_TEXTURE_2D,0,3,BMPTex1->GetWidth(),
                         BMPTex1->GetHeight(),0,BMPTex1->Format,BMPTex1->Type,BMPTex1->GetPixels());
          */
     
    		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            delete BMPTex;
            //delete BMPTex1;
    	}
           	return Status;
    En commentaires c'est mon essai pour charger une deuxième texture mais cela ne marche pas et en plus ça détruit ma premiere texture.

    Une idée du problème ? Ou un autre chargeur de texture pour les bmp ?

  2. #2
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    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 580
    Par défaut
    le code m'a l'air correct même si c'est un peu...
    qu'est-ce qui ne marche pas ? si tu peux détailler
    comment sais-tu que ta première texture est détruite ?

    sinon je te conseillerait plutot de faire une fonction (ou un objet si tu es en c++) qui charge une et une seule texture de façon indépendante
    ce sera bien plus simple
    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
    bool LoadTexture(char* sFilename, GLint* pID)
    {
        BMPTexture* BMPTex = OpenGLAPPanel1->LoadBMPTexture (sFilename, false);
     
        if(!BMPTex)
            return false;
     
        glGenTextures(1, pID);					
     
        glBindTexture(GL_TEXTURE_2D, *pID);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, BMPTex->GetWidth(),
                            BMPTex->GetHeight(), 0, BMPTex->Format,
                            BMPTex->Type, BMPTex->GetPixels());
     
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
     
        delete BMPTex;
     
        return true;
    sinon ton problème vient peut-etre de la façon dont tu utilises tes textures ?
    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.

  3. #3
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    Est ce que tu n'oubli pas de faire le bind de la texture avant de l'appliquer? si tu le fait pas c'est normal que tous les objets prennent la 2eme texture chargée

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je viens d'essayer la solution de shenron666. Mais je ne comprends pas comment l utiliser :

    J'ai essayé comme ça : LoadTexture("Data/Crate.bmp",1);
    Ou : LoadTexture("Data/Crate.bmp",&texture[0]);
    Ou encore : LoadTexture("Data/Crate.bmp",texture[0]);

    texture est un tableau : GLuint texture[5];

    enfaite ce que je ne comprends pas la dedans c'est : le GLint* pID
    Le sFilename c'est le chemin du fichier je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoadTexture(char* sFilename, GLint* pID)

  5. #5
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    C'est
    LoadTexture("Data/Crate.bmp",&texture[0]);


    apres quand tu vas dessiner la scene tu fais

    glBingTexture(GL_TEXTURE_2D, texture[0]);
    //affichage objet0
    glBingTexture(GL_TEXTURE_2D, texture[1]);
    //affichage objet1
    ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    Alors j'ai plusieurs erreurs quand j appelle ma fonction comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoadTexture("Data/Crate.bmp",&texture[0]);
    [C++ Erreur] Unit1.cpp(106): E2034 Impossible de convertir 'int *' en 'unsigned int *'
    [C++ Erreur] Unit1.cpp(106): E2342 Mauvaise correspondance de type dans le paramètre 'textures' ('unsigned int *' désiré, 'int *' obtenu)
    [C++ Erreur] Unit1.cpp(124): E2034 Impossible de convertir 'unsigned int *' en 'int *'
    [C++ Erreur] Unit1.cpp(124): E2342 Mauvaise correspondance de type dans le paramètre 'pID' ('int *' désiré, 'unsigned int *' obtenu)

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

Discussions similaires

  1. Charger plusieurs scripts a l'ouverture de la page
    Par tchoukapi dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/04/2008, 18h25
  2. Charger plusieurs .swf externe
    Par JNB130 dans le forum Flash
    Réponses: 5
    Dernier message: 01/04/2007, 13h31
  3. Réponses: 2
    Dernier message: 26/04/2006, 15h14
  4. [VB.NET] [newbie] Charger plusieurs .X et les déplacer
    Par tamagotchi dans le forum DirectX
    Réponses: 12
    Dernier message: 12/04/2006, 11h45
  5. [PHP-JS] charger plusieurs images sur le serveur
    Par ehmppowa dans le forum Langage
    Réponses: 4
    Dernier message: 13/12/2005, 16h22

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