2

glReadPixelsを使用してOpenGLESで色を取得しようとしています。オブジェクトの色を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は、バイトバッファから取得するバイトがJavaの符号付きの値であるためです。

OpenGLは符号なしの値を返しますが255 = 0xFF、Javaはこれを符号付きとして解釈し0xFF = -1ます。

取得したバイト(result [0])を取得し、それをintにキャストしてから、int resultInt = ((int)result[0]) & 0xFF255で除算します。1に近い値を取得する必要があります。

于 2012-07-17T20:56:05.817 に答える
0

ByteBuffer.asFloatBuffer()バイトからフロートに変換するために使用します。

于 2012-07-14T16:39:41.957 に答える