System coordonne opengl/glut

gimli123 Messages postés 78 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 5 janvier 2007 - 22 févr. 2005 à 14:57
gimli123 Messages postés 78 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 5 janvier 2007 - 22 févr. 2005 à 23:09
Salut tout le monde je suis en train de faire un petit jeu(tout du
moins j'essai) et donc pour le menu je fais des boutons. Mais lorsque
j'essai de faire en sorte que lorsque la souris se trouve sur un bouton
il se passe quelque chose, je me rend compte que le system de
coordonnée de GLUT et différent de celui de opengl ... Est-ce que vous
avez une solution pour résoudre mon pb ?

@++++ tout le monde


Bonne prog et @++++

2 réponses

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.
0
gimli123 Messages postés 78 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 5 janvier 2007
22 févr. 2005 à 23:09
Salut, merci de ta réponse, mais je pense que la solution est
beaucoup plus simple ! Car en réalité j'essai de faire un jeu en 2d et
je viens de m'apercevoir que en
faite les coordonnées de mes sprites ont pour origine leurs coins
inférieurs gauche ors GLUT c'est le coins supérieur gauche ...

Merci quand même
Bonne prog et @++++
0
Rejoignez-nous