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 : 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
 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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