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 :

Selection d'un point sur un terrain avec la souris en OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut Selection d'un point sur un terrain avec la souris en OpenGL
    Bonjour à toutes et à tous.

    Je suis tout a fait nouveau sur le site et j'ai un petit problème de sélection en OpenGL.

    J'ai déjà vu les conversation à ce sujet qui m'ont aiguillé dans mes développement mais il me reste un truc à résoudre.

    J'utilise le code source fourni par Nehe pour la sélecdtion d'un point sur un terrain avec la souris.
    http://nehe.gamedev.net/data/article...asp?article=13

    Je récupère les coordonées X, Y et Z et j'ai eu vraiment du mal à comprendre comment représenter mon marqueur sur le terrain.

    J'utilise ce code pour afficher ma sphère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	glPushMatrix();
    	glLoadIdentity ();
    	glTranslated(X, Y, Y);
    	glColor4f (1,0,0,1);
    	gluSphere (quadObjLight,4,8,8);
    	glPopMatrix();
    Ce code fonctionne très bien, mais is je retire glLoadIdentity les coordonées semblent abérantes.

    Je pensait que les coordonées X, Y et Z renvoyée par la fonction gluUnProject étaient vraiment des coordonées sur mon terrain mais il semble que non mais plutot un vecteur de translation par rapport à la caméra ou je ne sais quoi.

    Avez vous une idée pour transformer ces coordonée X, Y et Z renvoyée par gluUnProject en coordonée réelles sur le terrain et donc par rapport à l'axe 0,0,0 de mon monde.

    En espérant me faire comprendre.

    Cordialement.

    Sam

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    salut et bienvenue

    si ça peux te rassurer, tu fais partie des nombreuses personnes à avoir des problèmes à l'utilisation de gluUnProject

    normalement tu récupères les coordonnées réelles sur ton terrain
    pour cela, il faut que tu récupères correctement les matrices que tu passes en paramètre

    logiquement, les valeurs que tu récupères indiquent le point que tu as indiqué mais non projeté (d'où le unproject), et si tu veux placer une sphère dans ta vue en 3D par rapport aux coordonnées 2D, alors tu dois appliquer à ton résultat les mêmes transformations qu'il y a dans les matrices que tu as envoyé à gluUnProject
    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.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 118
    Par défaut
    http://pyopengl.sourceforge.net/docu...roject.3G.html

    Ton point est exprimer en coordonnées homogène dans la matrice de la caméra(comme indiqué sur le lien, la valeur w n'est pas renvoyer mais doit valeur dans ton cas 1).

    Ensuite, si tu veut la coordonnée de ton point dans le repère de ton terrain, tu doit la multiplier par la matrice de ta caméra et la tu aura ces coordonnées global.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Oui, j'ai vu ça apparement je ne suis pas le seul à avoir des problème avec la fonction gluUnProject.

    Bon déjà merci pour vos réponses, mais je ne suis pas sur de bien comprendre.

    Après avoir récupéré les coordonées avec gluUnProject, je dois ensuite effectuer une transformation de ces coordonées en utilisant la matrice de ma caméra ? Mais en fait je pensais que le code fourni par Nehe se suffisait à lui même ?

    Je n'ai pas encore implémenté de caméra, j'ai commencé mon rendu OpenGL par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		glTranslatef(xt,yt,zt);
    		glRotatef(wAngleX, 1.0f, 0.0f, 0.0f);
    		glRotatef(wAngleY, 0.0f, 1.0f, 0.0f);
    		glRotatef(wAngleZ, 0.0f, 0.0f, 1.0f);
    La question que je pose,
    dois je faire un glGetFloatv (GL_MODELVIEW_MATRIX,MaMatrice de 16)
    pour obtenir la matrice de ma vue pour ensuite transformer les points X,Y et Z de gluUnProject avec cette matrice ?

    J'ai déjàa essayé plein de truc comme
    - une rotation des coordonées X,Y et Z avec la matrice GL_MODELVIEW_MATRIX
    - une rotation avec la matrice inverse
    - une translation etc..
    Sans aucun succès.

    Sam

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Bon alors du nouveaux,

    Effectivement j'ai compris maintenant que les coordonées renvoyées par gluUnProject sont:
    - X et Y données par rapport au centre de ma caméra et donc par rapport au centre de mon écran.
    - Z est la distance entre la surface de mon ecran (le plan) et le point sélectionné sur le terrain.

    Ce que je fais ensuite je crée un vecteur
    (X,0,Z) car la coordonées Y me sera données par une méthode du genre GetElevation (X,Z)

    Puis je multiplie mon vecteur (X,0,Z) par la matrice de la camméra pour l'orienter dans le même sens que ma caméra.

    Puis j'ajoute les coordonées x,y,z de ma caméra et jusqu'à là ça me semble assez logique mais le résultat n'est super significatif.

    Le problème c'est que Z renvoyé par gluUnProject est toujours négatif.

    Vous n'avez pas une petite idée ?

    Sam

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    Citation Envoyé par Lejumeau
    Le problème c'est que Z renvoyé par gluUnProject est toujours négatif.
    l'axe Z est dirigé vers toi non ?
    donc le fond de ta vue part dans les Z négatifs
    logique
    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écupérer les coordonnées de points d'une surface avec la souris
    Par ijnuhbygv dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 06/08/2011, 01h57
  2. Selection d'une figure dans un panneau avec la souris
    Par Geo34 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 16/12/2010, 17h25
  3. Réponses: 0
    Dernier message: 22/02/2010, 01h59
  4. séléctionner le point d'une courbe avec la souris et un axe
    Par maristil dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 10/04/2009, 11h57
  5. Dessiner un point sur un pixmap avec GTK2
    Par jijiz dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 14/04/2008, 17h52

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