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 :

[débutant][C++][OpenGL] Problème affichage texture + texte


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut [débutant][C++][OpenGL] Problème affichage texture + texte
    Bonjour,

    voici mon problème :
    J'ai défini une sous-fenêtre (c'est juste un détail) et un rectangle dedans auquel j'applique une texture. Jusque là pas de soucis.
    Ensuite, je décide de "coller" du texte par dessus cette texture.
    J'affiche le tout : pas de problème.

    Le problème survient lorsque je déplace ma fenêtre : cela en fait pour effet de forcer la réactualisation de l'affichage et juste après cela, ma texture prend (en transparence) la couleur du texte que j'ai défini.
    J'ai beau scruter mon code, je vois bien le problème mais je n'arrive pas à le résoudre...

    Merci pour vos suggestions.

    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
     
    void affichageInterfaceCombat(){
    	glClearColor(1.0,1.0,0.0,0.0);
     
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
     
    	glBegin(GL_QUADS);
                  glTexCoord2f(0,0); glVertex2d(-1,-1);
                  glTexCoord2f(0,1); glVertex2d(-1,1);
                  glTexCoord2f(1,1); glVertex2d(1,1);
                  glTexCoord2f(1,0); glVertex2d(1,-1);
           glEnd();
     
           glColor3f (0.5F, 1.0F, 1.0F);
     
           sprintf (label, "Time = %8.3f ", time);
           glRasterPos2f (0, 0);
           drawString (label);
     
    	glFlush();
    	glutSwapBuffers();
    }

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    bien le bonsoir,

    ne devrais-tu pas sélectionner la texture appropriée avant le glBegin(GL_QUADS); ?

  3. #3
    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
    NON surtout pas... le glBindTexture n'est pas pris en compte entre le glBegin()/glEnd() !!! (ca m'a pris une semaine a trouver ce truc la

    pour ton probleme c'est que tu doit utiliser un glColor() dans ta fonction drawString et donc apres to glColor(), tout objet dessiné aura cette couleur... pour resoudre ton probleme, met un glColor(1,1,1) avant de dessiner ton quad.

    d'ailleur pour faire encore mieux, il faudrait que ta fonction remette en sortie les attribut qui etait en entrée (en gros en entrée tu push les attribs que tu va modifier dans la fonction, puis tu les pop en sortie...) comme ca tu peut utiliser ta fonction partout en etant sur qu'elle n'interviendra pas sur la config d'openGL...

  4. #4
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par bafman
    le glBindTexture n'est pas pris en compte entre le glBegin()/glEnd()
    tu peux préciser ? serais-tu en train de dire qu'on ne peut pas appliquer une texture à un object défini entre glBegin()/glEnd() avec l'instruction glBindTexture ? là, je suis très très mais alors très curieux ...

  5. #5
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    bé oui

    faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    glBindTexture(...);
    glBegin(...);
    // dessiner des choses
    glEnd();
    et pas un bind entre glBegin et glend sinon tu genere un GL_INVALID_OPERATION , c est l api qui a ete concue comme ca

    sinon la texture appliquée à la geometrie definie entre begin et end est la derniere qui a été bindée.

  6. #6
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    voilà, nous sommes bien d'accord

  7. #7
    Membre averti Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Points : 316
    Points
    316
    Par défaut
    yep bafman a surement du lire "apres" a la place de "avant" donc je pense qu on est tous d accord en fait lol

  8. #8
    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
    oups... effectivement, j'avait mal lu enfin bon comme ca au moins il saura qu'il ne faut pas mettre de glBindTexture entre le glBegin/glEnd 8)

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 274
    Points : 169
    Points
    169
    Par défaut Plusieurs textures
    Bonjour,

    Si j'ai plusieurs textures, une pour chaque faces de mon GL_QUADS, comment faire ? Faut-il mettre toutes les textures dans une meme image et pointer a des endroit de cette image ?

    Cordialement.

  10. #10
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Tu as 2 solutions
    - Soit tu declares N textures et tu les charges avant de les appliquer à chaque QUAD
    Ca donnera quelque chose comme :
    glBindTexture(...);
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2d(...);
    glTexCoord2f(0,1); glVertex2d(...);
    glTexCoord2f(1,1); glVertex2d(...);
    glTexCoord2f(1,0); glVertex2d(...);
    glEnd();
    glBindTexture(...);
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2d(...);
    glTexCoord2f(0,1); glVertex2d(...);
    glTexCoord2f(1,1); glVertex2d(...);
    glTexCoord2f(1,0); glVertex2d(...);
    glEnd();
    etc

    - Soit tu declares 1 texture qui contient les images a appliquer à tous tes quads et tu choisis les glTexCoord2f comme il faut pour prendre les bonnes textures.

    Par exemple avec une texture qui contiendrait sur une moitie la texture d'un quad et sur l'autre moitie la texture d'un autre :
    glBindTexture(...);
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2d(...);
    glTexCoord2f(0,1); glVertex2d(...);
    glTexCoord2f(0.5,1); glVertex2d(...);
    glTexCoord2f(0.5,0); glVertex2d(...);
    glEnd();
    glBegin(GL_QUADS);
    glTexCoord2f(0.5,0); glVertex2d(...);
    glTexCoord2f(0.5,1); glVertex2d(...);
    glTexCoord2f(1,1); glVertex2d(...);
    glTexCoord2f(1,0); glVertex2d(...);
    glEnd();


    a+

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 274
    Points : 169
    Points
    169
    Par défaut OK
    Bonjour,

    OK avec n bloques glBegins/glEnd ça marche.

    Cordialement.

Discussions similaires

  1. [Débutant][OpenGL ES] Problème affichage textures
    Par Niicoo dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/06/2009, 15h15
  2. [libjpeg && opengl] problème "multi-texturing"
    Par pspflashsystem dans le forum OpenGL
    Réponses: 4
    Dernier message: 23/02/2009, 13h01
  3. Problème affichage : propriété .Text du Combobox
    Par tssi555 dans le forum VB.NET
    Réponses: 9
    Dernier message: 08/08/2008, 10h37
  4. problème affichage de texte
    Par krokmitaine dans le forum Visual C++
    Réponses: 2
    Dernier message: 10/10/2006, 12h40
  5. [Cygwin et OpenGL] Problème d'affichage
    Par CandS dans le forum Autres langages
    Réponses: 2
    Dernier message: 28/04/2005, 10h31

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