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 :

plusieurs objets dans une fenêtre


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut plusieurs objets dans une fenêtre
    Bonjour à tous,

    voici le code très simple que j'ai dans la fonction d'affichage pour afficher 2 cubes :

    glTranslatef(-3,0,0);
    glRotatef(10,1,0,0);
    Cube(1,1,1);

    glLoadIdentity();
    glTranslatef(3,0,0);
    glRotatef(-10,1,0,0);
    Cube(1,1,1);

    Cube est une fonction que j'ai écrite et qui permet de générer...un cube
    Bref, lorsque j'enlève la fonction glLoadIdentity() j'ai bien 2 cubes de dessiner. Par contre lorsque je la rajoute, je n'ai plus le deuxième cube !! Normalement je devrais toujours l'avoir non ? Cette fonction permet tout simplement de réinitialiser la matrice courante à la matrice identité normalement et donc d'annuler toutes les transformations antérieures. Si quelqu'un avait un réponse ou essayer le code ci-dessus.

    Merci d'avance.

    Bode

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    As tu pensé a ré-initialisé ta matrix au début de ta frame ?
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    c'est à dire ?

  4. #4
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    Bonjour.
    Lorsque tu fais "glLoadIdentity" tu réinitialises la matrice courante dans ton cas je suppose qu'il s'agit de la matrice modelView donc tu "détruis" (ou réinitialise) également la matrice de ta caméra d'où la "disparition" de ton cube. Utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    glPushMatrix();   // sauvegarde de la matrice courante avant transformations
    glTranslatef(-3,0,0);
    glRotatef(10,1,0,0);
    Cube(1,1,1);
     
    glPopMatrix();    // restauration
    glTranslatef(3,0,0);
    glRotatef(-10,1,0,0);
    Cube(1,1,1);
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  5. #5
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par babar63 Voir le message
    Bonjour.
    Lorsque tu fais "glLoadIdentity" tu réinitialises la matrice courante dans ton cas je suppose qu'il s'agit de la matrice modelView donc tu "détruis" (ou réinitialise) également la matrice de ta caméra d'où la "disparition" de ton cube. Utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    glPushMatrix();   // sauvegarde de la matrice courante avant transformations
    glTranslatef(-3,0,0);
    glRotatef(10,1,0,0);
    Cube(1,1,1);
     
    glPopMatrix();    // restauration
    glTranslatef(3,0,0);
    glRotatef(-10,1,0,0);
    Cube(1,1,1);
    Je suis d'accord ... mais il faut quand même la reinitialisé une fois :
    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
    
    // debut de fram
    
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    
    //... autre code d'ajout ...
    
    glPushMatrix();   // sauvegarde de la matrice courante avant transformations
    glTranslatef(-3,0,0);
    glRotatef(10,1,0,0);
    Cube(1,1,1);
    
    glPopMatrix();    // restauration
    glTranslatef(3,0,0);
    glRotatef(-10,1,0,0);
    Cube(1,1,1);
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    délire ça maaaarcheuuu !!!! Je crois que je viens de comprendre quelque chose.
    Je n'avais tout le code de ma fonction, le voici :

    glLoadIdentity();
    glTranslatef(0,0,-15);
    glTranslatef(0,0,alphaZ);
    glRotatef(alphaX,1,0,0);
    glRotatef(alphaY,0,1,0);

    glPushMatrix(); //sauvegarde des transformations précedentes

    glTranslatef(-3,0,0);
    glRotatef(10,1,0,0);
    Cube(1,1,1);

    glPopMatrix(); //A la place ici j'avais un glLoadIdentity();
    glTranslatef(3,0,0);
    glRotatef(-10,1,0,0);
    Cube(1,1,1);
    //Fin du code

    Alors j'ai une question : je sais que lorsque je fais un glPushMatrix() je sauvegarde la matrice courante qui arrive donc dans une pile (ici c'était pour MODELVIEW). Je croyais que les transformations dans la pile s'appliquaient à toutes les futurs transformations mais en fait pas du tout. Je m'explique. Si je tape ce code :

    glTranslate(1,0,0);
    glPushMatrix();
    glLoadIdentity(); //Réinitialise la matrice courante donc plus de translate.
    glRotatef(10,0,1,0);
    //puis dessin de ce que l'on veut...

    Dans cette exemple il n'y aura qu'une rotation car j'ai écrasé la translation dans la matrice courante par glLoadIdentity(). Mais justement je croyais que les transformations empilées étaient appliquées en remontant dans la pile. D'après ce que je viens de voir pas du tout. Il faut faire régulièrement des glPopMatrix() pour rappeler les matrices empilées et refaire des calculs dessus pour afficher d'autres objets (bon je ne sais pas si je clair mais pour moi maintenant ça l'est carrément plus !!).

    En tout cas merci mille fois car je vais pouvoir continuer à réaliser mon robot virtuel.

    BODE

    PS : je n'arrive pas à trouver le tag RESOLU...

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

Discussions similaires

  1. modifier dynamiquement un ou plusieurs controls dans une fenêtre
    Par boubou38 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 13/01/2012, 10h58
  2. résumé de plusieurs popup dans une fenêtre edit
    Par nilsmatlab dans le forum Interfaces Graphiques
    Réponses: 30
    Dernier message: 27/05/2011, 14h55
  3. Réponses: 1
    Dernier message: 14/11/2010, 00h09
  4. Réponses: 0
    Dernier message: 13/11/2010, 18h20
  5. Plusieurs objets dans une Shadowbox
    Par kashin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/09/2008, 09h12

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