我用alpha通道繪製一些紋理,但是當它們顯示時,它看起來像alpha通道只是二進制。所以像素是透明的或不透明的,儘管在紋理文件中像素是半透明的。混合設置如下:android/opengles阿爾法紋理不是半透明的,但二進制透明
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
是否有解決此問題的方法?
上面顯示它應該是怎麼樣的,和下面的說明是怎麼回事:
我用alpha通道繪製一些紋理,但是當它們顯示時,它看起來像alpha通道只是二進制。所以像素是透明的或不透明的,儘管在紋理文件中像素是半透明的。混合設置如下:android/opengles阿爾法紋理不是半透明的,但二進制透明
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
是否有解決此問題的方法?
上面顯示它應該是怎麼樣的,和下面的說明是怎麼回事:
試試這個:
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);
感謝此。但在我的情況下,它也在沒有GL_ALPHA_BITS調用的情況下工作 – 2014-09-23 10:47:33
好像它使用alpha測試,而不是alpha混合,這可以解釋的閾值行爲。儘管默認情況下未啓用,但可能值得嘗試:
gl.glDisable(GL10.GL_ALPHA_TEST);
alpha測試已被禁用,並且我還深度排列了所有我正在繪製的對象 – clamp 2010-09-07 09:47:24
您使用什麼表面格式爲您的GLSurfaceView?這是一種半透明(不透明)的格式嗎?
surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
此外,EGL設置必須具有alpha支持集。這將會給您最優質的......
surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
編輯: 另一個想法是,也許你沒有上傳圖像的OpenGL與glTexImage2D半透明的格式?
您是否將PNG存儲爲僅包含1位alpha的GL紋理,例如16位5-5-5-1格式?這會導致上面的行爲。
你在紋理用的是什麼internalFormat? – 2010-09-03 16:07:08
帶透明度的PNG – clamp 2010-09-04 14:39:58
我可以獲得關於PNG的更多信息嗎?就像它如何被拯救? – 2010-09-06 11:24:02