/*{ "CATEGORIES": [ "Distortion" ], "CREDIT": "Automatically converted from https://www.github.com/gl-transitions/gl-transitions/tree/master/rotate_scale_fade.glsl", "DESCRIPTION": "", "INPUTS": [ { "NAME": "startImage", "TYPE": "image" }, { "NAME": "endImage", "TYPE": "image" }, { "DEFAULT": 0, "MAX": 1, "MIN": 0, "NAME": "progress", "TYPE": "float" }, { "DEFAULT": 8, "MAX": 10, "MIN": 0, "NAME": "scale", "TYPE": "float" }, { "DEFAULT": [ 0.09803921568627451, 0.09803921568627451, 0.09803921568627451, 1 ], "NAME": "backColor", "TYPE": "color" }, { "DEFAULT": 1, "MAX": 10, "MIN": 0, "NAME": "rotations", "TYPE": "float" }, { "DEFAULT": [ 0.5, 0.5 ], "MAX": [ 1, 1 ], "MIN": [ 0, 0 ], "NAME": "center", "TYPE": "point2D" } ], "ISFVSN": "2" } */ vec4 getFromColor(vec2 inUV) { return IMG_NORM_PIXEL(startImage, inUV); } vec4 getToColor(vec2 inUV) { return IMG_NORM_PIXEL(endImage, inUV); } // Author: Fernando Kuteken // License: MIT #define PI 3.14159265359 vec4 transition (vec2 uv) { vec2 difference = uv - center; vec2 dir = normalize(difference); float dist = length(difference); float angle = 2.0 * PI * rotations * progress; float c = cos(angle); float s = sin(angle); float currentScale = mix(scale, 1.0, 2.0 * abs(progress - 0.5)); vec2 rotatedDir = vec2(dir.x * c - dir.y * s, dir.x * s + dir.y * c); vec2 rotatedUv = center + rotatedDir * dist / currentScale; if (rotatedUv.x < 0.0 || rotatedUv.x > 1.0 || rotatedUv.y < 0.0 || rotatedUv.y > 1.0) return backColor; return mix(getFromColor(rotatedUv), getToColor(rotatedUv), progress); } void main() { gl_FragColor = transition(isf_FragNormCoord.xy); }