[英]Android OpenGL ES - Very Weird Pixel Color from glReadPixels - Switched Image?
我正在嘗試通過Android上的OpenGL ES中的TouchEvents返回像素顏色。 我創建了2個三角形作為矩形。 所以我把顯示的圖像放在上面。 黑色區域不是三角形的一部分。
如果單擊黑色區域,它將始終為我提供正確的數字0 0 0 -1(黑色)。 如果我單擊白色區域,它也會始終為我提供正確的數字-1 -1 -1 -1(白色)。 但是,當我單擊綠色矩形時,它給我0 0 0 -1(黑色)。 之后,我單擊他旁邊的黑色矩形,它給了我鄰居的顏色(綠色)。
圖像在“背景”中切換,但我不知道怎么可能
使用了這個Tut: http : //androidblog.reindustries.com/a-real-open-gl-es-2-0-2d-tutorial-part-1/
我的顏色選擇代碼:
public void onDrawFrame(GL10 gl) {
if (clicked) {
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_FOG);
gl.glDisable(GL10.GL_BLEND);
ByteBuffer ss = ByteBuffer.allocate(4);
ss.order(ByteOrder.nativeOrder());
gl.glFlush();
gl.glReadPixels(touchXint, touchYint, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, ss);
byte b[] = new byte[4];
ss.get(b);
String key = "" + b[0] + " " + b[1] + " " + b[2] + " " + b[3];
Log.d("Color: ", key);
clicked = false;
ss.rewind();
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_FOG);
gl.glEnable(GL10.GL_BLEND);
}
}
您似乎對坐標系有問題。 在許多窗口/ UI系統(包括Android)中,您作為事件的一部分收到的坐標是相對於窗口的左上角的。
另一方面,OpenGL用於指定glReadPixels()
的像素矩形的窗口坐標系的原點位於左下角。 您可以在文檔中看到x
和y
的描述方式:
指定從幀緩沖區讀取的第一個像素的窗口坐標。 此位置是矩形像素塊的左下角。
為了適應這些不同的坐標系,您必須先將觸摸輸入的y坐標反轉,然后再將其傳遞給glReadPixels()
。 代替touchYint
,使用windowHeight - 1 - touchYint
。
這不是真正的答案,為什么會出現問題,但似乎X坐標是倒置的。 我的意思是,水平0被換為screenWidth。 只需確認一下,您可以嘗試類似
gl.glReadPixels(screenWidth - touchXint, touchYint, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, ss);
如果可行,則應在獲取touchXint坐標時進行搜索。
編輯:
在這種情況下,屏幕水平放置,因此水平軸為Y。在OpenGL坐標系和Android坐標系中,Y軸的方向相反。 因此,要為glReadPixels調用獲得正確的Y坐標,需要應用以下轉換:y =(screenHeight-touchYint)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.