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 de texte est mise à jour de l'écran


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Inscrit en
    février 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Affichage de texte est mise à jour de l'écran
    Bonjour,

    J'ai enfin réussi à afficher du texte grâce à GLUT et le fonction 'glutBitmapCharacter', et maintenant, je veux afficher en temps réel le temps écoulé depuis le lancement de l'appli.

    Voici donc mon code:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    /* Includes */
     
    #include "windows.h"
    #include "mmsystem.h"
    #include "stdio.h"
     
    #include "gl/gl.h" 
    #include "gl/glut.h"
     
    /* -------- */
     
     
    void Display( ) ;
    void Reshape( int, int ) ;
     
    void DrawBitmapText( int Posx, int Posy, int Cr, int Cg, int Cb, char Texte[ ] ) ;
     
    int main(int argc, char** argv)
    {
     
        glutInit( &argc, argv ) ;
        glutInitDisplayMode( GLUT_RGBA | GLUT_SINGLE ) ;
     
        glutInitWindowSize( 640, 480 ) ;
        glutInitWindowPosition( 150, 150 ) ;
        glutCreateWindow( "Essais" ) ;
     
        glutDisplayFunc( Display ) ;
        glutReshapeFunc( Reshape ) ;
     
        glutMainLoop( ) ;
     
        return 0 ;
    }
     
    void Display( )
    {  	
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ) ;
        glClear( GL_COLOR_BUFFER_BIT ) ;
     
        char Tps[ 50 ] ;
        sprintf( Tps, "Temps écoulé: %f secondes.", glutGet( GLUT_ELAPSED_TIME ) / 1000.0f ) ;
        DrawBitmapText( -1, 0, 10, 200, 50, Tps ) ;
     
        glFlush( );
    }
     
    void Reshape(int w, int h)
    {
        glViewport( 0, 0, w, h ) ;
        glMatrixMode( GL_PROJECTION ) ;
        glLoadIdentity( ) ;
        gluPerspective( 65.0, ( float ) w / ( float ) h, 1.0, 20.0 ) ;
        glMatrixMode( GL_MODELVIEW ) ;
        glLoadIdentity( ) ;
        glTranslatef ( 0.0, 0.0, -5.0 ) ;
    }
     
    void DrawBitmapText( int Posx, int Posy, int Cr, int Cg, int Cb, char Texte[ ] )
    {
        // On prépare des floats pour la conversion RGB => OpenGlColor
        float r, g, b ;
        r = Cr ; g = Cg ; b = Cb ;
     
        // On fixe la couleur
        glColor3f( ( r / 255 ), ( g / 255 ), ( b / 255 ) ) ;
        // On rasterize
        glRasterPos2d( Posx, Posy ) ;
     
        int t ;
        for &#40; t = 0 ; t < strlen&#40; Texte &#41; ; t++ &#41;
        &#123;
            // On écrit les lettres une par une
            glutBitmapCharacter&#40; GLUT_BITMAP_9_BY_15, Texte&#91; t &#93; &#41; ;
        &#125; ;
    &#125;
    Rien de bien compliqué (même si je suis très fière de ma fonction DrawBitmapText ), mais malheureusement, il semble que le texte ne soit pas redessiné.
    Quand je lance le prog, j'ai une valeur très faible (aux alentours de 0.2) ce qui est normal, mais la valeur n'augmente pas, sauf dans les cas suivants:
    si je réduit la fenêtre, que je la redimentionne, ou que j'ouvre un autre programme par dessus, auxquels cas c'est mis à jour.
    Comment faire pour avoir une mise à jour en temps réel ?

    PS: pour un test éventuel, sachez que j'ai codé ça sous DevC++ avec les libs suivantes en linkées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -lopengl32 -lglu32 -lglut32
    ../../../../../../../Dev-Cpp/lib/libwinmm.a
    Merci d'avance.
    Nicolas "Galdor" Martyanoff
    Directeur de Silver Project

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    janvier 2003
    Messages
    2 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2003
    Messages : 2 826
    Points : 4 572
    Points
    4 572
    Par défaut
    Je coderais ta fonction Display() ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    void Display&#40; &#41;
    &#123;     
        glClearColor&#40; 0.0f, 0.0f, 0.0f, 0.0f &#41; ;
        glClear&#40; GL_COLOR_BUFFER_BIT &#41; ;
     
        char Tps&#91; 50 &#93; ;
        sprintf&#40; Tps, "Temps écoulé&#58; %f secondes.", glutGet&#40; GLUT_ELAPSED_TIME &#41; / 1000.0f &#41; ;
        DrawBitmapText&#40; -1, 0, 10, 200, 50, Tps &#41; ;
     
        glutPostRedisplay&#40; &#41;;
    &#125;
    Anciennement, si tu veux et pour caricaturer, tu afficher l'image et tu vidais tes tampons. Avec glutPostRedisplay(), tu feras dans l'animation.
    Pour plus de détails regardes dans glut.h

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Futur Membre du Club
    Inscrit en
    février 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Ah bah merci, c'est vrai que ça marche nettement mieux, et c'est même plus joli avec un double buffer
    Nicolas "Galdor" Martyanoff
    Directeur de Silver Project

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    janvier 2003
    Messages
    2 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : janvier 2003
    Messages : 2 826
    Points : 4 572
    Points
    4 572
    Par défaut
    De rien !

    N'oublies pas par contre de cliquer sur le petit bouton "Résolu" en bas à gauche.

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Mise à jour des données du CR lorsque la DB est mise à jour
    Par j0hn01 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/02/2009, 15h33
  2. Envoi email des qu'une page internet est mise à jour
    Par mamok dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/09/2007, 11h52
  3. [urgent]Affichage de JPanel et mise à jour
    Par joker.benj dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/05/2006, 17h17

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