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] Faire des menus avec opengl


Sujet :

OpenGL

  1. #1
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut [Débutant] Faire des menus avec opengl
    Bonjour,

    je débute en OpenGL. J'arrive à faire un terrain, à faire une sphère, à la controler sur le terrain et à controler la caméra (Un exemple d'image de mon programme) mais je suis un peu sur la touche quant à faire des menus.

    Ce que je vais demander est probablement basique, mais une fois que je l'aurais clairement compris ce sera assimilé une fois pour toute.

    Clairement, ce que je veux savoir c'est comment faire de la 2D d'une manière aussi simple qu'avec SFML ou SDL. C'est à dire pouvoir manier des coordonnées en surface/pixels, et faire des opérations dessus sans se prendre la tête.

    Par exemple, quand le menu s'affiche, je voudrais pouvoir griser tout le reste du jeu (c'est à dire griser tout l'écran avant d'afficher le menu). Quelle est la manière la plus simple de faire?

    Ensuite, si j'ai une image de 80 pixels * 120 pixels, et que je veux l'afficher aux coordonnées (40, 50), comment est-ce que je fais?

    Après, pour afficher du texte de taille 24 pt à une position en pixels précise sur l'écran, je pense que je peux me débrouiller si j'ai les réponses ci-dessus.

    SFML permet de faire tout ça, en conjonction avec OpenGL, mais je voudrais savoir le faire sans avoir à utiliser SFML. Cela me permettra aussi de le faire de manière légèrement plus optimisée, car pour utiliser les fonctions graphiques de SFML en même temps qu'OpenGL, je dois appeler sf::RenderWindow.PreserveOpenGLStates(true) qui d'après la doc SFML risque de consommer pas mal de CPU inutilement.

    Voilà, merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Je crois que je suis parvenu à quelque chose:

    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
    void Menu::draw()
    {
        /* Switch to 2D Mode */
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
        gluOrtho2D(0,800,0,600);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glEnable(GL_BLEND);
        glDisable(GL_LIGHTING);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     
        /* Draw the gray transparent zone over the game */
        glColor4f(0.8, 0.8, 0.8, 0.5);
        glBegin(GL_QUADS);
        glVertex3f(0, 0, 0);
        glVertex3f(0, 600, 0);
        glVertex3f(800, 600, 0);
        glVertex3f(800, 0, 0);
        glEnd();
     
        /* Switch back to 3D Mode */
        glEnable(GL_LIGHTING);
        glDisable(GL_BLEND);
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
    }
    Je pense que ça va aller pour le reste, après quelques accrochages...

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Pour dessiner mes overlays, je fais le même genre de chose : D'abord on dessine la scène 3D, puis on se met en glOrtho aux dimensions de la fenêtre puis on dessine en 2D avec des glVertex2f. Par contre ce n'est pas compatible OpenGL 3.X. Là il faut donc passer par des VBO.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 578
    Points : 1 537
    Points
    1 537
    Par défaut
    comment faire de la 2D d'une manière aussi simple qu'avec SFML ou SDL
    Bah, en utilisant SFML ou SDL

    Plus sérieusement, OpenGL est trop bas niveau pour faire facilement ce que tu souhaite (j'ai pas dit que c'était infaisable, juste bien galère...). Mais tu es quand même partie sur la bonne voix, c'est à dire une caméra ortho mappé sur tes coordonnée pixels.

    Pour afficher du text, OGL ne sait pas faire... La méthode la plus répandu est de dessiner des petits carrés texturés avec la bonne lettre. Tu trouvera facilement des tutos sur le net, mais je te préviens de suite qu'il n'y a pas de fonction glText qui t'affiche la chaîne de caractère facilement .

    Les interactions souris doivent être gérée à la main (detection d'un clique sur un menu, ...). En gros, faut tester à la main si les coordonnée du point sont sur un menu.

    Pour griser ton écran, il y a plusieurs manière :
    - Rendre la scène dans un FBO, t'en servir comme texture et faire un effet noir et blanc avec un shader en l'affichant sur un quad full screen. C'est la méthode qui te laisse le plus de liberté dans l'effet que tu veux faire (tu peux même faire du flou etc...), mais comme tu débute j'ai peur qu'elle ne soit pas à ta portée pour le moment.

    - Ou alors, plus simple, tu considère que chaque possède 2 materiaux (pas au sens glMaterial, mais au sens concept, genre une classe Material qui encapsule la couleur, la texture, etc...), un materiaux normal utilisé pendant le rendu, et un materiaux gris, utilisé lorsque tu affiche le menu.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Bonjour,

    Il faut se rappeler que GLUT proposait des menus. Sinon Qt, ou autre.
    Alors, je l'avoue, c'est une solution souvent lourde et assez moche, mais des fois, cela peut convenir.
    Sinon, comme le problème est récurant, il peut y avoir des petites bibliothèques utilisant OpenGL qui le font. Mais je ne m'en rappelle plus.

  6. #6
    Membre averti

    Homme Profil pro
    Ingénieur applications 3D temps réel
    Inscrit en
    Août 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur applications 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 63
    Points : 413
    Points
    413
    Par défaut
    Un post récent sur #AltDevBlogADay qui parle des GUI : The Quest for the Ginkgo GUI

    Y'a même un deuxième post ou il dit qu'il a choisit Gwen : The Quest for the Ginkgo GUI (2): Going for Gwen

  7. #7
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Pour dessiner mes overlays, je fais le même genre de chose : D'abord on dessine la scène 3D, puis on se met en glOrtho aux dimensions de la fenêtre puis on dessine en 2D avec des glVertex2f. Par contre ce n'est pas compatible OpenGL 3.X. Là il faut donc passer par des VBO.
    ok

    Citation Envoyé par pyros Voir le message
    Pour griser ton écran, il y a plusieurs manière :
    - Rendre la scène dans un FBO, t'en servir comme texture et faire un effet noir et blanc avec un shader en l'affichant sur un quad full screen. C'est la méthode qui te laisse le plus de liberté dans l'effet que tu veux faire (tu peux même faire du flou etc...), mais comme tu débute j'ai peur qu'elle ne soit pas à ta portée pour le moment.
    Ce n'est pas ce dont je me sers pour le moment (j'ai qu'un menu basique) mais ça me semble intéressant pour le futur!

    Citation Envoyé par LittleWhite Voir le message
    Il faut se rappeler que GLUT proposait des menus.
    N'utilisant pas glut pour la gestion des évènements...

    Citation Envoyé par r0ots Voir le message
    Un post récent sur #AltDevBlogADay qui parle des GUI : The Quest for the Ginkgo GUI

    Y'a même un deuxième post ou il dit qu'il a choisit Gwen : The Quest for the Ginkgo GUI (2): Going for Gwen
    Gwen a l'air intéressante, de par toutes ses compatibilités. Je n'aurais probablement pas besoin de vraie GUI mais pour mon menu ça peut être une solution facile.

    Enfin bon pour l'instant j'ai laissé la gestion du texte à SFML, et fait un menu basique au clavier le temps que j'assimile plus openGL en travaillant sur d'autres aspects de mon programme. Mais je vais garder tous ces conseils en mémoire pour quand j'en ai besoin

Discussions similaires

  1. comment faire des menus avec ASP MVC
    Par beaudelaire dans le forum ASP.NET MVC
    Réponses: 7
    Dernier message: 17/05/2011, 16h23
  2. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25
  3. [Son] Faire des bruits avec une application java
    Par mammistegon dans le forum Multimédia
    Réponses: 6
    Dernier message: 22/01/2005, 17h17
  4. [Débutant] Faire un exit avec &
    Par thybo dans le forum C++
    Réponses: 7
    Dernier message: 23/11/2004, 20h33
  5. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08

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