salut a tous
je n'arrive pas a faire fonctionner le picking. J'utilise glut et glui. J'arrive a detecter lorsque je clique sur mes objets (ici des points), mais le nom renvoyé est toujours "0"...![]()
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
28
29
30 void select (int x, int y) { GLuint selectBuf[1024]; GLint hits=0; GLint viewport[4]; glGetIntegerv (GL_VIEWPORT, viewport); glSelectBuffer (1024, selectBuf); (void) glRenderMode (GL_SELECT); glInitNames(); glPushName(0); glMatrixMode (GL_PROJECTION); glPushMatrix (); // push projection glLoadIdentity (); gluPickMatrix((GLdouble) x, (GLdouble) (viewport[3] - y), 5.0, 5.0, viewport); glFrustum( -xy_aspect*.04, xy_aspect*.04, -.04, .04, .1, 200.0 ); // on dessine... picking = true; dessinePoint(); picking = false; glPopMatrix (); // pop projection glFlush(); hits = glRenderMode (GL_RENDER); processHits (hits, selectBuf); glutPostRedisplay(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void processHits (GLint hits, GLuint buffer[]) { for (int i = 0; i < hits; i++) printf( "Number: %d\n" "Min Z: %d\n" "Max Z: %d\n" "Name on stack: %d\n", (GLubyte)buffer[i * 4], (GLubyte)buffer[i * 4 + 1], (GLubyte)buffer[i * 4 + 2], (GLubyte)buffer[i * 4 + 3] ); }Merki!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void dessinePoint( ) { int n=1; glPointSize(10); glBegin(GL_POINTS); for (int i=-5 ; i<=5 ; i+=5) for (int j=-5 ; j<=5 ; j+=5) for (int k=-5 ; k<=5 ; k+=5) { if (picking) glLoadName(n++); glVertex3i(i,j,k); } glEnd(); }
Partager