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 :

Pb rafraichissement objet


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Par défaut Pb rafraichissement objet
    Bonjour à tous,

    Voilà, j'ai un jeu de dames à faire et pour celà j'ai une classe piece, joueur et partie.
    Les joueurs disposent d'une liste de pieces
    Je souhaite lors de l'évènement clavier correspondant à la touche 's' changer la couleur de la premiere piece du joueur pour la selectionné.
    L'attribut correspondant à la couleur est bien modifié mais le réaffichage n'a pas lieu malgré glutPostRedisplay();
    Voici l'apercu de 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
     
    class Piece
    {
    public :
    // variables de classe
        float posX, posY; // position de la piece
        bool selected;  // la piece est elle selectionnee
        bool pieceBlanche; // quelle est la couleur de la piece
        bool Dame;
     
    // constructeur
        Piece(float x, float y, bool blanche) ......
     
    // Fonction d'affichage
    void display()
    {
     
     
     
       // nettoyage de l'�cran et du tampon de profondeur
       glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     
       // Reinitialisation de la matrice de transformation
       glLoadIdentity();
     
       // code de dessin de la partie
    	glTranslatef(t_x,t_y,0);
       P->afficherPlateau();
     
    // le placement des objets se fait dans la matrice de mod�lisation-vue
    glMatrixMode(GL_MODELVIEW);glutPostRedisplay();
       // le buffer dans lequel on vient de dessiner est envoy� � l'�cran.
       glutSwapBuffers() ;
    }
    // Fonction de controle du clavier
    void key(unsigned char key,int x,int y)
    {
    std::list<Piece *>::iterator iter;
    if(P->joueur_A_joue)
    	iter = P->A->Pieces.begin();
    else  iter = P->B->Pieces.begin();
       switch(key) 
       {
          // Arret du prog. si on appuie sur 'Q' ou 'q'
          case 27:
          case 'Q':
          case 'q': exit(0);
          case 'x': t_x=t_x-0.1;
    	break;
          case 'X': t_x+=0.1;
    	break;
          case 'y': t_y=t_y-0.1;
    	break;
          case 'Y': t_y+=0.1;
    	break;
          case 's' : {
    		(*iter)->selectionner();//iter++
     
    		 }    //ARRIVE PAS A CHANGER LA COULEUR
    	break;
       }
       glutPostRedisplay();
    }
    Merci de votre aide car la je comprend plus.

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    generalement, on met plutot l'appel a glutPostRedisplay dans la methode idle, pas dans les callback clavier.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Par défaut
    D'accord mais mes translations fonctionnent bien alors pourquoi pas le reste ?
    Je ne pense pas que ce soit ca le problème. Il doit y avoir autre chose.

  4. #4
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 594
    Par défaut
    ça marche pour tes translation si tu ne fait que ça mais glutPostRedisplay ne doit pas être utilisé partout comme ça si tu fais du temps réel

    comme le dit bafman, c'est dans glutIdleFunc que tu fais appel à glutPostRedisplay

    tu peux regarder ce petit cours :
    Fenêtrage OpenGL avec GLUT
    qui te donnera les base du fenêtrage avec GLUT

    edit : en plus je ne sait pas quelle fonction est appelé par glutPostRedisplay mais le glutSwapBuffers se trouve normalement dedans
    et là dans la fonction display() tu as un glutPostRedisplay après avoir dessiné ET un glutSwapBuffers
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/01/2011, 22h53
  2. Problème de rafraichissement d'objet Uicontrol
    Par soeursourire dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/10/2007, 10h57
  3. Rafraichissement de la fiche ainsi que de tous les objets
    Par portu dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/01/2004, 01h25
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 17h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h41

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