Article index
- 1 – Fish Eye Shader
- 2 – Barrel Distortion Shaders
- 3 – Dome Distortion Shader
- 4 – Another Very Cool Fish Eye Shader
- 5 – Shadertoy FishEye / Anti-FishEye Shader
- 6 – Fish Eye Lens Shader
4 – Another Very Cool Fish Eye Shader
I found this very cool GLSL fish eye shader in this demo:
GLSL Vertex shader:
#version 120 varying vec4 Vertex_UV; varying vec4 posDevSpace; uniform mat4 gxl3d_ModelViewProjectionMatrix; void main() { gl_Position = gxl3d_ModelViewProjectionMatrix * gl_Vertex; Vertex_UV = gl_MultiTexCoord0; posDevSpace = gl_Position / gl_Position.z; posDevSpace = vec4(0.5, 0.5, 1.0, 1.0) + (posDevSpace + vec4(1.0, 1.0, 0.0, 0.0)); }
GLSL Fragment shader:
#version 120 uniform sampler2D tex0; varying vec4 Vertex_UV; const float PI = 3.1415926535; varying vec4 posDevSpace; uniform float lensradius; // 3 uniform float signcurvature; // 10 #define EPSILON 0.000011 void main(void) { float curvature = abs(signcurvature); float extent = lensradius; float optics = extent / log2(curvature * extent + 1.0) / 1.4427; vec4 PP = posDevSpace - vec4 (1.5, 1.5, 0.0, 1.0); float P0 = PP[0]; float P1 = PP[1]; float radius = sqrt(P0 * P0 + P1 * P1); float cosangle = P0 / radius; float sinangle = P1 / radius; float rad1, rad2, newradius; rad1 = (exp2((radius / optics) * 1.4427) - 1.0) / curvature; rad2 = optics * log2(1.0 + curvature * radius) / 1.4427; newradius = signcurvature > 0.0 ? rad1 : rad2; vec4 FE = vec4 (0.0, 0.0, 0.0, 1.0); FE[0] = newradius * cosangle + 0.5; FE[1] = newradius * sinangle + 0.5; FE = radius <= extent ? FE : posDevSpace; FE = curvature < EPSILON ? posDevSpace : FE; gl_FragColor = texture2D(tex0, vec2(FE)); }
Article index
cool shaders! I especially like Fish Eye Lens Shader.
check this shader
http://www.vill.ee/entry.php?13-Romanesco-broccoli-pattern-2D-shader