我試圖檢測光標下的opengl對象...我讀過 它被稱爲picking。這裏是我的代碼:如何在android中使用glreadpixels - 通常會得到零
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的屏幕上打印 零。對於alpha,它打印'-1',即 可翻譯爲255(無符號)爲'完整字母'。我試圖在給定的x/y位置上檢測屏幕上的 顏色。我會很高興 紅色值在1到15之間,因爲這是 應該低於觸摸的顏色。我希望如果我這樣做的話 完全錯誤,我會得到所有的零,但我必須做到這一點,至少 部分正確,因爲我越來越alpha。我還包含了 中的行,我的清單告訴手機我使用 '表面拋光條'和'讀取幀緩衝區'的權限。我不知道這些 線路是否正常工作。
<uses-permission
android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-permission android:name="android.permission.READ_FRAME_BUFFER"/
任何幫助,將不勝感激。
我相信我的麻煩是我把錯誤的y值傳遞給函數。事實證明,opengl期望值從底部增加,android提供了從頂部增加的值。 –
所以...這實際上有效嗎?它只是Y倒置,你正在獲得像素顏色? – goger
嗨!我在這裏有同樣的問題:http://stackoverflow.com/questions/7488197/picking-objects-in-android-opengl-es-using-colors-does-not-retrieve-correct-color。看起來我和你一樣,但是我一直得到紅色的-1值(而不是128-130之間的數字),如果你能通過該線程來看看我的代碼,我將非常感激。我沒有看到任何區別,你說現在你有它的工作。提前致謝! – Pedriyoo