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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    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 540
    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 averti
    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
    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 confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 226
    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 averti
    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
    Par défaut
    j'utilise une ancienne version d'open gl c'est pour cela que j'utilise glRotate

  6. #6
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 226
    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 chevronné
    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
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    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 : 302
    Billets dans le blog
    3
    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, 14h41
  2. Structure from motion et déplacement caméra
    Par Biloy dans le forum OpenCV
    Réponses: 1
    Dernier message: 27/07/2012, 01h05
  3. déplacement caméra dans un univers 3D
    Par betsprite dans le forum OpenGL
    Réponses: 22
    Dernier message: 12/05/2010, 12h59
  4. Déplacement de caméra dans le monde
    Par korsakoff69 dans le forum DirectX
    Réponses: 9
    Dernier message: 08/09/2006, 12h31

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