原文链接: glfx 旋涡
上一篇: gldx 三角形模糊
下一篇: glfx 透镜
参数: 中心 ,半径, 旋转角度
const vert = `
precision highp float;
attribute vec2 vertex;
attribute vec2 uv;
varying vec2 texCoord;
void main() {
texCoord=uv;
gl_Position = vec4(vertex, 0.0, 1.0);
}
`;
const frag = `
precision highp float;
uniform float radius;
uniform float angle;
uniform vec2 center;
uniform sampler2D texture;
uniform vec2 texSize;
varying vec2 texCoord;
void main() {
vec2 coord = texCoord * texSize;
coord -= center;
float distance = length(coord);
if (distance < radius) {
float percent = (radius - distance) / radius;
float theta = percent * percent * angle;
float s = sin(theta);
float c = cos(theta);
coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);
}
coord += center;
gl_FragColor = texture2D(texture, coord / texSize);
vec2 clampedCoord = clamp(coord, vec2(0.0), texSize);
if (coord !=
clampedCoord) { /* fade to transparent if we are outside the image */
gl_FragColor.a *= max(0.0, 1.0 - length(coord - clampedCoord));
}
}
`;