kernel vec4 fishEye(sampler image, vec2 center, float factor) { float d; vec2 v, uv; v = destCoord() - center; // break out into distance/unit vector form d = length(v); uv = normalize(v); // modify d to account for fish-eye distortion d = 0.6 * d / (1.0 - (d * d) / (factor * factor)); return sample(image, samplerTransform(image, center + d * uv)); }