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 :

Chargés plusieurs textures BMP avec GLAUX => Marche pas


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut Chargés plusieurs textures BMP avec GLAUX => Marche pas
    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
     
    ...
    TextureImage1[0]=LoadBMP("NeHe.bmp");
    TextureImage1[1]=LoadBMP("Vide.bmp");
    ...
    glEnable (GL_TEXTURE_2D) ;
    glGenTextures(2, &texture1[0]);	
     
    glBindTexture(GL_TEXTURE_2D, texture1[0]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage1[0]->sizeX, TextureImage1[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[0]->data);
     
    glBindTexture(GL_TEXTURE_2D, texture1[1]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage1[1]->sizeX, TextureImage1[1]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[1]->data);
     
     
     
     
     
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    ...
    glBindTexture(GL_TEXTURE_2D,texture1[0]);
    glBegin(GL_QUADS);
    	glTexCoord2i(1,0) ;glVertex2f(RES_MAX+10,10);
    	glTexCoord2i(1,1) ;glVertex2f(RES_MAX+138,10);
    	glTexCoord2i(0,1) ;glVertex2f(RES_MAX+138,42);
    	glTexCoord2i(0,0) ;glVertex2f(RES_MAX+10,42);
    glEnd();
    Alors ce code fonctionne si je n'ai qu'une seule texture !!
    par contre dès que je veux charger une 2eme texture je n'y arrive pas.

    Sur internet aucun tutorial explique comment utilisé plusieurs textures. (Mis a part dire rapidement que glGen génère plusieurs ID mais bon...)

    Pouvez vous m éclairer sur le fait de pouvoir charger l'image que je veux du style en changeant "texture1[0]" par "texture1[1]" juste avant mon affichage du GL_QUADS.

    Merci beaucoup

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    effectivement j'ai eut le même probleme...

    apparament tu ne peut avoir qu'une seul instance du chargeur de bmp don si tu veut charger plusieurs textures tu est obligé de le faire en sequence, c'est a dire que tu charge d'abord la premiere texture completement puis quand elle est charge tu charge la deuxieme AVEC LE MEME OBJET GLAUX (ici ce serait avec image1[0] (d'ailleur ca ne sert a rien de faire un tableau de "glaux" etant donné qu'il n'y en a qu'un seul en memoire))

    voila j'espere que ca pourrat t'aider, je ne suis pas a 100% sure de ce que j'ai dit mais chez moi ca marche comme ca...

    @+
    * 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

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut
    c'est a dire que tu charge d'abord la premiere texture completement puis quand elle est charge tu charge la deuxieme AVEC LE MEME OBJET GLAUX
    Hum c'est pas ce que j'ai fais dans lexemple cidessus?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 118
    Points : 118
    Points
    118
    Par défaut
    si on suit ce qu'a dit bafman, non ce n'est pas ce que t'a fait :
    TextureImage1[0]=LoadBMP("NeHe.bmp");
    TextureImage1[1]=LoadBMP("Vide.bmp");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    glEnable (GL_TEXTURE_2D) ;
    glGenTextures(2, &texture1[0]);   
     
    TextureImage1[0]=LoadBMP("NeHe.bmp");
    glBindTexture(GL_TEXTURE_2D, texture1[0]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage1[0]->sizeX, TextureImage1[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[0]->data);
     
    TextureImage1[0]=LoadBMP("vide.bmp");
    glBindTexture(GL_TEXTURE_2D, texture1[1]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage1[0]->sizeX, TextureImage1[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[0]->data);
    Essaye sa mais comme bafman, je ne suis pas convaincu que le problème vienne de la.......

    sinon, texture1 est bie nen GLuint ?[/code]
    JC est bien notre dieu...(non non pas jesus christ mais John Carmack!!!)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut
    J essairais mais le LoadBMP ne fait pas grand chose mis a part charger en mémoire la structure de l'image BMP.

    Ca n'agit en rien sur OpenGL donc le faire avant ou après c pareil a mon avis.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 310
    Points : 157
    Points
    157
    Par défaut
    Jai réussi grace a un exemple trouvé sur opengl.org
    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
    43
    44
    45
    46
     
    	TextureImage1[0]=LoadBMP("finround.bmp");
    	TextureImage1[1]=LoadBMP("whiteplay.bmp");
    	TextureImage1[2]=LoadBMP("blackplay.bmp");
    ...
    	BTN_FINROUND_ID = glGenLists(1);
        glNewList(BTN_FINROUND_ID, GL_COMPILE);
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage1[0]->sizeX, TextureImage1[0]->sizeY,
    		      GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[0]->data);
        glEndList();
     
     
        BTN_BLANCJOUE_ID = glGenLists(1);
        glNewList(BTN_BLANCJOUE_ID, GL_COMPILE);
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage1[1]->sizeX, TextureImage1[1]->sizeY,
    		      GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[1]->data);
        glEndList();
     
    	BTN_NOIRJOUE_ID = glGenLists(1);
        glNewList(BTN_NOIRJOUE_ID, GL_COMPILE);
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage1[2]->sizeX, TextureImage1[2]->sizeY,
    		      GL_RGB, GL_UNSIGNED_BYTE, TextureImage1[2]->data);
        glEndList();
    ....
    	glColor3f(1.0f,1.0f,1.0f);
    	glCallList(BTN_FINROUND_ID);
    	glBegin(GL_QUADS);
     
    		glTexCoord2i(1,0) ;glVertex2f(RES_MAX+10,10);
    		glTexCoord2i(1,1) ;glVertex2f(RES_MAX+138,10);
    		glTexCoord2i(0,1) ;glVertex2f(RES_MAX+138,42);
    		glTexCoord2i(0,0) ;glVertex2f(RES_MAX+10,42);
    	glEnd();
     
     
    	if (Jeu->getRound()=='B')
    		glCallList(BTN_BLANCJOUE_ID);
    	else
    		glCallList(BTN_NOIRJOUE_ID);
    	glBegin(GL_QUADS);
     
    		glTexCoord2i(1,0) ;glVertex2f(RES_MAX+10,52);
    		glTexCoord2i(1,1) ;glVertex2f(RES_MAX+138,52);
    		glTexCoord2i(0,1) ;glVertex2f(RES_MAX+138,84);
    		glTexCoord2i(0,0) ;glVertex2f(RES_MAX+10,84);
    	glEnd();

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut pb loadbmp
    j'ai un petit soucis concerant loadbmp.
    en effet, j'arrive à afficher mon image à l'écran mais le reste ne s'affiche pas (c'est à dire une pyramide et du texte)
    qq1 peut m'aider ?

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     void display(void)
     
    { 
     
        //glEnable(GL_TEXTURE_2D);                            
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
     
    if (menu==1) {
                 InitGL();
         glBindTexture(GL_TEXTURE_2D, texture[0]);   
         glTranslatef(-0.2f,-0.5f,0.0f);  // Deplace dans l'ecran de 5 unites
     
     
         glBegin(GL_QUADS);
          // Face de devant
          // En-bas a gauche de la texture et du quadrilatere
          glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.31F,0.32F,-1.1) ;   
          // En-bas a droite de la texture et du quadrilatere
          glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.31F,0.75F,-1.1) ;
          // En-haut a droite de la texture et du quadrilatere 
          glTexCoord2f(1.0f, 1.0f); glVertex3f(0.72F,0.75F,-1.1) ;
          // En-haut a gauche de la texture et du quadrilatere
          glTexCoord2f(1.0f, 0.0f); glVertex3f(0.72F,0.32F,-1.1) ;   
     
     
         glColor3f(1.0,0.0,0.0);
         bitmap_output(-0.4,1.05,-3.0,"BURGER QUIZ", font);
         glBindTexture(GL_TEXTURE_2D, texture[0]);
         glBegin(GL_POLYGON) ;
     
          glColor3f(0.5,0.5,0.5);
     
         glVertex3f(-0.2F,-1.1F,-3.0) ;  
      glVertex3f(-0.2F,-0.9F,-3.0) ;
       glVertex3f(0.2F,-0.9F,-3.0) ;
      glVertex3f(0.2F,-1.1F,-3.0) ;
      glEnd() ;
         glColor3f(1.0,0.0,0.0);
         bitmap_output(-0.185,-1.05,-3.0,"JOUER", font);
     
     
     
    glTranslatef(0.0f, 0.0f, -3.0f);
      glRotatef(rtri,0.0,1.0,0.0);              // Rotation du Triangle sur l'axe Y 
      glBegin(GL_TRIANGLES);               // Debut du tracé du Triangle
        glColor3f(1.0,0.0,0.0);       // Reglage de la couleur : rouge
        glVertex3f( 0.0, 0.5, 0.0);   // Definition du sommet haut
        glColor3f(0.0,1.0,0.0);       // Reglage de la couleur : vert
        glVertex3f(-0.5,-0.5, 0.5);   // Definition du sommet gauche
        glColor3f(0.0,0.0,1.0);       // Reglage de la couleur : bleu 
        glVertex3f( 0.5,-0.5, 0.5);   // Definition du sommet droit 
     
        glColor3f(1.0,0.0,0.0);
        glVertex3f( 0.0f, 0.5f, 0.0f);
        glColor3f(0.0,1.0,0.0);   
        glVertex3f( 0.5f,-0.5f, 0.5f);
        glColor3f(0.0,0.0,1.0);   
        glVertex3f( 0.5f,-0.5f,-0.5f);
     
        glColor3f(1.0,0.0,0.0);
        glVertex3f( 0.0f, 0.5f, 0.0f);
        glColor3f(0.0,1.0,0.0);   
        glVertex3f( 0.5f,-0.5f,-0.5f);
        glColor3f(0.0,0.0,1.0);   
        glVertex3f(-0.5f,-0.5f,-0.5f);
     
        glColor3f(1.0,0.0,0.0);
        glVertex3f( 0.0f, 0.5f, 0.0f);
        glColor3f(0.0,1.0,0.0);   
        glVertex3f(-0.5f,-0.5f,-0.5f);
        glColor3f(0.0,0.0,1.0);   
        glVertex3f(-0.5f,-0.5f, 0.5f);
        glEnd();                            // Fin du trace 
     
     
         rtri+=1.0f; }        // Augmente la variable de rotation du triangle

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    chaton1930, je note que dans ton code, tu fais

    glBegin(GL_QUADS) sans le glEnd associe ....

    c'est peut etre la dont vient le probleme.


    Sinon pour LoadBMP, de memoire cette fonction retourne un pointeur sur un structure dont la liberation memoire se fait par quelquechose du genre

    image = LoadBMP(...);

    free(image->buffer);

    free(image);


    En conclusion, et sans tests de ma part , LoadBMP ne semble pas retourne des donnees sur un buffer interne puisque l'on a le role de desalloue le buffer de l'image + la structure elle meme. J'ai donc envie de dire qu on devrait pouvoir charger deux images successivement sans soucis (aucun test je le repete).

    As tu essayes d intervertir l ordre de chargement des images ?

    Le chargement des images a il lieu a chaque image ? sinon , le context OpenGL est-il deja correctement initialise a ce moment ?

    As tu testes la valeur de retour de la fonction LoadBMP ( != NULL) ?

    Est-ce que tu veux faire du multitexturing ? (auquel cas il faut utiliser glTexUnit ou quelquechose comme ca)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut re loadbmp
    smashy
    j'ai rajouté le glEnd que j'avais oublié mais ca n'a rien changé...

    en ce qui concerne le free rien non plus

    comme tu ma la aussi suggeré jai interverti la pyramide et mon carré texturé mais rien non plus


    le test etait deja fait dans mon initialisation
    if (!LoadGLTextures())
    {
    return FALSE;
    }

    et pour finif je veux pas faire de multitexture
    je veux juste pouvoir afficher ma pyramide mon image (texture) et mon texte sur le meme ecran

    si ta d'autre idée je suis toute ouie
    je sais plus quoi faire...

Discussions similaires

  1. fopen avec localhost ne marche pas, seulement en distant
    Par __fabrice dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2006, 17h35
  2. plusieurs requêtes à la suite ça ne marche pas
    Par zouhenlai dans le forum Access
    Réponses: 10
    Dernier message: 30/06/2006, 17h02
  3. Carte graphique fx5200 avec redhat9 ne marche pas
    Par nouri.moudhffar dans le forum Administration système
    Réponses: 2
    Dernier message: 24/06/2006, 15h31
  4. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11
  5. Réponses: 4
    Dernier message: 30/12/2004, 18h04

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