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 :

Question à propos du picking OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut Question à propos du picking OpenGL
    Bonjour,
    Je gère un modèle 3D constitué d'un ensemble de polygones partageant des arêtes communes. L'ensemble de polygones est stockés dans une base de données (un identtifiant unique pour chaque polygone + les coordonnées des ses différents sommets). J'aimerai bien pouvoir cliquer sur un polygone pour avoir son identifiant qui est déjà stocké dans la base de données. J'ai regardé un peu sur le net le "picking", mais je sais pas comment l'utiliser dans mon cas. En dssinant la scène 3D, je peux fournir l'identifiant de chaque polygone. Mes questions:
    1) Quelles sont les différentes étapes pour attribuer pour chaque polygone son identifiant correspondant dans la base de données et puis en cliquant avec la souris sur chauqe polygone on obtient son identifiant?
    2) Est ce que c'est possible aussi de selectionner un objet constitué d'un ensemble de polygones?
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 80
    Par défaut
    Alors alors,

    Commençons par quelques explication sur ce qu'est le picking.

    Cela permet de récupérer le nom associé au pixel qui est sous la souris, et quand je dis nom, je dis ENTIER (nous sommes en openGL.)

    1) Quelles sont les différentes étapes pour attribuer pour chaque polygone son identifiant correspondant dans la base de données et puis en cliquant avec la souris sur chauqe polygone on obtient son identifiant?
    Primo, on initialise la pile de nom :

    ensuite, on defini la zone de pointage (en générale un bloc de 3x3 pixel centré sur le pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // recup du viewport
    glGetInteger(GL_VIEWPORT, vp);
    // zone de selection (via GLU)
    gluPickMatrix( sourisX, sourisY, 3, 3, vp);
    On donne un buffer qui stockera le resultat
    Puis on passe en mode 'selection'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glSelectBuffer(RBuffer);
    glRenderMode(GL_SELECT);
    apres on dessine les objets, en placant leur noms dans la pile de noms exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    glPushName(int_Nom);
     // On dessine une primive (ou plusieurs)
     
    // on change le nom en haut de pile 
     
    glLoadName(int_Nom2);
    // On dessine une autre primitive... 
     
    (...)
     
    // a la fin, on vide la pile (merci de faire les chose bien)
     
    glPopName();
    Apres ca, on peut enfin recupérer les resultats.
    On oubliera pas de remettre le viewPort comme il faut avant de re-rendre l'image.

    pour les resultats

    on repasse en mode rendu, et on recupere les nombre de primitives traversée par le pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int count = glRenderMode(GL_RENDER);
    du coup, notre RBuffer contient exactement 'count' entrées.
    Pour chaque entrée, on trouve la profondeur et l'ID du hits.

    Si tu travaille en JAVA (comme moi) je peut te founir une fonction qui analyse ca et renvois simplement l'ID de la premiere face (celle qui est directement sous le curseur.



    2) Est ce que c'est possible aussi de selectionner un objet constitué d'un ensemble de polygones?
    Bha oui, si le l'objet a un ID entier unique, ou que tu sais que un entier N appartient a cet objet.

    J'espere t'avoir aidé.
    Hesite pas a poser d'autres questions

    HopeLeaves

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Merci bcp pour tes explications.
    Si tu travaille en JAVA (comme moi) je peut te founir une fonction qui analyse ca et renvois simplement l'ID de la premiere face (celle qui est directement sous le curseur.
    Moi aussi je travaille avec Java. J'aimerai bien avoir un exemple et comme ça je comprendrai mieux.
    Merci d'avance.

Discussions similaires

  1. Question à propos de la méthode display() d'OpenGL
    Par choko83 dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/05/2008, 16h03
  2. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  3. Petite question à propos du redbook...
    Par Michaël dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h54
  4. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 12h21
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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