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 :

[OpenGL] glColor3f est ignoré, pourquoi?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut [OpenGL] glColor3f est ignoré, pourquoi?
    Hello,

    Ma question d'une manière générale:
    Est-ce qu'il y a une raison évidente que quand on affiche des formes 2D, elles sont noires par défaut et glColor3f ne semble pas fonctionner.

    Plus précisemment:
    J'essaye de modifier un programme qui fait un rendu complex des molécules en openGL. Mon but serait de faire un petit GUI 2D en openGL sur le canvas 3D.
    Donc ce que j'ai fait pour configurer le rendu 2D:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0,0,winx,winy);
    glOrtho(0, winx, 0, winy, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    et ensuite j'appelle la méthode qui affiche un carré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    glColor3f(0.5f, 0.0f, 0.8f);
    glTranslatef(0, 0, 1);
    glBegin(GL_QUADS);
     
        glVertex3f(800.0f, 50.0f, 0.0f);
        glVertex3f(870.0f, 50.0f, 0.0f);
        glVertex3f(870.4f, 10.0f, 0.0f);
        glVertex3f(800.0f, 10.0f, 0.0f);
     
    glEnd();
    Alors il s'affiche bien, mais il est noir par défaut et je n'arrive pas à modifier sa couleur. Idéalement j'aimerais utiliser glColor4f pour avoir accès à sa transparence, mais étant donné que le glColor3f ne fonctionne déjà pas, je pense qu'il faudrait trouver pourquoi.
    Je soupçonne que ceci soit dû au réglages 3D du canvas. Est-ce possible?
    Sinon le GUI de programme est fait dans wxWidgets, donc la fenêtre openGL est du wxGLCanvas, mais je pense que ça n'a pas d'influence.
    Voilà, donc si quelqu'un aurait une idée où chercher, ça serait super!

    Merci!
    Greg

  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
    si glColor n'a aucun effet, il y a peut-etre un glEnable(GL_COLOR_MATERIAL) quelque part ?

    sinon il faudrait que tu nous montre toutes les commandes opengl utilisées pour l'initialisation
    parceque dans celles que tu présentes il n'y a rien à voir
    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 averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut
    Ehh, ouais je m'en doutais.

    Bon j'ai trouvé ceci. Il y a une fonction qui s'appelle initGL:

    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
     
    int initGl(){
     
      int res=0;
      glClearDepth(1.0);
      glDepthFunc(GL_LESS);
      glEnable(GL_DEPTH_TEST);
      glShadeModel(GL_SMOOTH);
     
      float pos[4]={0.0f,0.8f,0.6f,0.0f};
      glLightfv(GL_LIGHT0, GL_POSITION, pos);
     
      glEnable(GL_VERTEX_PROGRAM_ARB);
      glEnable(GL_FRAGMENT_PROGRAM_ARB);
     
      if (!CgUtil::init())  res|=ERRGL_NO_GLEW;
      if(!GLEW_ARB_vertex_program ) res|=ERRGL_NO_VS;
      if(!GLEW_ARB_fragment_program ) res|=ERRGL_NO_FS;
     
     
      if (!shadowmap.init())     res|=ERRGL_NO_FBO_SHADOWMAP;
      if (!shadowmap.initHalo()) res|=ERRGL_NO_FBO_HALO;
     
      if (! AOgpu2::init()) res|=ERRGL_NO_FBO_AO;
     
      cgSettings.UpdateShaders();
     
      //ReloadTexture(texture, true);
      return res;
     
    }
    Sinon tu peux jeter un oeil dans le fichier Common.cpp d'où vient ce bout de code ici:
    http://qutemol.cvs.sourceforge.net/qutemol/qutemol/src/

    Merci!
    Greg

  4. #4
    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 rendu passe par un shader, c'est donc lui qui s'occupe de calculer la couleur, à voir s'il utilise ou non glColor

    tu dois avoir des fichiers texte pour les "vertex shader" et "fragment shader"
    souvent ce sont des fichiers avec une extension .vs et .fs
    ou .vert et .frag

    mais dans ton cas c'est certainement plus compliqué
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut
    Argh

    Ce serait pas possible de rédiriger le rendu 2D qu'il ne passe pas par le shader, puis une fois le rendu est affiché récativer le shader?

    Merci

  6. #6
    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
    il faudrait que tu regardes dans le code source comment les shaders sont activés :

    soit par la méthode OpenGL 2.0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glUseProgram( programID );
    soit par la méthode ARB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glUseProgramObjectARB( programID );
    dans les 2 cas il faut que tu appelles la fonction avec programID = 0 pour désactiver les shaders, reste à savoir laquelle
    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.

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

Discussions similaires

  1. Bug eclipse ? Local Variable is never read est à ignore
    Par jlong dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 18/09/2007, 16h34
  2. Pourquoi le Double clic est ignoré
    Par banban54 dans le forum Delphi
    Réponses: 2
    Dernier message: 17/05/2007, 17h57
  3. [OpenGL] Qu'est-ce que les cubemap ?
    Par razmott dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/10/2006, 19h41
  4. Réponses: 4
    Dernier message: 22/02/2006, 15h47

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