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 :

GUI OpenGL Maison


Sujet :

OpenGL

  1. #1
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut GUI OpenGL Maison
    Salut a tous !!!

    J'ai une petite question à vous poser (hééé oui encore une ).

    Je me suis décidé a faire un GUI pour OpenGL, mais voila je bute sur un problème :
    Pour faire un bouton, je me suis dis qu'il fallait que je créer un fenêtre fille (glutCreateSubWindow(...)), mais voila je voudrai savoir comment faire pour rendre cette fenêtre transparente, sauriez vous comment faire ?
    Enfin si je ne suis pas sur la bonne vois auriez vous des idée pour faire ce bouton?

    D'avance Merci,
    Jonathan

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Tu ne peux pas, du moins, pas à ce que je sache. La seule solution c'est de le faire à la main :

    - Afficher le bouton transparent
    - Gérer le clic de la souris

    C'est fastidieux mais trop trop compliqué...

    Jc

  3. #3
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Bonjour,

    tu veux dire: creer tes propres boutons dans ta fenêtre OpenGL?

    Pour ca pas besoin de sous-fenêtre...

    Le + simple c d'afficher par exemple un rectangle, indépendant des transformations sur ta scene (donc: il ne bougera jamais de place et tu auras l'impression que c'est vraiment un bouton "par dessus" ta scene 3D), que tu peux facilement rendre transparent en utilisant le blending.

    Apres, pour detecter quand il est cliqué, tu utilises le picking, qui n'est pas trop compliqué à mettre en place.

    en relisant je pense que c la meme chose que proposait fearyourself...

    bonne chance!

  4. #4
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Super merci pour vos réponse je recherche dans ce sens et je tiens au courant

    Rien a dire, developpez.com c'est vraiment le must, pour moi chaque problème a eu sa solution
    MMEEERRRCCIIII a tous

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    IL y a une bibliothqèe ( plus vieille que GLUT ) qui permet de faire des interfaces utilisateurs avec openGL. Bon bien sur le projet et mort. Je crois que ça s'apelle GLUI ( enfin ce qui est sur c'est que ça commence par GL ) :p
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut

    MERCI SA MARCHE SUPER BIEN.
    Vive le PICKING

    Merci cette dernière réponse LittleWhite, je passerai y faire un tour.

    Merci aussi a fearyourself et ShevchenKik

  7. #7
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    J'ai retiré le car j'ai un petit problème avec le picking, je me suis donc dis que le post a un rapport avec puisque c'est toujours à propos de mon GUI.

    Voila le problème :
    Je me suis renseigné sur le picking, merci NeHe, j'ai bien suivie le tuto de ce dernier, et ce fut génial sa marché lorsque je cliquais sur mon *.obj importé je voyais marqué ses informations.
    Donc pour améliorer le système je me suis dis que j'allais faire une class qui me gérerais tout cela automatiquement, mais voila que ma classe marche très bien les fonction sont parfait, mais le code qui s'occupe du picking ne marche plus, alors que c'est le même que précédemment...
    Pourriez vous m'éclairer ?...

    (Voici mon fichier dans lequel se situe le picking)
    Fichiers attachés Fichiers attachés

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Une chose que je me demande depuis le début, c'est que vos boutons, il sont bien en 2D. Vous placer les boutons en coordonnées écran n'est ce pas? Ou alors ( et je trouverai ça plus dur ) en coordonnées monde ?
    Car, sil les boutons sont en coordonnées écran, pour moi, il y a pas besoin de faire de picking. Mais j'avais pensé me tromper car vous aviez pris avec joie la solution du picking.

    Le picking permet de transformer les coordonnées 3D en coordonnées écran.
    La souris renvoie sa position en coordonnées ecran. Donc dans le cas des boutons en coordonnées 2D, y a juste une comparaison à faire entre les coordonnées des boutons et celles de la souris.

    [EDIT]
    En même temps, il aurait juste fallu que je regarde le code pour avoir mes réponses.

    Donc vous travaillez en 2D pour afficher les boutons. Ce qui est normal.
    Ceci est fait par le gluOrtho2D.
    Que je comprend pas trop comment vous l'utilisez, mais peu importe :p.

    Si avec le gluOrtho2D, vous désignez un espace entre 0 et 1, il va falloir faire quelques transformations aux coordonnées de la position de la souris.
    Pour la remise à l'echelle de la position de la souris, vous pouvez faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float realX = xMouse / (float)width_of_the_window;
    float realY = yMouse / (float)height_of_the_window;
    Cela remettra les coorodonnées de la souris entre 0 et 1.

    Il existe aussi une autre méthode qui serait de définir l'espace de travail au coordonnées de la fenêtre ( dans le gluOrtho2D ( voir doc ) ).

    Une fois que vous avez les coordonnées de la souris, qui corresponde donc à la fenêtre, vous n'avez plus qu'a faire le répérage si la souris est dans une boite.
    ( Car normalement, vous savez ou sont vos boites, vu que vous passez les informations que vous avez besoin à la méthode GLGuiButtonDraw )
    [/EDIT]
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    He bien non mes boutons (bien en 2D), je les place en coordonné monde (je ne sais pas comment faire pour les placer en coord. fenêtre, je vais me renseigner).

    Mais tu as raison, je vais chercher dans ce sens, merci pour l'idée

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Zut j'ai fais un edit entre temps ( donc voir le message d'avant )
    Penchez vous sur l'utilisation de la fonction gluOrtho2D, vous avez presque déjà tout de prêt .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    En fait le système que j'utilise et, je crois, le deuxième que tu as écrit, je définis le viewport pour qu'il prenne la totalité de l'écran, puis j'utilise glOrtho2D(), ce qui fais lorsque je clique c'est les même coord. monde que écran.

    Je sais pas si je suis très clair...

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Simplement ( pour repartir sur une bonne base ), quelle sont les positions des bouttons?

    Si celles ci sont un truc du genre > 100 ... on peut croire que vous êtes en coordonnées ecran. ( Normalement vous l'êtes ... je ne vois pas pourquoi je doute , ah si votre dernière phrase ).

    Il faut savoir que les coordonnées monde, ne sont pas du tout les même que les coordonnées ecran.

    Car pour passer des coordonnées monde à celles de l'écran, il faut multiplier par la matrice de modélisation vue ( GL_MODELVIEW ) qui donnera la position des objets selon la position de la caméra ( dans le même repère que la camera ), puis une multiplication avec la matrice de projection ( GL_PROJECTION ) qui donne les coordonnées de l'ecran selon les paramètres de la camera.

    Finalement ce que vous devez faire c'est dans la fonction qui récupère les clics de la souris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( xButton <= xMouse && xButton + widthButton >= xMouse )
         if ( yButton >= yMouse && yButton + heightButton <= yMouse )
              // Un clique à eu lieu sur le bouton
    Ceci pour tout les boutons.

    Par contre, faire attention pour les y car le 0 se trouve en bas de la fenêtre.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  13. #13
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    He bien c'est tout a fait ce que j'ai fait (mais un peu différemment).
    Je vous donne le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	if(posX <= mouse_x && mouse_x <= (posX+width))
    	{
    		if((infoViewport[3]-(posY+heigth)) <= mouse_y && mouse_y <= (infoViewport[3]-posY))
    		{
    			click = true;
    		}
    	}
    	else
    	{
    		click = false;
    	}
    Ici click sera relevé par un autre fonction, dans la fonction IDLE

    Merci a tous pour vos réponses !!

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

Discussions similaires

  1. GUI sur fenetre OpenGL
    Par GlouglouLeDindon dans le forum OpenGL
    Réponses: 9
    Dernier message: 21/11/2008, 12h32
  2. GUI (API) OpenGL Xplateforme ?
    Par ttone dans le forum Apple
    Réponses: 6
    Dernier message: 25/10/2008, 12h01
  3. GUI : Graphical user interface sous OpenGL
    Par Nyarlathotep dans le forum OpenGL
    Réponses: 3
    Dernier message: 29/09/2008, 13h01
  4. Overlapping OpenGL dans environnement GUI bureau
    Par ttone dans le forum OpenGL
    Réponses: 0
    Dernier message: 26/09/2008, 01h11
  5. GUI en complement d'OpenGL
    Par _Michel dans le forum C
    Réponses: 4
    Dernier message: 28/04/2008, 10h20

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