I want to get world coordinates at a screen x,y position. I call glReadPixels (with the GL.GL_DEPTH_COMPONENT param) to get the depth value at a mouse click position, but I don't know how to pass for the "pixels" param.
I'm following an example at NeHe:
http://nehe.gamedev.net/data/articles/article.asp?article=13 . I'm expecting to get a depth value between 0 and 1 but no matter how I call glReadPixels I always get back a depth value of 1.06469197E9.
static private void checkPoint(int x, int y) {
DoubleBuffer modelview = ByteBuffer.allocateDirect(16*8).order(ByteOrder.nativeOrder()).asDoubleBuffer();
DoubleBuffer projection = ByteBuffer.allocateDirect(16*8).order(ByteOrder.nativeOrder()).asDoubleBuffer();
DoubleBuffer result = ByteBuffer.allocateDirect(3*8).order(ByteOrder.nativeOrder()).asDoubleBuffer();
IntBuffer viewport = ByteBuffer.allocateDirect(4*4).order(ByteOrder.nativeOrder()).asIntBuffer();
IntBuffer zdepth = ByteBuffer.allocateDirect(1*4).order(ByteOrder.nativeOrder()).asIntBuffer();
float z;
GL.glGetDouble(GL.GL_MODELVIEW_MATRIX, modelview);
GL.glGetDouble(GL.GL_PROJECTION_MATRIX, projection);
GL.glGetInteger(GL.GL_VIEWPORT, viewport);
// get the depth at given x,y
GL.glReadPixels(x, y, 1, 1, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, zdepth);
z = ((float)(zdepth.get(0)));
System.out.println("Zdepth=" + (float)z);
System.out.println("V0=" + viewport.get(0) + " V1=" + viewport.get(1)
+ " V2=" + viewport.get(2) + " V3=" + viewport.get(3) );
System.out.println("Screen Coords at cursor are " + x + "," + y);
GLU.gluUnProject((double)x, (double)y, (double)0, modelview, projection, viewport, result);
float ox = (float)result.get(0);
float oy = (float)result.get(1);
float oz = (float)result.get(2);
System.out.println("World Coords at near clip plane are: "+ox+", "+oy+", "+oz);
GLU.gluUnProject((double)x, (double)y, (double)1, modelview, projection, viewport, result);
ox = (float)result.get(0);
oy = (float)result.get(1);
oz = (float)result.get(2);
System.out.println("World Coords at far clip plane are: "+ox+", "+oy+", "+oz);
}
The function output looks right for the world coords at the near and far clip planes:
Zdepth=1.06469197E9
V0=0 V1=0 V2=1024 V3=768
Screen Coords at cursor are 534,370
World Coords at near clip plane are: 0.024808, -0.021049, 14.0
World Coords at far clip plane are: 0.74424, -0.63147, -14.999