Bonjour a tous,
J'essaye de faire du drag'n'drop de points opengl. (Je me suis mis a opengl depuis qq semaines seulement : je rame!)
Pour l'instant j'arrive a récupérer mon point grâce a gluPickMatrix.
Le problème, c'est le déplacement. Pour ca, il faut que je retrouve les coordonnées opengl a partir des coordonnes de la souris dans la fenêtre.
Et c'est la qu'est mon problème!
J'ai essaye avec gluUnProject (avec et sans glReadPixel), mais sans succes. Voici comment j'utilise glUnProject :
gluUnProject( sourisX, sourisY, lePointQueJeDeplaceZ, modelview, projection, viewport, &posX, &posY, &posZ);
J'aimerais avoir en retour un point qui a conserve sa valeur z, mais qui s'est juste deplacer selon x et y.
Seulement, actuellement cela me retourne un Z different.
Voila, je ne sais pas si je suis bien clair, mais j'ai fait de mon mieux.
Voici mon code :
Je m'y prends mal visiblement : Pourquoi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Point3D* Toto::GetOGLPos(int x, int y, float z) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); glGetIntegerv( GL_VIEWPORT, viewport ); winX = (float)x; winY = (float)viewport[3] - (float)y; // NOTE : Je pensais a un probleme de perspective, j'ai donc ajoute mon gluPerspective ici, mais sans succes. Idem pour gluLookAt. //glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); gluUnProject( winX, winY, z, modelview, projection, viewport, &posX, &posY, &posZ); return new Point3D(posX, posY, posZ); }
Partager