我试图在用户单击 JOGL 时获取像素的颜色。如果我将以下代码放入显示方法中(来自GLEventListener
),效果很好。
FloatBuffer buffer = FloatBuffer.allocate(4);
gl.glReadBuffer(GL3.GL_FRONT);
gl.glReadPixels(10, 10, 1, 1, GL3.GL_RGBA, GL3.GL_FLOAT, buffer);
float[] pixels = new float[3];
pixels = buffer.array();
float red = pixels[0];
float green = pixels[1];
float blue = pixels[2];
System.out.println(red + ", " + green + ", " + blue);
但是,如果我将代码放入 mousePressed 方法中,则在检查是否成功时会收到无效操作错误,并且颜色返回黑色 (0, 0, 0)。
有没有办法让它在我的 mousePressed 方法中工作,或者我必须存储选定的像素以及一个布尔值来指示选择(这样我就不会每帧调用 glReadPixels )并在显示中进行选择方法?
附注(x,y) 坐标 = (10,10) 只是为了确保选择确实在我的窗口内(确实如此,因为像素颜色在显示方法中正确显示)。