2017-09-05 118 views
1

我正在研究Android的繪畫應用程序,允許用戶使用他們的手指進行繪製。它使用OpenGL ES 2.0使用點精靈技術以及FBO進行快速渲染。我有一個問題將各個點精靈混合在一起,其中透明區域在FBO上正確呈現,但是當精靈重疊時,我可以看到在前一個精靈中呈現的透明區域。下面是它的外觀現在:Point Sprite Alpha Blending

enter image description here

這是這種混合式:

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

如果我改變繪圖顏色設置爲白色或黑色的它完美的作品:

enter image description here

我也試過這種混合功能:

GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_DST_ALPHA); 

導致此:

enter image description here

這幾乎是完美的,而是以白色爲主色調變暗應該。關於什麼是正確的混合功能應該是實現這一點的任何想法?

注: 我的融合功能是如何工作的,採取的源和目標顏色的分數,並在我的情況下加在一起是很有意義的顏色會去對白色的想法。所以我想知道我想實現的功能只能用混合功能完成,還是需要其他功能?如有必要,我可以從片段着色器提供代碼,但對我來說,它看起來不像片段問題。

回答

0

好吧,我發現了什麼是錯的。這是不是終究但片段着色器的混合功能..我有一些邏輯unpremultiply這是多餘的,因爲混合功能

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

已經處理了預乘圖像中的像素。除此之外,我在片段着色器中有一些代碼將圖像轉換爲灰度,然後將灰度轉換爲透明,並且我的顏色乘法是錯誤的。

最後我結束了原來的混合功能不變(如上)。它正常工作,這裏是我正在尋找的結果:

enter image description here