Libgdx glsl着色器-颜色混合,正常模式(如在Photoshop中)

Libgdx glsl着色器-颜色混合,正常模式(如在Photoshop中),libgdx,glsl,shader,blend,Libgdx,Glsl,Shader,Blend,我正在尝试创建混合2种颜色的效果(实际上是图像和颜色叠加在图像上),就像在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

我正在尝试创建混合2种颜色的效果(实际上是图像和颜色叠加在图像上),就像在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);
}
我用公式计算颜色和阿尔法

当我使用这个着色器时,什么也不会发生,用这个着色器绘制的对象是透明的、不可见的

gl_FragColor = texture2D(u_texture, v_texCoords); 
gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(1.0), v_color.a);
感谢@Tenfour04,这就是解决方案

感谢@Tenfour04,这就是解决方案