2010-09-03 130 views
5

我用alpha通道繪製一些紋理,但是當它們顯示時,它看起來像alpha通道只是二進制。所以像素是透明的或不透明的,儘管在紋理文件中像素是半透明的。混合設置如下:android/opengles阿爾法紋理不是半透明的,但二進制透明

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 

是否有解決此問題的方法?

上面顯示它應該是怎麼樣的,和下面的說明是怎麼回事:

alt text

+0

你在紋理用的是什麼internalFormat? – 2010-09-03 16:07:08

+0

帶透明度的PNG – clamp 2010-09-04 14:39:58

+0

我可以獲得關於PNG的更多信息嗎?就像它如何被拯救? – 2010-09-06 11:24:02

回答

3

試試這個:

gl.glEnable(GL10.GL_BLEND);  
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

gl.glEnable(GL10.GL_ALPHA_BITS); 
//draw... 
gl.glDisable(GL10.GL_ALPHA_BITS); 
+0

感謝此。但在我的情況下,它也在沒有GL_ALPHA_BITS調用的情況下工作 – 2014-09-23 10:47:33

1

好像它使用alpha測試,而不是alpha混合,這可以解釋的閾值行爲。儘管默認情況下未啓用,但可能值得嘗試:

gl.glDisable(GL10.GL_ALPHA_TEST); 
+0

alpha測試已被禁用,並且我還深度排列了所有我正在繪製的對象 – clamp 2010-09-07 09:47:24

0

您使用什麼表面格式爲您的GLSurfaceView?這是一種半透明(不透明)的格式嗎?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

此外,EGL設置必須具有alpha支持集。這將會給您最優質的......

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

編輯: 另一個想法是,也許你沒有上傳圖像的OpenGL與glTexImage2D半透明的格式?

0

您是否將PNG存儲爲僅包含1位alpha的GL紋理,例如16位5-5-5-1格式?這會導致上面的行爲。