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:
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).
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; }
A partir de la je me suis dis d'afficher le point que je viens de créer en faisant:
Malheureusement je n'ai aucun nouveau point affiché...
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();
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![]()
Partager