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 :

Récupérer la point 3d le plus loin


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupérer la point 3d le plus loin
    Bonjour,

    J'arrive a recupérer le point 3D de la surface d'un tronc humain issu du click de la souris en utilisant gluUnproject. Par contre, cette fonction te permet d'obtenir le point 3d ayant le z le plus près et moi je veux aussi avoir le z le plus loin. Comment puis-je m'y prendre?

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Le mieux pour faire du picking, c'est encore de faire un glRenderMode(GL_SELECT)

    http://www.opengl.org/documentation/...endermode.html

    en gros ce que ca te permettra de récupéré, c'est quel bout de dessin à été fait et quel est ca distance la plus proche et la plus éloigné (dans le cas ou tu ne récupére pas que ce qu'il y'a sous le curseur)

    pour limité le dessin au curseur gluPickMatrix(float x, float y, float dx, flaot dy , GLint viewport[])

    Le truc c'est que tu peux donner une liste de numéro de dessin, j'avais fais un prog de rubix cube ca donner ca :

    //pour le cube
    numéro dessin pousse '1' //1 dans la liste
    dessin du cube :
    {
    numéro dessin pousse '2' //1, 2 ou 2, 1 dans la liste (j'ai un trou)
    dessin d'une face
    enléve la téte de liste numéro dessin //1 dans la liste

    numéro dessin pousse '3' //1, 3 ou 3, 1 dans la liste (j'ai un trou)
    dessin d'une face
    enléve la téte de liste numéro dessin //1 dans la liste

    etc...
    }
    enléve la téte de liste numéro dessin //rien dans la liste
    numéro dessin pousse 100
    dessin d'un autre cube
    {
    face 1
    face 2
    etc...
    }


    à la fin, qd tu récupére un truc comme ca : 100, 3 ... tu c'est que 100 est le deuxiéme cube et que le click est fait sur la 3° face

    le buffer (voir glSelectBuffer) pour autant que je me rappel est rendu ainsi :
    nombre de numéro de dessin (n),
    dmin, dmax, numéro du dessin 1, numéro du dessin 2 ..., numéro dessin n
    nombre de numéro de dessin (n')
    etc....

    ensuite, tu récupére le grouppe qui à le plus petit dmin et tu as le plus proche ...

    dmin et différent de dmax, car si tu fait ton select pour un rectangle de selection d'unitée par exemple (homeworld, warcraft ...), une unitée n'a pas les pied à la meme distance que la téte c'est c es deux valeures qui sont retournée...

    une derniére chose, c'est écrit sur la page dont j'ai mis le lien plus haut :
    Depth values (which are in the range [0,1]) are multiplied by 2^32 - 1, before being placed in the hit record.
    donc si tu veux la distance exprimé dans les coordonnées de ta fenétre tu dois diviser dmin et dmax par 2^32-1 ce qui doit s'écrire 0xffffffff (8 f)

    à partir de la, vu que tu as le dmin et le dmax, tu fait ton glutunproject avec comme valeur z la moyenne disons, et si tu as fait ton picking sur un seul pixel, tu as une trés bonne approximation de la ou à clicker le mec.

    j'espére t'avoir répondu, si ca interresse ququ, je ferais un tut, car je ne me rappel pas en avoir jamais vu sur ce sujet.

    Trident.

    P.S. si je me suis complétement manqué :
    glutunproject (mx, my,0, ...)
    glutunproject (mx, my,1, ...)
    te donnera la position des points visibles le plus proche et le plus éloigné possible se trouvant sous ton curseur

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupérer la point 3d le plus loin
    Bonjour,

    Ce que tu me dis est vrai si la scène contient plus objet. Dans mon cas, c'est seulement un tronc humain reconstruit. Je veux pouvoir selectionner un point par exemple au niveau du dos et avoir le z qui correspondant à ce x,y au niveau du ventre.

    Merci

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    En gros tu veux selectionner à travers ?
    Si tu fait avec le glSelect le dessin de ton bonhomme complet et avec un seul nom, tu auras en dmin et dmax deux z différent, l'un sera celui du point le plus proche, dans le dos, et l'autre le plus éloigné le ventre (si il est de dos biensur)
    Toute les entrailles ne compterons pas, par contre le T-Shirt (si tu en met un) risque de compter (il est plus loins que le ventre lui meme), c'est pour ca qu'on subdivise l'objet (les faces du cube).

    Un autre expemple c'est les jambes, si tu te place de profil coté droit, en faisant le dessin avec un seul nom, tu aura le dmin comme z de la droite du genou droit et dmax z de la gauche du genou gauche. Si tu veux récupérer le z de droite du genou gauche ou inverssement, tu est obligé de faire le dessin avec un nom différent pour chaque jambe.

    Trident.

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupérer la point 3d le plus loin
    Le problème avec cette selection 3D c'est que le zmin et le zmax retourné ne correspondent pas réelement au Z de l'objet. J'ai par contre trouvé un moyen plus simple (peu être couteux en performance mais bon) , c'est d'utiliser gluUnproject la premiere fois avec mon modèle, de la reutiliser une deuxième fois mais cette fois ci en tournant mon modèle de 180 degrées pour ensuite le remettre dans son état initial. Puisque gluUnProject dépend des matrices de projection et de modélisation, on sait bien que la rotation affecte ces matrices, on obtient alors le bon z. Je vais par contre essayer maintenant le plutot positionner ma caméra a 180 degrée et voir si j'obtient la même chose. Le repositionnement de la cam affecte ces matrices aussi.

    Enfin voila peut-être que ca peut aider quelqu'un qui aura le même problème

    Merci quand même pour tout ton aide

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/07/2007, 09h53
  2. Récupérer seulement les mots de plus de 5 lettres
    Par Tee shot dans le forum Langage
    Réponses: 12
    Dernier message: 21/05/2007, 00h01
  3. Requete récupérer les 3 numéros les plus grands
    Par nerick dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/01/2006, 14h51
  4. Réponses: 3
    Dernier message: 28/11/2003, 22h26

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