簡體   English   中英

Android OpenGL ES-來自glReadPixels的非常奇怪的像素顏色-已切換圖像?

[英]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()的像素矩形的窗口坐標系的原點位於左下角。 您可以在文檔中看到xy的描述方式:

指定從幀緩沖區讀取的第一個像素的窗口坐標。 此位置是矩形像素塊的左下角。

為了適應這些不同的坐標系,您必須先將觸摸輸入的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM