2010-11-08 61 views
0

有沒有辦法在iPhone上使用OpenGLES時檢測繪製後像素的alpha是否不是0?alpha通道中的測試點

我想測試多個點來查看id,它們在用戶繪製的隨機多邊形區域內。如果你知道Flash,相當於BitmapData :: getPixel32的是我正在尋找的東西。

+0

不是BitmapData :: getPixel32返回alpha通道值嗎? – PatrickS 2010-11-08 02:28:18

+0

getPixel32返回像素的完整ARGB值。從中你可以檢測到該像素上是否有東西。 – sharvey 2010-11-08 16:21:57

回答

1

framebuffer由GPU保存,不能立即CPU訪問。我認爲你最想從完整的OpenGL中獲得的東西就是遮擋查詢;您可以請求繪製幾何圖形,並可以知道實際繪製了多少個像素。可悲的是,這在iPhone上不可用。

我想你可能想要的是glReadPixels,如果你喜歡,它可以用來讀取單個像素。 (寫到這裏,我鍵入,未測試)

GLubyte pixelValue[4]; 
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixelValue); 

NSLog(@"alpha was %d", pixelValue[3]); 

使用glReadPixels導致管道沖洗,所以通常是從一個GL性能上來看是一個壞主意,但它會做你想要什麼。與iOS不同,OpenGL使用圖形紙張順序來顯示像素座標,因此(0,0)是左下角。

+0

它確實有效,並且它也極大地影響了性能。我試圖一次加載所有像素,但仍然很慢。有沒有辦法只採用alpha通道來加快速度? – sharvey 2010-11-20 23:55:30

+0

我後來發現,您可以指定GL_ALPHA作爲格式而不是GL_RGBA,並只返回該頻道。我不確定它會對性能產生多大的影響 - 它會在所有這些問題上調用glReadPixels。如果您正在進行多個測試,我認爲使用glReadPixels一次抓取整個顯示可能會更快,然後從中檢查alpha值。 – Tommy 2010-11-21 16:14:55