glReadPixels字节浮动

时间:2012-07-14 12:57:58

标签: android opengl-es colors glreadpixels

我正在尝试使用glReadPixels检索OpenGL ES中的颜色。我用float []设置对象的颜色,例如{0.0F,0.5F,0.2F,1.0F} 如何将glReadPixels值转换为相同的float [],因为它是无符号字节?

设置颜色:

gl.glColor4f(color[0], color[1], color[2], color[3]);

获得颜色:

ByteBuffer buf = ByteBuffer.allocate(4);
buf.order(ByteOrder.nativeOrder());

gl.glReadPixels((int) mx, height - (int) my, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
byte result[] = buff.array();

我不知道是否已经提出这个问题,但我还没有找到解决方案,而且我已经尝试了很长时间。

2 个答案:

答案 0 :(得分:2)

获得byte / 255.f = -0.0039的原因是因为从bytebuffer获取的字节是java中的有符号值。

当OpenGL返回无符号值255 = 0xFF时,java将其解释为signed,其中0xFF = -1

取你得到的字节(result [0]),将其转换为int int resultInt = ((int)result[0]) & 0xFF,然后除以255.你应该得到一个接近1的值。

答案 1 :(得分:0)

使用ByteBuffer.asFloatBuffer()将其从字节转换为浮点数。