luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 25 oct. 2004 à 01:45
Je suis pas sur de bien comprendre, mais en gros tu veux avoir la coordonnées x,y,z la ou pointe ta souris ?
Tient oui c'est une bonne question, y aurait-il un moyen de lire le Z-buffer, pour en déduire le plus proche object, et à partir de la direction de vue, de la position et des coordonnées sur l'écran, on pourrait avoir relativement facilement les coordonnées dans l'espace.
Mais malheureusement je ne pas pas t'aider davantage.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 25 oct. 2004 à 11:07
Hehe je cite :
guera:
tu peux pas avoir les coordonnées precise de la souris dans un monde 3D car c un peripherique 2D, donc la profondeur tu devras la specifier toi meme.
Pour avoir les ccordonées c'est la fonction GluUnProject ( double winx, double winy, double winz, double *modelview, double *projection, int *viewport, double *posx, double *posy, double *poz ).
Ca va te renvoyer la position du curseur dans le monde 3D, mais garde bien à l'esprit que ta variable winz c'est toi qui décides de sa valeur alors que winx et winy c'est la position du curseur de souris.
Ce que tu peux faire pour specifier un Z correct, c'est de recuperer le Z de l'objet pické, avec la fonction GluProject, et tu t'en serviras comme winz dns la fonction gluUnProject pour ta souris, comme ça t'auras un poz plutot correct.
exemple :
gluProject ( objet->x, objet->y, objet->z, modelview_matrix, projection_matrix, viewport, &x, &y, &z );
/* ici, x et y on s'en fout mais faut les specifier qd meme */
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 25 oct. 2004 à 11:07
Hehe je cite :
guera:
tu peux pas avoir les coordonnées precise de la souris dans un monde 3D car c un peripherique 2D, donc la profondeur tu devras la specifier toi meme.
Pour avoir les ccordonées c'est la fonction GluUnProject ( double winx, double winy, double winz, double *modelview, double *projection, int *viewport, double *posx, double *posy, double *poz ).
Ca va te renvoyer la position du curseur dans le monde 3D, mais garde bien à l'esprit que ta variable winz c'est toi qui décides de sa valeur alors que winx et winy c'est la position du curseur de souris.
Ce que tu peux faire pour specifier un Z correct, c'est de recuperer le Z de l'objet pické, avec la fonction GluProject, et tu t'en serviras comme winz dns la fonction gluUnProject pour ta souris, comme ça t'auras un poz plutot correct.
exemple :
gluProject ( objet->x, objet->y, objet->z, modelview_matrix, projection_matrix, viewport, &x, &y, &z );
/* ici, x et y on s'en fout mais faut les specifier qd meme */
gluLookAt (CamX,CamY,zoom,CamX,CamY,0,0,1,0);
//dans ce cas le zomm vaut 500
//dessine point aux coordonnées souris
glBegin (GL_POINTS);
glColor3d (32,1,8);
glVertex2i (wx,-wy);
glEnd ();
glCallList(cube2);
SwapBuffers (DC);
}
Le point que je dessien par rapport aux coordonés obtenus est toujours en rapport avec la souris mais il est toujours pas mal en dessous et un peu à droite de la souris.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 nov. 2004 à 14:22
Je sais pas si tu regarderas encore ce sujet, mais j'ai programmer la fonction dans mon programme. J'ai le meme problème que toi. La position de la souris est toujours décaler vers le bas. Or j'ai mis un correctif de +17 à la coordonnées de la souris sur l'écran. En clair, voila ce que j'ai mis:
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 nov. 2004 à 14:33
Je t'ai envoyé un message au cas ou tu viendrais pas ici, mais le décalage est du à la hauteur de la barre de titre d'une fenetre windows, le décalage disparait en mode plein écran.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 nov. 2004 à 15:01
En fait je viens de remarquer, il y a plein de cas particulier, car le bord gauche des fenetres de windows d'épaisser environ 4 pixels, introduise un décalage, donc pour supprimer tout décalage, la seul solution pour éviter une série de condition est d'utiliser systématiquement le mode plein écran.