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 :

Problème de texture avec shaders


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Par défaut Problème de texture avec shaders
    Bonjour,

    Je précise pour commencer que je fais de l'OpenGL dans Qt (via un héritage de QGLWidget).
    Je dois afficher une texture (type un viseur) par dessus une image de fond pour cela j'ai fait le code suivant :
    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
     
    glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE) ;
    qglColor(Qt::white);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _crosshairTexture[0]);
    glBegin(GL_QUADS);
    glTexCoord2d(0,0);		glVertex3f(centreX-5,centreY-5, -1.0);
    glTexCoord2d(1,0);		glVertex3f(centreX+5,centreY-5, -1.0);
    glTexCoord2d(1,1);		glVertex3f(centreX+5,centreY+5, -1.0);
    glTexCoord2d(0,1);		glVertex3f(centreX-5,centreY+5, -1.0);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);
    glEnable(GL_DEPTH_TEST);
    Ce code fonctionne parfaitement lorsque mon image de fond est une texture chargée via glTexImage2D(...) mais lorsque mon image de fond est l'association de 3 textures mixées via GLSL (pixelShader) mon viseur n'apparait plus.

    Dans le cas de l'utilisation des GLSL mes 3 textures sont chargés via
    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
     
    glPixelStorei(GL_UNPACK_ALIGNMENT, 8) ;
    glEnable (GL_TEXTURE_2D);
     
    //1ere texture
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D,_EodTextureName[0]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
              _textureWidth,
              _textureHeight,
              0, GL_LUMINANCE, GL_UNSIGNED_SHORT,
              _buffer);
     
    // 2e texture
    glActiveTexture(GL_TEXTURE1);
    ...
     
    // 3e texture
    glActiveTexture(GL_TEXTURE1);
    et en suite elle sont affichées via
    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
     
    glUseProgram(_ProgYUV422P);
     
    glEnable ();
     
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D,_EodTextureName[0]);
    GLuint locYtex = glGetUniformLocation (_ProgYUV422P, "Ytex");
    glUniform1i(locYtex, 0);
     
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D,_EodTextureName[1]);
    GLuint locUtex = glGetUniformLocation (_ProgYUV422P, "Utex");
    glUniform1i(locUtex, 1);
     
    glActiveTexture(GL_TEXTURE2);
    glBindTexture(GL_TEXTURE_2D,_EodTextureName[2]);
    GLuint locVtex = glGetUniformLocation (_ProgYUV422P, "Vtex");
    glUniform1i(locVtex, 2);
    J'espère avoir été assez clair dans les explications de mon problèmes.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Par défaut
    Un ami vient de me donner la solution qui est toute bête mais je la mets ici, si quelqu'un a un jour le même problème que moi. Comme j'ai plusieurs texture active, il faut simplement que je reactive la texture0 pour faire mon affichage

    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
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE) ;
    qglColor(Qt::white);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _crosshairTexture[0]);
    glBegin(GL_QUADS);
    glTexCoord2d(0,0);		glVertex3f(centreX-5,centreY-5, -1.0);
    glTexCoord2d(1,0);		glVertex3f(centreX+5,centreY-5, -1.0);
    glTexCoord2d(1,1);		glVertex3f(centreX+5,centreY+5, -1.0);
    glTexCoord2d(0,1);		glVertex3f(centreX-5,centreY+5, -1.0);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);
    glEnable(GL_DEPTH_TEST);
    J'espère que ca aidera quelqu'un.

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

Discussions similaires

  1. [OpenGL 3.x] Problème d'initialisation avec les textures array
    Par Nikogram dans le forum OpenGL
    Réponses: 6
    Dernier message: 11/05/2014, 13h50
  2. Réponses: 5
    Dernier message: 18/10/2006, 14h52
  3. Réponses: 10
    Dernier message: 13/04/2006, 15h54
  4. Réponses: 1
    Dernier message: 06/04/2006, 17h04

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