Problème affichage de points à partir d'un clic de souris
Bonjour tout le monde.
Avant d'exposer mon problème, voici mon environnement de travail:
langage: Java 1.6, binding OpenGL: LWJGL 2.5, outil de fenêtrage: SWT (3.5).
Je souhaiterais afficher un point à partir d'un clic de la souris. Pour cela, je récupère mes coordonnées 2D de ma fenêtre et je les transformes dans ma scène 3D:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| FloatBuffer getPosition3D(int x, int y) {
double winX, winY;
ByteBuffer buffer = BufferUtils.createByteBuffer(4);
FloatBuffer position = BufferUtils.createFloatBuffer(3);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
FloatBuffer modelviewMatrix = BufferUtils.createFloatBuffer(16);
FloatBuffer projectionMatrix = BufferUtils.createFloatBuffer(16);
GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelviewMatrix);
GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projectionMatrix);
GL11.glEnable(GL11.GL_DEPTH_TEST);
winX = x;
winY = viewport.get(3) - y;
GL11.glReadPixels((int)winX, (int)winY, 1, 1, GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, buffer);
GLU.gluUnProject((float)winX, (float)winY, (float)buffer.getFloat(), modelviewMatrix, projectionMatrix, viewport, position);
return position;
} |
J'ai testé les valeurs de la position retournée, et elle semble cohérente avec les valeurs souhaitées (Je clique sur un point, déjà existant, de coordonnées connues et j'obtiens les mêmes coordonnées).
A partir de la je me suis dis d'afficher le point que je viens de créer en faisant:
Code:
1 2 3 4 5 6 7 8 9
| GL11.glColor3f(1, 0, 0);
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_POINT);
GL11.glBegin(GL11.GL_POINT);
GL11.glVertex3f(mouseListener.position.get(), mouseListener.position.get(), mouseListener.position.get());
mouseListener.position.rewind(); //pour remettre le buffer à la position initiale.
GL11.glEnd();
System.out.println("Position(x, y, z): (" + mouseListener.position.get() + ", " + mouseListener.position.get() + ", " + mouseListener.position.get() + ")");
mouseListener.position.rewind(); |
Malheureusement je n'ai aucun nouveau point affiché...
Comment résoudre ce problème?
Merci d'avance
EDIT: C'est bon j'ai trouvé... C'est GL11.glBegin(GL11.GL_POINTS)...
Conclusion: éviter de coder en ne dormant que 2h par nuit pendant une semaine ;)