System coordonne opengl/glut

Signaler
Messages postés
78
Date d'inscription
samedi 18 septembre 2004
Statut
Membre
Dernière intervention
5 janvier 2007
-
Messages postés
78
Date d'inscription
samedi 18 septembre 2004
Statut
Membre
Dernière intervention
5 janvier 2007
-
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

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
78
Date d'inscription
samedi 18 septembre 2004
Statut
Membre
Dernière intervention
5 janvier 2007

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 @++++