culturered_client/ProjectorDisplay/shader/fragment_shader.fs

53 lines
1.6 KiB
Forth
Raw Permalink Normal View History

2024-09-07 03:34:44 +00:00
#version 330 core
out vec4 FragColor;
in vec3 ourColor;
in vec2 TexCoord;
uniform float time;
uniform bool fusion;
uniform sampler2D bgMap;
uniform sampler2D maskMap;
uniform sampler2D sourceMap;
uniform sampler2D colorMaskMap;
void main()
{
vec3 bgColor = texture2D( bgMap, TexCoord ).rgb;
vec3 frgColor = vec3(0.0);
if (fusion) {
vec2 normalizedTexCoord = TexCoord - vec2(0.5);
float angle = time ;
mat2 rotationMatrix = mat2(cos(radians(angle)), -sin(radians(angle)), sin(radians(angle)), cos(radians(angle)));
vec2 rotatedTexCoord = rotationMatrix * normalizedTexCoord;
vec2 finalTexCoord = rotatedTexCoord + vec2(0.5);
vec3 sourceColor = texture2D(sourceMap, finalTexCoord).rgb;
//vec3 sourceColor = texture2D(sourceMap, TexCoord).rgb;
vec3 colorMaskColor = texture2D(colorMaskMap, TexCoord).rgb;
vec3 maskColor = texture2D(maskMap, TexCoord).rgb;
float gray = dot(sourceColor, vec3(0.299, 0.587, 0.114));
vec3 grayColor = vec3(gray);
vec3 color = maskColor * grayColor;
vec3 invBaseColor = 1 - maskColor;
vec2 offsetTexcoord = TexCoord ;
vec3 maskOffsetColor = texture2D(maskMap, offsetTexcoord).rgb;
vec3 offsetColor = maskOffsetColor * sourceColor;
vec3 maskGrayColor = grayColor + invBaseColor;
vec3 maskColorColor = colorMaskColor * sourceColor;
frgColor = mix(bgColor, mix(maskGrayColor, maskColorColor, colorMaskColor), maskColor);
} else {
frgColor = bgColor;
}
FragColor = vec4(frgColor, 1.0);
}