The shader toolkit is very extensible, I've coded a small test part (include the shader toolkit before running this)[code]shader_effects["fisheye"] = {shader=basic_fsh..[[uniform float amount;void mainImage( out vec4 fragColor, in vec2 fragCoord ){ vec2 p = fragCoord.xy / iResolution.x;//normalized coords with some cheat //(assume 1:1 prop) float prop = iResolution.x / iResolution.y;//screen proroption vec2 m = vec2(0.5, 0.5 / prop);//center coords vec2 d = p - m;//vector from center to current fragment float r = sqrt(dot(d, d)); // distance of pixel from center float power = ( 2.0 * 3.141592 / (2.0 * sqrt(dot(m, m))) ) * (amount - 0.5);//amount of effect float bind;//radius of 1:1 effect if (power > 0.0) bind = sqrt(dot(m, m));//stick to corners else {if (prop //Weird formulas vec2 uv; if (power > 0.0)//fisheye uv = m + normalize(d) * tan(r * power) * bind / tan( bind * power); else if (power uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0); else uv = p;//no effect for power = 1.0 vec3 col = texture2D(iChannel0, vec2(uv.x, uv.y * prop)).xyz;//Second part of cheat //for round effect, not elliptical fragColor = vec4(col, 1.0);}void main(){ vec4 color; mainImage(color, texcoord.xy*iResolution.xy); gl_FragColor = color;}]]}shaderAddEffect("fisheye")shaderEffectParam("fisheye", "amount", 0.45)[/code]I've based this on [url=https://www.shadertoy.com/view/4s2GRR]https://www.shadertoy.com/view/4s2GRR[/url]. You can change the amount on the botton, with 0.5 being no change and 0.0 maximum fisheye and 1.0 being maximum bulge.You can even easily animate that:[code]fisheye_amount = 0.5bind("fisheye", "amount", field("fisheye_amount"))startTween("fisheye_amount", fisheye_amount, 0.44, 1000, easeQuadInOut, true, true)[/code]
by SimonS, 10 years ago