Android OpenGL读取屏幕中央的像素颜色
我正在OpenGL中渲染纹理。我想检索屏幕中心的像素颜色值Android OpenGL读取屏幕中央的像素颜色,android,opengl-es,Android,Opengl Es,我正在OpenGL中渲染纹理。我想检索屏幕中心的像素颜色值 ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.nativeOrder()); GLES20.glFinish(); GLES20.glReadPixels(0, 0, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer); byte[] byteArray = new b
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
byteBuffer.order(ByteOrder.nativeOrder());
GLES20.glFinish();
GLES20.glReadPixels(0, 0, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer);
byte[] byteArray = new byte[4];
byteBuffer.get(byteArray);
int r = ((int) byteArray[0]) & 0xFF;
int g = ((int) byteArray[1]) & 0xFF;
int b = ((int) byteArray[2]) & 0xFF;
String key = r + " " + g + " " + b;
Log.i(TAG, key);
作为测试,我正在将一个红方块渲染到屏幕中心,并希望记录(255 0),但只有在将整个屏幕渲染为红色时,我才会返回(255 0)。传递到
glReadPixels()
的坐标/大小在窗口坐标中。窗口坐标系的原点位于窗口的左下角,以像素为单位
这不能与用于顶点坐标的NDC(标准化设备坐标)系统混淆,该系统的原点位于窗口的中心,在x和y方向上的范围为[-1.0,1.0]
在你的例子中:
GLES20.glReadPixels(0, 0, 1, 1,
GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer);
您正在读取渲染曲面左下角的一个像素。要读取中心的像素,您需要:
GLES20.glReadPixels(width / 2, height / 2, 1, 1,
GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer);
其中,
width
和height
是以像素为单位的渲染曲面的尺寸。如果读取左下角的像素,为什么希望得到中心?GLES20.glReadPixels()是否使用OpenGL坐标系?(0,0)是OpenGL中屏幕的中心。