varying vec2 t; varying float z; #vertex void main() { vec4 v = gl_ModelViewMatrix * gl_Vertex; z = exp(1.25 * v.z); // z = 1.0 - (v.z + 1.7) * (1.0 / 1.7); // z = 1.0 - z; t = gl_MultiTexCoord0.xy; gl_Position = gl_ProjectionMatrix * v; } #fragment uniform sampler2D tex; uniform vec4 col[4]; uniform vec4 white; void main() { vec4 ctl = texture2D(tex, t); vec4 c = ctl.x * mix(col[0], col[1], ctl.z) + ctl.y * mix(col[2], col[3], ctl.z); c += min(max(c.w, 0.0), 1.0) * white; gl_FragColor = c * z; }