cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 5 mai 2007
-
7 avril 2007 à 17:38
cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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)?
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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.
cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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.
cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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.)
cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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 ?
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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.
cs_Seboo
Messages postés17Date d'inscriptionmardi 10 mai 2005StatutMembreDerniè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.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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.