我正在尝试使用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();
我不知道是否已经提出这个问题,但我还没有找到解决方案,而且我已经尝试了很长时间。
答案 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()
将其从字节转换为浮点数。