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éterminer les coordonnées d'un point sur un plan distant dans une vue en perspective


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut Déterminer les coordonnées d'un point sur un plan distant dans une vue en perspective
    Bonjour à toutes et à tous,

    L'intitulé du message est trop court ... je n'ai pas eu la possibilité d'ajouter la fin alors je vais écrire le message complet maintenant :
    "Comment déterminer les coordonnées d'un point dans un plan distant dans une vue en perspective à partir de la position du curseur de la souris sur la vue".

    Je m'explique. J'ai réalisé un objet graphique affichant une carte en 2D. Je connais les coordonnées de cette carte et l'origine est fixé à x=0 et y=0 pour le coin inférieur gauche. Pour obtenir un effet de zoom, je dessine ma carte à différente distance en utilisant une vue en perspective.

    Ce que j'aimerai bien faire c'est centrer ma carte sur une position arbitraire, la position étant donnée par la position du curseur de la souris sur la carte. Ma carte pouvant se trouver à différente distance, comment puis je faire pour déterminer la position sur la carte du point se trouvant sous le curseur de ma souris ?

    Ma vue est définit de la façon suivante (code implémenté dans la fonction appelée à chaque demande de redimensionnement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	glViewport(0, 0, largeur, hauteur);
     
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glFrustum(-largeur, largeur, -hauteur, hauteur, distanceMini, distanceMaxi);
     
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    Est ce qu'il existe une solution à mon problème sans être obligé d'utilisé une vue orthogonale ?

    D'avance merci pour votre aide.

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Moi aussi j'ai un problème avec les coordonnées... J'ai un objet 3d situer sur une table puis je veut le centré à la position de ma souris à un endroit quelconque sur la table. Je crois que ca va faire deux semaine que je suis sur ce problème et j'avance à pas de tortue...

    Il y a pas l'air d'avoir beaucoup de personne qui ont eu des problèmes avec ca ou qui sait comment faire face au problème parce que je n'ai pas eu de réponse à aucune de mes discussions sur le sujet.

    Je peut dire que j'y arrive presque mais la position est toujours décalé pas rapport à la position affiché de l'objet...Je crois que c'est l'angle entre la caméra et l'objet en cause.

    Bon... Ce que j'utilise c'est les fonctions glReadPixels et glUnProject pour obtenir la position dans la scène 3D à partir de l'endroit que j'ai cliquer avec ma souris...Mais comme je dit, dans mon cas il y a un problème...peut-être que toi ca va bien fonctionner, je te le souhaite.

    C'est en C# mais c'est les mêmes paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Sert à obtenir la position de la coordonnée Z
    // position x de la souris, position y de la souris, les 2 suivantes sont la taille
    // du rectangle à lire, ... ca parle par soi-même, la dernière c'est le Z que j'ai
    // besoin pour glUnProjet
    GL.glReadPixels(e.X,(int)winY, 1, 1, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, ref winZ);
     
    // Obtenir la position x,y et z dans la scène 3D
    GLU.gluUnProject((double)e.X,winY, (double)winZ, modelview, proj, viewport, ref posX, ref posY, ref posZ);
    Si tu veut obtenir la position contraire, une position dans la scène que tu veut convertir en coordonnée de la fenêtre c'est glProject

    DestinyWar
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Salut !

    Mon problème est plus simple que le tien dans la mesure où le plan de profondeur est orthogonnale et que finalement c'est plus de la 2D que de la 3D.

    Comme solution j'ai utisé Pythagore mais tu auras certainement besoin d'un peu plus de mathématiques que moi pour résoudre ton problème.

    En ce qui me concerne donc, j'ai utilisé Pythagore pour résoudre mon problème. Dans un premier temps, connaissant la distance à laquelle est affichée ma carte et aussi l'angle de vision spécifié dans la fonction glFrustum, je détermine la hauteur visible (en pixel) dans le plan d'affichage de la carte. Ensuite, je détermine le décallage (en pixel) par rapport au centre de ma carte et la position de la souris. Connaissant les dimensions (en mètre) de ma carte, je calcul l'échelle en pixel/mètre et la hauteur en mètre visible dans le plan d'affichage de la carte. Enfin, j'utilise ces échelles et les valeurs de décallage pour déterminer la nouvelle position pour centrer ma carte.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    DestinyWar45, va falloir faire chauffer les mathématiques pour ton problème. Si je peux te donner un conseil, c'est de prendre un crayon et un bout de papier et de modéliser ton problème

    J'ai résolu mon problème parce que ma représentation est en 2D et que je connais la distance et l'angle, je sais que mon curseur pointe sur mon plan d'affichage de la carte. Si tu arrives à déterminer la distance entre la caméra et la table tu auras plus d'information et tu arriveras à peut être à résoudre ton problème.

    Bon courage.

    Je ne met pas la balise RESOLU pour que quelqu'un d'autre puisse te répondre.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Oui, c'est en effet un défi mathématique, j'ai réussi à trouver tous les informations angle de vue selon la position cliquer etc.. distance avec la caméra etc.. mais je sais pas comment ramener le décallage lol

    J'y réfléchie encore...

    DestinyWar
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

Discussions similaires

  1. Extraire les coordonnées d'un point sur un graphe LineChart
    Par Anthony BIGET dans le forum JavaFX
    Réponses: 16
    Dernier message: 26/09/2014, 09h33
  2. [XL-2010] Récupérer les coordonnées d'un point sur un graphique d'un simple clic
    Par leblesois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2014, 18h46
  3. Trouver les coordonnées d'un point sur une surface NURBS
    Par oodini dans le forum Mathématiques
    Réponses: 2
    Dernier message: 25/05/2011, 18h35
  4. Détermination des coordonnées d'un point sur un plot
    Par Contractofoued dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/10/2007, 11h46
  5. Réponses: 2
    Dernier message: 27/03/2007, 18h58

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