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 :

affichage d'un plan 2D en surimpression


Sujet :

OpenGL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut affichage d'un plan 2D en surimpression
    Bonjour à tous.
    Je réalise un labyrinthe en 3D, et j'aimerais pouvoir afficher la carte du labyrinthe en surimpression, par dessus la vue 3D.
    Le problème, c'est que je ne sais pas comment faire
    J'ai essayé avec glVertex2f(), mais il me met le plan dans l'espace (à l'origine du repère).
    Voilà, si quelqu'un pouvait me dire la fonction à utiliser...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Pour afficher des choses dans un plan parallele à l'écran, le mieux est de passer en projection orthogonale (gluOrtho2D ou gluOrtho). Complémenté avec un viewport qui colle à la taille de ta fenetre (genre glViewPort(0, 0, LongueurFenetre, LargeurFenetre), tu obtiens une zone d'affichage directement accessible par "pixel" ou coordonnées écran, avec le coin inferieur gauche à (0,0).
    J'espere avoir été clair, mais pour résumer : renseigne toi sur gluOrtho2D .

  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
    regarde la

    http://www.developpez.net/forums/viewtopic.php?t=200602

    on a donné la solution.
    la bonne solution est celle d'amaury.pouly, pas la mienne

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je vais essayer, merci beaucoup.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      //--- Test d'affichage 2D ---//
      glColor3f(0, 1, 0) ;
      glBeginOrtho() ;
      glBegin(GL_POLYGON) ;
      glVertex2f(0, 0) ;
      glVertex2f(100/600, 0) ;
      glVertex2f(0, 100/600) ;
      glVertex2f(100/600, 100/600) ;
      glEnd() ;
      glEndOrtho() ;
    Ce bout de code se situe dans la fonction qui affiche tout ce qui doit l'être.
    Voilà le problème : au lieu de me créer un carré en haut à gauche de l'écran comme je le voudrais, il me peint tout l'écran en vert transparent (càd la couleur initialisée par "glColor3f(0, 1, 0) ;"). Je vois donc bien mon labyrinthe, mais avec un rendu "lunettes de vision nocturne".
    Je sais, je ne suis pas doué je débute...
    Si quelqu'un a une idée...

  6. #6
    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
    bon je voit pas trop.
    par contre quelques trucs :

    tu sait que c'est un quads, utiliser plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glBegin(GL_QUADS);
    les polygone sont plus lents a afficher.

    sinon en affichage ortho l'origine de l'affichage est en bas a gauche et pas en haut a gauche.
    est ce que tu a mis les bonnes valeur d'ecran pour gluOrtho ?
    si tu est en 800*600 il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gluOrtho2D(0,800,600,0);

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Effectivement je n'avais pas de "gluOrtho2D(0,800,600,0);", mais même en le mettant ça ne change rien (j'ai essayé à plusieurs endroits différents, sans résultat).
    J'avais aussi oublié de préciser que le "filtre" vert apparaît même si j'essaye de tracer une ligne au lieu d'un carré, donc ça ne doit pas être un problème de dimensions de mon carré...

  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
    appres avoir dessiner en vert, tu remet bien la couleur a blanc ?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En remettant la couleur à blanc, le filtre vert n'apparaît plus, mais il ne trace pas le carré pour autant...

  10. #10
    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
    fait voir le code d'affichage de ton carré...

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ben c'est le même que plus haut, sauf que j'ai ajouté ce que tu m'as dit. Voilà toute la fonction :
    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
     
    void affiche(){
      int ligne, colonne ;
      //--- Effacement de l'image avec la couleur de fond ---///
      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ;
     
      //--- Application des transfos de visualisation ---//
      glLoadIdentity();
      glRotated(r,0.0,1.0,0.0);
      glTranslatef(px,0.0,pz);
      gluLookAt(LARGEUR/2,LARGEUR/2,LARGEUR/2,
                LARGEUR,LARGEUR/2,LARGEUR/2,
                0,LARGEUR,0); 
     
      /* Là il y a l'affichage du labyrinthe en 3D */
      // [...]
     
      // DESSIN DE LA CARTE //
      gluOrtho2D(0, 800, 600, 0) ;
      glColor3f(0, 1, 0) ;
      glBeginOrtho() ;
      glBegin(GL_QUADS);
      glVertex2f(0, 0) ;
      glVertex2f(100/600, 0) ;
      glVertex2f(0, 100/600) ;
      glVertex2f(100/600, 100/600) ;
      glEnd() ;
      glEndOrtho() ;
      glColor3f(1, 1, 1) ;
     
     
      //--- Affichage du resultat ---//
      glFlush();
      glutSwapBuffers();
    }

  12. #12
    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
    Citation Envoyé par Haplo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      glBegin(GL_QUADS);
      glVertex2f(0, 0) ;
      glVertex2f(100/600, 0) ;
      glVertex2f(0, 100/600) ;
      glVertex2f(100/600, 100/600) ;
      glEnd() ;
    voila le probleme... il faut, quand tu est en mode ortho, donner les coordonnée des vertex en pixel.
    la ton carré fait moins d'un pixel. si tu veut afficher un carré de 100 sur 100 en bas a gauche il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      glBegin(GL_QUADS);
      glVertex2f(0, 0) ;
      glVertex2f(100, 0) ;
      glVertex2f(100, 100) ;
      glVertex2f(0, 100) ;
      glEnd() ;
    un autre point, l'ordre de tes point n'est pas bon. il faut generalement utiliser le counter clock wise (sens trigonometrique ou sens inverse des aiguilles d'une montre) a cause du culling.
    tu peut activer le cullling sous openGL qui permet de suprimer les faces qui tourne le dos a la camera. si tu ne donne pas un bon sens a tes polygones, tu aura des problemes...

    voila @+

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    D'ac' j'essaye ça demain.
    Mais avant j'avais essayé avec 100 mais ça faisait pareil.
    Je reposte demain aprèm...

    Ah oui et puis j'avais divisé par 600 et 800 parce que j'ai vu sur l'autre topic que les coordonnées étaient entre -1 et 1. C'est pas vrai alors ?

  14. #14
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    Bah chez moi c'est entre -1 et - mais c'est sans doute une question de gestion du mode ortho , esseye de veririfier si par hasard le depth buffer ne vien pas se meler a tous ca

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Toujours pas de résultat, en divisant ou sans diviser, ça ne change rien, rien ne s'affiche.
    Je commence à désespérer...

Discussions similaires

  1. Réponses: 30
    Dernier message: 02/11/2006, 09h53
  2. [c++] Souci d'affichage au premier plan
    Par Pov' typ' dans le forum DirectX
    Réponses: 2
    Dernier message: 25/06/2006, 21h02
  3. affichage d'un plan issu d'une vidéo dans un tpanel
    Par gerardTar dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/07/2005, 16h11
  4. [JPanel] Affichage en premier plan
    Par Snowballz dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 21/07/2004, 16h07
  5. [glut] forcer l'affichage au premier plan
    Par khayyam90 dans le forum OpenGL
    Réponses: 7
    Dernier message: 19/07/2004, 14h37

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