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

GLUT Discussion :

Rafraichissement de la fenêtre


Sujet :

GLUT

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Rafraichissement de la fenêtre
    Bonjour,

    Je suis en train de développer une petite application en GLUT, et je doit faire une fenêtre dont les données affichées évoluent en temps réél avec les variables.

    J'ai une boucle dans mon code C qui fait évoluer ces variables. Je voudrais pouvoir voir ces valeurs s'afficher dans ma fenêtre GLUT.

    Mon problème est que pour afficher ma fenetre GLUT, j'ai recours à glutMainLoop() , hors, une fois cette commande effectuée, mon programme ne continue pas. Je ne peut donc pas voir les données évoluer. J'ai vu cette fonction : glutPostRedisplay() , mais je ne sais pas comment l'utiliser, étant donné que le programme s'arrete à glutMainLoop()


    Avez vous une idée pour résoudre ce problème ?
    Merci d'avance.
    Papy.

  2. #2
    Expert éminent sénior

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Lorsque tes calculs sont terminés, ou lorsque tu veux mettre à jour l'affichage, fait simplement un appel à glutPostRedisplay.

    Glut s'occupera du reste.

    Jc

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je n'ai pas bien compris comment m'en sortir :

    En fait, dés le début de mon application, je lance la fenetre GLUT, car elle doit afficher à l'utilisateur des données qui lui permettent de faire des choix.

    Or, mon application ne se lance pas, si je met un printf juste aprés glutMainLoop() , celui ci ne s'affiche pas.

    Ou dois je mettre la fonction de rafraichissement pour que le programme continue aprés l'affichage de la page ?

    En fait, je voudrais faire un affichage en temps réél et je suis bloqué par le fait que le programme s'arrete à glutMainLoop().

    Merci.
    Papy.

  4. #4
    Expert éminent sénior

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Attention, tu mélanges certaines choses...

    Citation Envoyé par Papybross
    En fait, dés le début de mon application, je lance la fenetre GLUT, car elle doit afficher à l'utilisateur des données qui lui permettent de faire des choix.

    Or, mon application ne se lance pas, si je met un printf juste aprés glutMainLoop() , celui ci ne s'affiche pas.
    En effet, dépendant du système d'exploitation, il est possible que printf ne marche plus. Il faudrait utiliser l'affichage à l'écran. Glut posséde une fonction glutBitmapCharacter (bien que lente mais elle a l'avantage d'être simple à utiliser...

    Voici un exemple d'utilisation:
    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
    void renderstring(double x,double y, void* font, char* s)
    {
        //Disable OpenGL flags
        glDisable(GL_TEXTURE_2D);
    	glPushMatrix();
    	glDisable(GL_DEPTH_TEST);
     
    	//Drawing text
    		glRasterPos2f(x,y);
    		while(*s)
    			{			
    			glutBitmapCharacter(font,*s);
    			s++;
    			}
    	glPopMatrix();
    }
    Tu passes la position du texte à afficher et un format du texte et le pointeur vers le char*.

    Le format peut être:

    GLUT_STROKE_ROMAN
    GLUT_STROKE_MONO_ROMAN
    GLUT_BITMAP_9_BY_15
    GLUT_BITMAP_8_BY_13
    GLUT_BITMAP_TIMES_ROMAN_10
    GLUT_BITMAP_TIMES_ROMAN_24
    GLUT_BITMAP_HELVETICA_10
    GLUT_BITMAP_HELVETICA_12
    GLUT_BITMAP_HELVETICA_18
    Dernière remarque, je mets quelques glDisable avant de faire l'affichage du texte, il faudra peut-être les remettre après, cela dépend de ton application.

    Ou dois je mettre la fonction de rafraichissement pour que le programme continue aprés l'affichage de la page ?
    Le programme continue à tourner et la fonction d'affichage est appelée quand cela est nécessaire. Soit par un mouvement de la fenêtre, ou un clic de souris, ou alors un appel à glutPostRedisplay, etc.

    En fait, je voudrais faire un affichage en temps réél et je suis bloqué par le fait que le programme s'arrete à glutMainLoop().
    Pour avoir un vrai affichage en temps réel, il serait plus judicieux de passer par SDL. Par contre, l'affichage de texte sous SDL est plus compliqué.

    Une autre solution serait de rester avec glut et demander l'affichage dès que possible, donc installer une fonction Idle (je crois que c'est glutIdleFunction()) qui fera un glutPostRedisplay...

    La fonction Idle dit: si j'ai rien à faire... Et appeler glutPostRedisplay dira: ben alors redessine...

    Jc

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup,
    Ta réponse est trés complète, je vais essayer d'adapter tout ca à mon projet, en espérant que je m'en sorte.

    Merci,
    Papy.

  6. #6
    Expert éminent sénior

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Papybross
    Merci beaucoup,
    Ta réponse est trés complète, je vais essayer d'adapter tout ca à mon projet, en espérant que je m'en sorte.

    Merci,
    Papy.
    Si tu as un problème, pose une question, quelqu'un répondra,

    Jc

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Comment être sure que mon appli prenne le focus ?
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/12/2002, 15h00
  3. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  4. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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