カーソルの下にあるopenglオブジェクトを検出しようとしています...ピッキングと呼ばれるものを読みました。これが私のコードです:
public int makeBuffer(GL10 gl, int x, int y) {
ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
PixelBuffer.order(ByteOrder.nativeOrder());
PixelBuffer.position(0);
int mTemp = 0;
gl.glReadPixels((int)x, (int) y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
Log.e("Picking", " xy: x" + x + " y"+ y);
byte b [] = new byte[4];
PixelBuffer.get(b);
Log.e("Picking", " rgba: r"+ PixelBuffer.get(0) + " g" + PixelBuffer.get(1) + " b" +
PixelBuffer.get(2) + " a" + PixelBuffer.get(3));
Log.e("Picking", " rgba: r"+ b[0] + " g" + b[1] + " b" +
b[2] + " a" + b[3]);
//mTemp = PixelBuffer.get(0);
mTemp = b[0];
Log.e("Picking", "result:" + mTemp );
return mTemp;
}
上記のコードのほとんどが logcat ステートメントであることを確認してください。私のコードは、r、g、および b の画面にゼロを出力します。アルファの場合、「フル アルファ」として 255 (符号なし) に変換可能な「-1」が出力されます。指定された x/y 位置で画面上の色を検出しようとしています。赤の値が 1 から 15 の間のどこかにあれば満足です。もし私が完全に間違ったやり方をしていたら、私はすべてゼロになるだろうと思っていましたが、アルファを取得しているので、少なくとも部分的に正しいやり方をしているに違いありません. マニフェストには、「サーフェス フリンガー」と「フレーム バッファーの読み取り」のアクセス許可を使用することを電話に伝える行も含めました。これらの行が機能しているかどうかはわかりません。
<uses-permission
android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER" /
任意の助けをいただければ幸いです。