Retrouvé les coordonnees 3d depuis la 2D

Résolu
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007 - 7 avril 2007 à 17:38
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007 - 8 avril 2007 à 21:21
Bonjour,
J ai un probleme pour retrouver les coordonnees en 3d de la souris.
J'utilise sous glut un lookat en -5,5,5 qui regarde en direction 0,0,0 soit selon le vecteur (-5,5,5).
Ce que l'on voit à l'ecran comme forme est selon le plan centré en -5,5,5  selon le vecteur normal (-5,5,5) (donc d'equation -5x+5y+5z -75=0). Donc ma premiere question est: comment connaitre la position de la souris  en M(X,Y,Z) sur ce plan sachant quel est en en A(x,y) sur l'ecran.

A partir de la, je peut obtenir une equation de droite.
Et j'aurai un autre probleme qui s'en suit: Comment savoir si une droite coupe un plan delimité par 4points (x,y,z)?

Merci pour votre précieuse aide.

10 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 avril 2007 à 20:50
On fait ca avec la fonction "gluUnProject". Look sur google pour les détails, ou sur nehe.
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
8 avril 2007 à 00:17
gluUnProject a juste besoin de la donnée de profondeur qu'on récupère avec ReadPixel, ca permet donc d'obtenir un point très précis. Je n'utilise que ca personnellement. Le picking te donnera rien en ce qui concerne la position exacte pointée par la souris.
3
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
7 avril 2007 à 23:51
Sinon avec le piking ... mais j'ai eu du mal à comprendre leur emploi ... Enfaite j'aurai bien voulu creer mes propres fonctions car je modifie les valeurs de mes coordonnees de coordonnee point que j ai stocker dans des variables... donc sa rend compliqué... enfin merci au moin je suis orienté vers une idee certaine.
0
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
8 avril 2007 à 00:25
ok merci je vais tester ta methode sa à l'aire d'etre ce que je voulait m'amusé à programmer lol
ThX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
8 avril 2007 à 01:36
Finalement je vais utiliser le picking, car il me permet de savoir quelle face du cube j ai selectionné :"Comment savoir si une droite coupe un plan delimité par 4points (x,y,z)?"
Cependant, mon objet selectionné est definit par un glPushName(1 à 7) et un glLoadName(1 à 9) et eventuellement un autre glPushName.
Ma question enfaite comment extraire le nom de l'objet, le nom de l'ensemble au quelle il appartient et eventuellement le nom de l'ensemble de l'enssemble auquelle il appartient car si j ai bien compris on peut imbriquer 32 glPushName.
(mon probleme vient au niveau du processe Hit que je ne comprends pas et dont le printf n'a pas d'effet sur ma fenetre glut.)

merci pour votre aide.
0
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
8 avril 2007 à 13:00
Bon bas j ai finalement crée un glLoadName composé de " (la valeur du glPushName*10)+(valeur du glLoadName initiale) ". Sa marche mais je ne trouve pas sa tres propre ....Quelqu'un saurait comment faire pour extraire d'un objet cliqué leglPushName correspondant (et voir tout les autre si j'en ai imbriqué plusieur) ??

Si je fait reponse acceptée cela fermera la conversation ?

Merci
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
8 avril 2007 à 18:23
Non ca fermera pas la conversation.

Pour le picking, faut récupérer toute la pile de "hit". Ca te donne tous les objets sous le curseur.
Pour savoir a quel ensemble appartient ton object, c'est a toi d'utiliser des indices dans tes glLoadName et glPushName qui te permettent de remonter.
0
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
8 avril 2007 à 18:59
Justement je fait passer le buffer et le HITS :

void processHits(GLint hits, GLuint buffer[]){
   unsigned int i, j;
   GLuint names, *ptr, minZ,*ptrNames, numberOfNames;
   int numFaceCarre[2],tmpFace,tmpCarre;

   ptr = (GLuint *) buffer;
   minZ = 0xffffffff;
   for (i = 0; i < hits; i++) {
      names = *ptr;
      ptr++;
      if (*ptr < minZ) {
          numberOfNames = names;
          minZ = *ptr;
          ptrNames = ptr+2;
      }
      ptr += names+2;
            }
}
Enfaite grace à : ptrNames[0] j'arrive à extraire le glLoadName(); correspondant mais minZ et numberOfNames ne me donnent rien du tout.
Enfaite j'arrive pas à comprendre comment naviguer dans la pile.
Pourtant si dans mon affichage des objets je place glLoadName( nom_glPushName*10 + nom_glLoadName); au lieu de glLoadName( nom_glLoadName);  j arrive grace à ptrNames[0] à extraire nom_glPushName et  nom_glLoadName. et tout marche trés bien sans problème.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
8 avril 2007 à 19:15
Bas je peux pas trop t'aider, ca fait longtemps ke j'ai fais ca. Faut regarder la doc sur la pile du picking. J'ai une source qui utilisait le picking et abondament commenté. Peut etre que j'avais dis kkch la dessus.
0
cs_Seboo Messages postés 17 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 5 mai 2007
8 avril 2007 à 21:21
D'accord merci beaucou je vais voir tes oeuvres:)
merci pour ton aide
0
Rejoignez-nous