// provided by JohnG // http://processing.org/discourse/yabb_beta/YaBB.cgi?board=OpenGL;action=display;num=1176483247 pt fromOrigin() { ((PGraphicsOpenGL)g).beginGL(); 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); FloatBuffer fb=ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer(); gl.glReadPixels(mouseX, height-mouseY, 1, 1, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, fb); fb.rewind(); double[] mousePosArr=new double[4]; glu.gluUnProject(0,0,-D, model,0,proj,0,viewport,0,mousePosArr,0); ((PGraphicsOpenGL)g).endGL(); return new pt((float)mousePosArr[0],(float)mousePosArr[1],(float)mousePosArr[2]); } pt fromMouse() { ((PGraphicsOpenGL)g).beginGL(); 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); FloatBuffer fb=ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer(); gl.glReadPixels(mouseX, height-mouseY, 1, 1, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, fb); fb.rewind(); double[] mousePosArr=new double[4]; glu.gluUnProject((double)mouseX,height-(double)mouseY,(double)fb.get(0), model,0,proj,0,viewport,0,mousePosArr,0); ((PGraphicsOpenGL)g).endGL(); return new pt((float)mousePosArr[0],(float)mousePosArr[1],(float)mousePosArr[2]); } float[] getMouse3D() { ((PGraphicsOpenGL)g).beginGL(); 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); FloatBuffer fb=ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer(); gl.glReadPixels(mouseX, height-mouseY, 1, 1, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, fb); fb.rewind(); double[] mousePosArr=new double[4]; glu.gluUnProject((double)mouseX,height-(double)mouseY,(double)fb.get(0), model,0,proj,0,viewport,0,mousePosArr,0); ((PGraphicsOpenGL)g).endGL(); return new float[] {(float)mousePosArr[0],(float)mousePosArr[1],(float)mousePosArr[2]}; }