2015-08-28 112 views
1

我试图创建混合​​2种颜色(实际上图像和颜色作为覆盖图像)的效果,就像在“正常混合”模式的Photoshop“颜色覆盖”glsl着色器 - 颜色混合,正常模式(像在Photoshop中)

进出口使用libgdx

这是我迄今为止

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord0; 

uniform mat4 u_projTrans; 

varying vec4 v_color; 
varying vec2 v_texCoords; 

void main() 
{ 
    v_color = a_color; 
    v_texCoords = a_texCoord0; 
    gl_Position = u_projTrans * a_position; 
} 

和碎片

#ifdef GL_ES 
#define LOWP lowp 
precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 v_color; 
varying vec2 v_texCoords; 

uniform sampler2D u_texture; 

void main() 
{ 
    vec4 curColor = texture2D(u_texture, v_texCoords); 

    vec3 cA = curColor.rgb;//color A, background 
    vec3 cB = v_color.rgb;//color B, overlay 

    float aA = curColor.a; 
    float aB = v_color.a; 

    vec3 color = (cA * aA + cB * aB * (1 - aA))/aA + aB * (1 - aA); 
    float alpha = aA + aB * (1 - aA); 
    gl_FragColor = vec4(color, alpha); 
} 

我用公式颜色和alpha从wikipedia

当我使用该着色器,没有任何反应,其被绘制与该着色器对象是透明的,不可见的

回答

4
gl_FragColor = texture2D(u_texture, v_texCoords); 
gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(1.0), v_color.a); 

这是溶液,由于@ Tenfour04