HomeAccueil / ExamplesExemples
Light trailsTraces lumineuses
Buffer A keeps the previous frame multiplied by 0.97 and adds a moving dot: memory from one frame to the next makes the trail.Le tampon A garde l'image précédente multipliée par 0,97 et y ajoute un point mobile : la mémoire d'une image à l'autre fait la traînée.
CategoryCatégorie: Multiple passesPasses multiples - traces_lumineuses.glsl - 14 lineslignes - File on GitHubFichier sur GitHub
In the program: Examples, choose it, Add to the list. Or copy the code into a file next to the program and drop it on the window.Dans le programme : Exemples, choisissez-le, Ajouter à la liste. Ou copiez le code dans un fichier et glissez-le sur la fenêtre.
This example uses several passes: the files below go together.Cet exemple utilise plusieurs passes : les fichiers ci-dessous vont ensemble.
CodeCode
traces_lumineuses.glsl
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2026 Patrick JAILLET
// fr: Traces lumineuses — Le tampon A garde l'image précédente multipliée par 0,97 et y ajoute un point mobile : la mémoire d'une image à l'autre fait la traînée.
// en: Light trails — Buffer A keeps the previous frame multiplied by 0.97 and adds a moving dot: memory from one frame to the next makes the trail.
// iChannel0=bufferA
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord / iResolution.xy;
float v = texture(iChannel0, uv).r;
vec3 col = 0.5 + 0.5 * cos(6.2831853 * (v * 0.8 + vec3(0.0, 0.33, 0.67)) + iTime);
fragColor = vec4(col * smoothstep(0.0, 0.3, v), 1.0);
}
traces_lumineuses.bufferA.glsl
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2026 Patrick JAILLET
// iChannel0=bufferA
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
float prev = texelFetch(iChannel0, ivec2(fragCoord), 0).r * 0.97;
vec2 c = iResolution.xy * (0.5 + 0.35 * vec2(sin(iTime * 1.3), cos(iTime * 0.9 + sin(iTime * 0.5))));
float dot_ = smoothstep(12.0, 3.0, length(fragCoord - c));
fragColor = vec4(max(prev, dot_), 0.0, 0.0, 1.0);
}