我有一些 .png 文件用作我的 2d 游戏四边形精灵的纹理。
其中一些已经有部分透明的像素,我需要能够正确显示它们并将它们淡入/淡出。
最初,我使用以下混合模式绘制它们:
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
这适用于刚开始的实心纹理,我可以使用 1.0f 和 0.0f 之间的任何值来引入透明度。到目前为止一切都很好,但是当我尝试使用其中已经具有透明度的 png 时,它们将无法正确显示(它们太暗并且轮廓很暗)。
我做了很多研究,发现我需要为这些类型的纹理更改我的混合模式,因为上面的那个不能正常工作,所以这就是我现在所拥有的(包括我的着色器)...... ..
片段着色器
String strFShader =
"precision mediump float;" +
"varying vec2 v_texCoords;" +
"uniform sampler2D u_baseMap;" +
"void main()" +
"{" +
"gl_FragColor = texture2D(u_baseMap, v_texCoords);" +
"gl_FragColor.a *= "+1.0f+";"+ //** Where 1.0f is the amount to blend, with 0.0f being completely transparent and 1.0f being as per the original png file.
"}";
代码
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GLES20.glDisable(GLES20.GL_BLEND);
如果我在着色器(如上)中使用这个值为 1.0f 绘制半透明纹理,它会画得很好。但是,如果我尝试将其淡出,有些颜色似乎会淡出,而有些则不会,所以当它处于 0.0f 时,我只剩下原始纹理的奇怪颜色版本。
如果有人能告诉我如何正确渲染这些类型的纹理,我将不胜感激。
谢谢