![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDQLoqCI95iip922aZlaWsQXKezxWiZOeKDYF9gm5PhEURhTjYXEi9S_nYv_-15baP2U7GVARjFluD35t4CNif8j4GJ_CvonCZyMO0yv1VZAeS8jQiAj3gtGefeE6d4k-rnl3z/s400/depth10000.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrc-Rc9quRyMNJoQenm0snY7XMTljmlmdQxOxwTeAI2qZgnir0thyphenhyphenFrcQeLGIdn5x34KCakHiHC_mcTUS8dY1wrMVJehWat9MNPb6jmhu9pOFPVSJUh9sIKtgxB8JDQPYX-Byq/s400/frame00001.jpg)
---
Update - I've got it figured out now, I should have been using gluUnProject:
FloatBuffer fb;
fb = BufferUtil.newFloatBuffer(width*height);
gl.glReadPixels(0, 0, width, height, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, fb);
fb.rewind();
int viewport[] = new int[4];
double[] proj=new double[16];
double[] model=new double[16];
gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
gl.glGetDoublev(GL.GL_PROJECTION_MATRIX,proj,0);
gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX,model,0);
...
for(int i...
for (int j...
...
glu.gluUnProject(i,height-j,rawd, model,0,proj,0,viewport,0,pos,0);
float d = (float)-pos[2];
After all that depth d will be linear and in proper world coordinates.
No comments:
Post a Comment