precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform vec3 params; uniform vec2 resolution; uniform vec2 size; uniform vec2 center; uniform mat3 mappedMatrix; uniform mat3 unmappedMatrix; vec2 scale = size / resolution; void main() { vec3 mapCoord = vec3(vTextureCoord, 1.0) * mappedMatrix; vec2 p = (mapCoord.xy - center.xy) / scale; vec2 uv; uv.x = p.x / (sqrt(pow(params.x, 2.0) - pow(p.y, 2.0)) - params.x + 1.0); uv.y = p.y / (sqrt(pow(params.y, 2.0) - pow(p.y, 2.0)) + params.y); if(abs(uv.y) > 0.50) { discard; } if(abs(uv.x) > 0.499 / scale.x) { discard; } uv = uv * scale + center; gl_FragColor = texture2D(uSampler, (vec3(uv, 1.0) * unmappedMatrix).xy); }