luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
6
22 févr. 2005 à 20:11
Ben, openGL c'est de la 3D, glut de la 2D, donc forcément c'est différent. Euh ce que tu veux faire est compliqué mais faisable.
J'ai pas trop le temps de détailler tout, et je suis plus certain que
mon exemple marche. Mais va voir du coté de cette fonction.
gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
En gros, ca permet de récupérer la valeur de la profondeur en
lisant le Z buffer pour ensuite, à partir des coordonnées glut de la
souris, les convertir en coordonnées openGL. Ya des tutoriels sur le
net, notamment sur le site de nehe, qui en parle.
Voici le genre de fonction que l'on obtient, je suis pas certain que cette version marchait.
void mouse_pos_nehe(point &p)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
POINT mouse;
GetCursorPos(&mouse);
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
winX = (float)mouse.x;
winY = (float)mouse.y;
winY = (float)viewport[3]-winY;
glReadPixels( (int)winX, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
p.x = (float)posX;
p.y = (float)posY;
p.z = (float)posZ;
}
Bon courage.
A il y a peut etre une autre solution, essai de voir du coté du picking.