diff --git a/shaders/rotation.fs b/shaders/rotation.fs index d8d63b3..3f81c7c 100644 --- a/shaders/rotation.fs +++ b/shaders/rotation.fs @@ -7,19 +7,27 @@ uniform float progress; in vec2 vsoTexCoord; out vec4 fragColor; -void main() { - vec2 center = vec2(.5); +// Fonction de déformation +vec2 deform(float progression) { + vec2 center = vec2(0.5); vec2 offset = vsoTexCoord - center; - float angle = progress * radians(180) * 2; - float sinTheta = sin(angle); + // Torsion + float angle = offset.y * progression * radians(180) * 2; float cosTheta = cos(angle); - vec2 rotatedOffset = vec2(cosTheta * offset.x - sinTheta * offset.y, sinTheta * offset.x + cosTheta * offset.y); + float sinTheta = sin(angle); + vec2 twistedOffset = vec2(cosTheta * offset.x - sinTheta * offset.y, sinTheta * offset.x + cosTheta * offset.y); - vec2 distortedTexCoord = center + rotatedOffset; + // Vague + float wave = sin(twistedOffset.y * 20); + vec2 deformedUV = twistedOffset + vec2(wave * progression, 0); - vec4 color1 = texture(tex0, vsoTexCoord); - vec4 color2 = texture(tex1, distortedTexCoord); + return center + deformedUV; +} + +void main() { + vec4 color1 = texture(tex0, deform(progress)); + vec4 color2 = texture(tex1, deform(1. - progress)); fragColor = mix(color1, color2, smoothstep(0., 1., progress)); }