gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:48:04 25 4
gpt4 key购买 nike

我试图创造混合 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);
}

我使用了来自 wikipedia 的颜色和 alpha 公式

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

最佳答案

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

这是解决方案,感谢@Tenfour04

关于libgdx - glsl 着色器 - 颜色混合,正常模式(如在 Photoshop 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275318/

25 4 0
文章推荐: ruby-on-rails - Ajax 调用