Как на OpenGL создать движущуюся линию сверху вниз
Нашел на https://www.shadertoy.com/ похожий шейдер, но не могу понять механизм, чтобы сделать просто линию, движущуюся вниз один раз. Кому не сложно, прошу помочь. Ссылка на шейдер https://www.shadertoy.com/view/MllBzs Код на GLSL
float rand(vec2 co){
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;//Condensing this into one line
vec4 texColor = texture(iChannel0, uv);//Get the pixel at xy from iChannel0
float gt = 30.0;// + rand(vec2(iTime, iTime)) * 3.0;
float m = mod(iTime, 1.0);
bool glitch = m < 0.5;
float t = floor(iTime * gt) / gt;
float r = rand(vec2(t, t));
if(glitch) {
vec2 uvGlitch = uv;
uvGlitch.x -= r / 5.0;
if(uv.y > r && uv.y < r + 0.01) {
texColor = texture(iChannel0, uvGlitch);
}
}
fragColor = texColor;
//fragColor = vec4(uv,0.5+0.5*sin(iTime),1.0);
}
Ответы (1 шт):
Автор решения: Kromster
→ Ссылка
За повтор отвечает вот эта строчка:
float m = mod(iTime, 1.0); // Остаток от деления
Если повтор не нужен, то можно сильно сократить код:
float r = 1.0 - iTime; // Инвертируем, чтобы линия шла сверху-вниз
vec2 uvGlitch = uv;
uvGlitch.x -= r / 5.0;
if(uv.y > r && uv.y < r + 0.01) {
texColor = texture(iChannel0, uvGlitch);
}
Но вам придется правильно выбирать iTime чтобы увидеть линию.