uniform vec3 col; #vertex uniform vec4 rgio; uniform vec2 zctl; void main() { vec2 rg; vec3 n; vec4 v; float i, z; // determine if we're on the inner or outer side if (gl_Color.a < 0.5) rg = rgio.xy; else rg = rgio.zw; // compute vertex v = gl_ModelViewMatrix * vec4(rg.r * normalize(mix(gl_Color.xyz, gl_Vertex.xyz, rg.g)), 1.0); gl_Position = gl_ProjectionMatrix * v; // compute z z = abs(zctl.x + v.z) * zctl.y; // compute normal and lighting n = normalize(gl_NormalMatrix * gl_Normal); i = max(dot(n, normalize(vec3(gl_LightSource[0].position))), 0.0) * gl_LightSource[0].diffuse.r; i *= rg.r; i = 1.0 - i; i = gl_LightModel.ambient.r + 1.0 - i * i; gl_FrontColor = vec4(i * col, z); } #fragment uniform sampler2D tex; void main() { float t = 1.0 - gl_Color.r; t *= t; t *= t; gl_FragColor = vec4(mix(gl_Color.rgb, 0.125 * texture2D(tex, 0.125 * gl_FragCoord.xy).rgb, t), gl_Color.a); // gl_FragColor = vec4(gl_Color.a, gl_Color.a, gl_Color.a, 0.0); // gl_FragColor = vec4(gl_Color.a, gl_Color.a, gl_Color.a, gl_Color.a); }