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éplacer un objet avec la souris


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 39
    Points
    39
    Par défaut déplacer un objet avec la souris
    Bonjour,

    j'essaie de déplacer un cube programmé en openGL, j'utilise aussi glut pour la gestion des callbacks.

    LE problème que j'ai est que j'arrive bien à déplacer mon cube avec ma souris, mais celle-ci ne "suit" pas exactement le cube dans son mouvement.
    Plus précisemment, lorsque je translate le cube dans le plan (x,y) il y a un décalage qui se crée entre la position de la souris et du cube au cours de son mouvement ... notamment il n'y a pas ou peu de décalage quand le cube est proche du plan image (z_camera ~ z_cube) , et un gros décalage quand le cube est loin du plan image (z << 0)

    je ne sais pas si c'est très clair, mais je pense que c'est lié à la projection perspective utilisée et le viewport. Je n'arrive pas à trouver la relation entre la position de la souris dans le plan image 2D et la position de la souris projetée dans le plan 3D (en orthographique ou en perspective).... Si quelqu'un peut m'aider


    merci par avance!!

  2. #2
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Salut,

    À ma connaissance, il faut prendre la matrice de « modelview » et « projection » avec glGetDoublev().
    Il faut aussi le « viewport » qu'on prends avec glGetIntegerv(), ensuite il faudra utiliser gluUnProject()
    pour transformer les coordonnées du curseur 2D vers les coordonnées de l'objet 3D.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 39
    Points
    39
    Par défaut
    salut,

    merci pour ta réponse en fait je voudrai essayer de le faire sans utiliser une fonction prédéfinie, pour bien comprendre comment ça marche. D'après ce que je comprend, je dois calculer la matrice inverse de la matrice de projection pour obtenir les bon coefficients ? Ca me permettrait de projeter le point 2D (x,y), qui s'écrit en 3D (x,y,0,1), dans l'espace 3D ?

    par exemple quel coefficients je devrai prendre de ces matrices de projection, tout en bas de la page ? Les matrices inverses ?
    http://glprogramming.com/red/appendixf.html

    je devrais calculer inv(R) x, ou inv(R) est la matrice inverse de la matrice de projection R et x le point 2D ecrit en 3D ?

    c'est bon ...?

  4. #4
    Membre éclairé
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Tu vas bien te prendre la tête avec ça ^^, sinon désolé je n'ai jamais essayé.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut


    J'avais le même problème que toi, en fait le truc c'est que le cube est dans un espace en 3d et pas ta souris (2D écran) donc si tu prends un angle de vue différent de celui perpendiculaire (glortho) tu vois un écart entre la souris et le clavier c'est ecart est le Z (la profondeur) et cela ne se voit pas lorsque tu est à 90°parce que tu es en face (tu voit pas la profondeur)

    C'est dur à expliquer...

    Bon pour ton problème, sache qu'il faut que tu transforme la position dans un espace 3D de ton cube en position 2D pour pouvoir mettre en relation sa position avec la position de ta souris.

    Moa j'avais essayé de feinter au début en mettant des coef de partout mais c'est pas ça et ça marche pas.

    Pour résoudre "proprement" ton problème tu dois utiliser les fonctions gluUnproject et gluProject.

    J'ai mis longtemps pour bien faire ça ^^, bon je te laisse un peut chercher sur ces 2 fonctions si t'y arrive pas je te donnerais le code.

    (^^ si tu regarde un peu les fonctions tu va t'apercevoir qu'elle te demandent les coordonnées X (ok pas de problème), Y (ok pas de problème) , et Z (de la souris )
    heheh tu va bien t'amuser pour comprendre).

    A+
    MProg

Discussions similaires

  1. comment déplacer un objet avec la souris
    Par domi's dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 13/05/2014, 07h51
  2. [C#] Déplacer un composant avec la souris
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2011, 23h12
  3. Déplacer un panel avec la souris
    Par Harry dans le forum Delphi
    Réponses: 14
    Dernier message: 05/06/2006, 19h18
  4. [POO] Déplacer un objet avec un pas.
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/12/2005, 13h32
  5. Déplacer une TImage avec la souris
    Par Ingelishome dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/03/2005, 14h16

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