32 lines
783 B
GLSL
32 lines
783 B
GLSL
#version 120
|
|
|
|
uniform sampler2D tex0;
|
|
varying vec2 vTexCoord;
|
|
const float PI = 3.1415926535;
|
|
|
|
uniform vec2 resolution;
|
|
uniform float amount;
|
|
uniform float xoff;
|
|
uniform float yoff;
|
|
|
|
vec2 distort(vec2 p, vec2 offset) {
|
|
float theta = atan(p.y, p.x);
|
|
float radius = length(p);
|
|
radius = pow(radius, (1.0+amount*0.01));
|
|
p.x = radius * cos(theta) + offset.x;
|
|
p.y = radius * sin(theta) + offset.y;
|
|
return 0.5 * (p + 1.0);
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 offset = vec2(xoff/resolution.x, yoff/resolution.y);
|
|
vec2 xy = 2.0 * vTexCoord - 1.0 - offset;
|
|
vec2 uv;
|
|
float d = length(xy);
|
|
uv = distort(xy, offset);
|
|
if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) {
|
|
gl_FragColor = texture2D(tex0, uv);
|
|
} else {
|
|
discard;
|
|
}
|
|
} |