I have this problem with Apha Blending in my game, when I draw a surface with an alpha texture, what is destined to be invisible is invisible, but the parts that are supposedly visible are half transparent. It depends on the amount of light - the closer it is to the light source, the better it looks, but in the shadow such objects almost disappear.
I turn on Alpha Blending:
GLES20.glEnable(GLES20.GL_BLEND);
then I set the function:
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
or
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
Effect
all the same. I am using 48 bit PNG files with alpha channel.
my fragment shader is as follows:
final String fragmentShader = "precision mediump float; \n" +"uniform vec3 u_LightPos; \n" +"uniform sampler2D u_Texture; \n" +"varying vec3 v_Position; \n" +"varying vec4 v_Color; \n" +"varying vec3 v_Normal; \n" +"varying vec2 v_TexCoordinate; \n" +"void main() \n" +"{ \n" +"float distance = length(u_LightPos - v_Position); \n" +"vec3 lightVector = normalize(u_LightPos - v_Position); \n" +"float diffuse = max(dot(v_Normal, lightVector), 0.0); \n" +"diffuse = diffuse * (" + Float.toString((float)Brightness) +" / (1.0 + (0.08 * distance))); \n" +"diffuse = diffuse; \n" //+3 +"gl_FragColor = (v_Color * diffuse * texture2D(u_Texture, v_TexCoordinate)); \n" +"} \n";
and vertex shader:
uniform mat4 u_MVPMatrix; uniform mat4 u_MVMatrix; attribute vec4 a_Position; attribute vec3 a_Normal; attribute vec2 a_TexCoordinate; varying vec3 v_Position; varying vec4 v_Color; varying vec3 v_Normal; varying vec2 v_TexCoordinate; void main() { v_Position = vec3(u_MVMatrix * a_Position); v_Color = a_Color; v_TexCoordinate = a_TexCoordinate; v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0)); gl_Position = u_MVPMatrix * a_Position; } Thx for any suggestions:)
source share