2

我正在尝试使用 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();

我不知道这是否已经被问过/回答过,但我还没有找到解决方案,我已经尝试了很长时间。

4

2 回答 2

2

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

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

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

于 2012-07-17T20:56:05.817 回答
0

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

于 2012-07-14T16:39:41.957 回答