[gl4java - Java]Problème de picking avec gl4java

Problème de picking avec gl4java [gl4java - Java] - Java - Programmation

Marsh Posté le 13-06-2004 à 17:21:47    

Bonjour à tous
 
Je fais appel à votre aide car j'ai découvert récemment gk4java et j'ai pour projet de développer une application l'utilisant. Cette application consiste à simuler le développer de fourmilières. Bref, c'était pour situer le contexte. J'aimerais que quand on clique sur une fourmi ou un autre objet du monde, je puisse afficher les caractéristiques de l'objet sélectionné. Je me suis inspiré d'articles, bouquins, tutos et voila la fonction que j'ai pondu qui est appelée avec mon MouseListener:
 

Code :
  1. public int retrieveObjectID(int x, int y) {
  2.     int objectsFound = 0;
  3.     int[] viewportCoords = new int[4];
  4.     int[] selectBuffer = new int[32];
  5.     gl.glSelectBuffer(32, selectBuffer);
  6.     gl.glGetIntegerv(GL_VIEWPORT, viewportCoords);
  7.     gl.glMatrixMode(GL_PROJECTION);
  8.     gl.glPushMatrix();
  9.     gl.glRenderMode(GL_SELECT);
  10.     gl.glLoadIdentity();
  11.     glu.gluPickMatrix(x, viewportCoords[3] - y, 5, 5, viewportCoords);
  12.     glu.gluPerspective(45.0f,(float)getWidth()/(float)getHeight(),0.1f,150.0f);
  13.     gl.glMatrixMode(GL_MODELVIEW);
  14.     display();
  15.     objectsFound = gl.glRenderMode(GL_RENDER);
  16.     gl.glMatrixMode(GL_PROJECTION);
  17.     gl.glPopMatrix();
  18.     gl.glMatrixMode(GL_MODELVIEW);
  19.     if (objectsFound > 0) {
  20.       int lowestDepth = selectBuffer[1];
  21.       int selectedObject = selectBuffer[3];
  22.       for(int i = 1; i < objectsFound; i++) {
  23.         if(selectBuffer[(i * 4) + 1] < lowestDepth) {
  24.           lowestDepth = selectBuffer[(i * 4) + 1];
  25.           selectedObject = selectBuffer[(i * 4) + 3];
  26.         }
  27.       }
  28.       return selectedObject;
  29.     }
  30.     return -1;
  31.   }


 
Je l'accorde, comme ça, on n'a pas très envie de lire... Evidemment si je demande votre aide c'est que dans tous les cas cette fonction ne me renvoie aucun objet sélectionné. Ce qui est étrange c'est que mon tableau viewportCoords est rempli de 0 même après un appel à glGetIntegerv.
 
Je tiens à préciser aussi que j'ai bien rempli la pile de noms dans la fonction display. quelqu'un saurait-il m'aider à m'en sortir?
 
Merci beaucoup


---------------
CGP Kingmax PC3700/PC4000 - DFI Lanparty UT nF3 250Gb
Reply

Marsh Posté le 13-06-2004 à 17:21:47   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed