我正在尝试创建一个着色器,它可以周期性地将图像变成黑白,然后再变成彩色。我写了一个代码,把图像转换成B&W:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 xy = fragCoord.xy / iResolution.xy;
vec4 texColor = texture(iChannel0, xy);
fragColor = (texColor + texColor.yzxw + texColor.zxyw) / 3.;
//fragColor = texColor; This is for turning back to colorful
}所以问题是我不知道如何循环这个过程。我想我应该考虑使用ITime,但我不确定
发布于 2022-10-04 14:02:39
您可以使用mix和sin函数的组合在着色器中的两个状态之间循环。像这样的事情应该有效:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 xy = fragCoord.xy / iResolution.xy;
vec4 texColor = texture(iChannel0, xy);
vec4 grey = (texColor + texColor.yzxw + texColor.zxyw) / 3.;
float t = sin(iTime*5.)*.5+.5; // make it cyclic
// mix between the colorful and greyscale version
fragColor = mix(grey, texColor, t);
}https://stackoverflow.com/questions/73731169
复制相似问题