簡體   English   中英

點精靈Alpha混合

[英]Point Sprite Alpha Blending

我正在開發適用於Android的繪畫應用程序,該應用程序允許用戶使用手指進行繪制。 它是使用OpenGL ES 2.0,點精靈技術以及用於快速渲染的FBO構建的。 我在將單個點精靈混合在一起時遇到問題,這些地方透明的區域正確地在FBO上渲染,但是當精靈重疊時,我可以看到在先前的精靈上渲染了透明區域。 當前的外觀如下:

在此處輸入圖片說明

這是這個混合方程式:

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

如果我將繪圖顏色更改為白色或黑色,則效果很好:

在此處輸入圖片說明

我也嘗試過此混合功能:

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

結果是:

在此處輸入圖片說明

這幾乎是完美的選擇,但改為白色時,主色應變暗。 關於實現此目標的正確混合功能有什么想法?

注意:我對混合功能的工作方式有所了解,方法是將源和目標顏色的一部分取整,然后將它們加在一起,這樣顏色就趨於白色是有意義的。 所以我想知道我想實現的目標是僅使用混合功能還是需要其他功能? 如有必要,我可以從片段着色器提供代碼,但對我來說,這看起來好像不是片段問題。

好的,所以我找出了問題所在。 畢竟不是混合功能,而是片段着色器。.我有一些邏輯可以對像素進行預乘,這是冗余的混合功能

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

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

最終,我保留了原來的混合功能不變(如上所述)。 它可以正常工作,這是我一直在尋找的結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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