Opengl es 彩色渐晕着色器(外部)-LIBGDX

Opengl es 彩色渐晕着色器(外部)-LIBGDX,opengl-es,libgdx,opengl-es-2.0,shader,vertex-shader,Opengl Es,Libgdx,Opengl Es 2.0,Shader,Vertex Shader,我已经看过很多关于渐晕着色器的教程,但没有一个像这样说如何更改渐晕的颜色,他们只讨论将深褐色或灰色着色器应用于整个合成图像 例如,上面的视频给出了vignette着色器的以下代码。如何更改渐晕图的颜色?所以它不是黑色的,而是红色或橙色的,并且渐晕图内部的图像部分保持不变 const float outerRadius = .65, innerRadius = .4, intensity = .6; void main(){ vec4 color = texture2D(u_sample

我已经看过很多关于渐晕着色器的教程,但没有一个像这样说如何更改渐晕的颜色,他们只讨论将深褐色或灰色着色器应用于整个合成图像

例如,上面的视频给出了vignette着色器的以下代码。如何更改渐晕图的颜色?所以它不是黑色的,而是红色或橙色的,并且渐晕图内部的图像部分保持不变

const float outerRadius = .65, innerRadius = .4, intensity = .6;

void main(){
    vec4 color = texture2D(u_sampler2D, v_texCoord0) * v_color;
    vec2 relativePosition = gl_FragCoord.xy / u_resolution - .5;
    relativePosition.y *= u_resolution.x / u_resolution.y;
    float len = length(relativePosition);
    float vignette = smoothstep(outerRadius, innerRadius, len);
    color.rgb = mix(color.rgb, color.rgb * vignette, intensity);

    gl_FragColor = color;
}

在您发布的着色器中,渐晕值基本上是一个在图像上混合的黑暗值,因此在使用mix函数的行中,它只是乘以纹理颜色

因此,要修改此选项以使用任意颜色,需要将其更改为不透明度值并反转。现在是不透明度了,你可以用它乘以强度来简化下一步的计算。最后,您可以混合到您选择的渐晕颜色

因此,首先在主函数之前声明所需的颜色

const vec3 vignetteColor = vec3(1.0, 0.0, 0.0); //red
//this could be a uniform if you want to dynamically change it.
然后,从第二行到最后两行更改为以下内容

float vignetteOpacity = smoothstep(innerRadius, outerRadius, len) * intensity; //note inner and outer swapped to switch darkness to opacity
color.rgb = mix(color.rgb, vignetteColor, vignetteOpacity);

顺便说一下,intensity=.6f将导致着色器无法在mobile上编译,因此请删除f。除非您的目标是OpenGL ES 3.0,但libgdx还不完全支持它。

在您发布的着色器中,渐晕值基本上是一个在图像上混合的暗值,因此在使用mix函数的行中,它只是乘以纹理颜色

因此,要修改此选项以使用任意颜色,需要将其更改为不透明度值并反转。现在是不透明度了,你可以用它乘以强度来简化下一步的计算。最后,您可以混合到您选择的渐晕颜色

因此,首先在主函数之前声明所需的颜色

const vec3 vignetteColor = vec3(1.0, 0.0, 0.0); //red
//this could be a uniform if you want to dynamically change it.
然后,从第二行到最后两行更改为以下内容

float vignetteOpacity = smoothstep(innerRadius, outerRadius, len) * intensity; //note inner and outer swapped to switch darkness to opacity
color.rgb = mix(color.rgb, vignetteColor, vignetteOpacity);
顺便说一下,intensity=.6f将导致着色器无法在mobile上编译,因此请删除f。除非您的目标是OpenGLES3.0,但libgdx还不完全支持它