2013-11-02 39 views
2

我似乎無法讓我的混合在Android上的OpenGL ES 2中正常工作。我所擁有的是帶有alpha通道的紋理,我希望與相應的alpha一起出現。即使頂部繪製的對象的alpha爲1.0,混合也會顯示爲添加。在我的片段着色器中,我爲alpha值硬編碼了1.0的值,並意識到它似乎使用顏色,而不是alpha值。Android OpenGL ES 2 - 混合似乎總是添加劑

例如,它看起來像這樣:enter image description here

的這個代替:enter image description here

我畫以正確的順序,在這個例子中,藍色的應該是在灰色方塊的頂部完全不透明。我嘗試了多種混合模式(一個,一個),(alpha,alpha)等,多個繪製順序,以及使用和不使用深度測試。我嘗試過產生不正確結果的隨機混合模式,所以當我設置它時,混合會發生變化。

我認爲問題在於,opengl是混合添加劑的顏色。 (Alpha,Alpha)對我來說很有意義,當我在着色器中明確地將alpha設置爲1.0時,我會認爲我會得到一個正方形(紋理投影到的實際形狀),其上有一個藍色圓圈。這不會發生困惑我,我想我不明白Sfactor和dfactor混合功能足夠。

回答

3

您是否使用Android位圖類加載您的紋理?

使用GLUtils.texImage2D()從Android上的位圖加載alpha紋理已損壞。這是一個問題,谷歌真的應該更好地記錄。問題在於Bitmap類將所有圖像轉換爲預倍數格式,但這不適用於OpenGL ES,除非圖像完全不透明。

本文詳細介紹了此click here

+0

謝謝你!問題似乎是,GLUtils.texImage2D()會自動使用預乘位圖(因爲某些原因,Android不包含修復程序?)。對我來說,一個可行的解決方案是從#3帖子複製代碼:[link](https://groups.google.com/forum/#!topic/android-developers/uqbDPmP4L8o)並使用 \t \t GLES20.glBlendFunc( GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_SRC_ALPHA); – user1055947

+0

WebGL有這個相同的「問題」,雖然在WebGL的情況下,這個行爲在規範中是[明確定義的](http://www.khronos.org/registry/webgl/specs/latest/1.0/#2.4)。 –