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 :

Déplacement Caméras à l'aide du pavé directionnelle


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Déplacement Caméras à l'aide du pavé directionnelle
    Bonjour à tous,

    Mon soucis est que je n'arrive pas a me déplacer dans environnement ou se trouve mon objet.J'ai créé une fonction ci-dessous mais elle n'est pas fonctionnelle et je ne sais pas ou est le problème .
    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
    void OpenGL::keyPressEvent(QKeyEvent *event)
    {
     
               if(event->key() == Qt::Key_Up)
               {
                   glRotatef(1,-1,0,0);
               }
                if(event->key() == Qt::Key_Down)
                {
                  glRotatef(1,1,0,0);
                }
                if(event->key() ==  Qt::Key_Left)
                {
                  glRotatef(1,0,-1,0);
                }
                if(event->key() ==  Qt::Key_Right)
                {
                    glRotatef(1,0,1,0);
                }
     
     
    }
    Merci pour vos réponses

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    concernant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(event->key() ==  Qt::Key_Left)
                {
                  glRotatef(1,0,-1,0);
                }
    j'aurais plutôt vu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(event->key() ==  Qt::Key_Left)
                {
                  glRotatef(0,1,0,0);
                }
    car si on veut faire tourner la vue courante c'est selon l'axe des Y ( précision importante : je raisonne dans une logique Direct 3d or avec Open GL c'est peut-être différent)
    Ensuite si on veut faire une rotation c'est selon un seul axe donc logiquement que ce soit sur x,y,z une valeur et une seule doit être égale à un les autres à zéro
    Pour finir vous effectuez des rotations sur la matrice courante mais il n'y a pas de sélection de la matrice courante (je suppose GL_MODELVIEW )

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Pour le GLrotate je suis presque sur que c'est comme cela pour OpenGL, j'ai essayé d'ajouter la matrice MODELVIEW mais rien n'y fais

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Il faudrait se mettre à jour et ne pas utiliser glRotatef qui est une fonction obsolète.
    Sinon a mes lointain souvenir glRotatef utilise des angles en degré (et non en radiant) du coup faire une rotation de 1 degré ça doit pas être super visible

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    j'utilise une ancienne version d'open gl c'est pour cela que j'utilise glRotate

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    C'est pas une raison , j'ai fait une lib qui gère du vieux matos , pour les vielles version d'OpenGL je n'utilise pas glrotatef/gltranslatef et tout le bazar , tu peux utiliser "glLoadMatrixf" à la place.
    (Pareil pour glBegin/glTriangle/glEnd etc etc , tu peux utiliser les VA ).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    J'ai revu mon code j'ai finalement fait un switch case pour gérer la rotation, je voulais savoir ce que je dois mettre en paramètre lorsque je fais l’appelle à la fonction depuis une autre classe.
    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
    void OpenGL::keyPressEvent(QKeyEvent *event)
    {
        float mat[16];
          glGetFloatv (GL_MODELVIEW_MATRIX,mat);
     
      switch(event->key())
             {
                 case Qt::Key_Left:
                     glRotatef(1,0,-1,0);
                     break;
     
                 case Qt::Key_Right:
                       glRotatef(1,0,1,0);
                     break;
     
                 case Qt::Key_Down:
                     glRotatef(1,1,0,0);
                     break;
     
                 case Qt::Key_Up:
                     glRotatef(1,-1,0,0);
                     break;
             }
     
    }

  8. #8
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Qu'entends-tu par "vieille version d'OpenGL" ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    j'utilise un programme déja fais et je dois l'améliorer c'est pour cela que je ne voudrais pas tous changer, donc je dois m'adapter

  10. #10
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Qu'entends-tu par "vieille version d'OpenGL" ?
    Moi je parle de la version 1 et 2

  11. #11
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Ben en OpenGL 2, tu avais déjà les shaders, et le pipeline fixe était déjà en dépréciation

    EDIT:
    C'est juste tellement n'importe quoi, d'utiliser des API dépréciées depuis plus de 20 ans...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    je veux juste savoir ce que je dois mettre en paramètre lorsque que je fais l'appelle de cette fonction depuis une autre classe

  13. #13
    Membre éclairé
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 263
    Points : 791
    Points
    791
    Billets dans le blog
    2
    Par défaut
    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
    void OpenGL::keyPressEvent(QKeyEvent *event)
    {
     
               if(event->key() == Qt::Key_Up)
               {
                   glRotatef(1,-1,0,0);
               }
                if(event->key() == Qt::Key_Down)
                {
                  glRotatef(1,1,0,0);
                }
                if(event->key() ==  Qt::Key_Left)
                {
                  glRotatef(1,0,-1,0);
                }
                if(event->key() ==  Qt::Key_Right)
                {
                    glRotatef(1,0,1,0);
                }
     
     
    }
    Je vais répondre à ta problématique. Déjà, fait gaffe aux paramètres de GlRotate, le premier est l'angle en degrés et les autres c'est x y z.
    Si il n'y a pas de rotation c'est parce que OpenGL applique la rotation nul part visiblement. Tu l'appliques pas à la matrice de vue de ta camera.
    Tu peux obtenir ta matrice de vue avec view = glGetFloatv(GL_MODELVIEW_MATRIX).
    Juste avant de passer dans les conditions, il faudra charger une matrice identité avec glLoadIdentity(). Tu appliques tes transformations (dans ton cas des rotations) en fonction de tes conditions que tu as écrites.
    Enfin tu multiplies ta matrice créée avec la matrice vue de la caméra.
    Tu fais à la fin glMultMatrix(view).
    Et il faut pas oublier de mettre à jour view avec view = glGetFloatv(GL_MODELVIEW_MATRIX) comme au début.
    Bon, c'est de la programmation graphique vielle école. Comme on te l'a dit ça se fait plus trop... Et tant mieux parce que je trouve ça moins explicite que de programmer en OpenGL "moderne".

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/02/2014, 13h41
  2. Structure from motion et déplacement caméra
    Par Biloy dans le forum OpenCV
    Réponses: 1
    Dernier message: 27/07/2012, 00h05
  3. déplacement caméra dans un univers 3D
    Par betsprite dans le forum OpenGL
    Réponses: 22
    Dernier message: 12/05/2010, 11h59
  4. Déplacement de caméra dans le monde
    Par korsakoff69 dans le forum DirectX
    Réponses: 9
    Dernier message: 08/09/2006, 11h31

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