varying float i; varying vec3 n, l; uniform vec3 m; #vertex void main() { n = normalize(gl_NormalMatrix * gl_Normal); l = normalize(vec3(gl_LightSource[0].position)); gl_TexCoord[0] = gl_Vertex * 10.0; gl_TexCoord[1] = (gl_Vertex + vec4(1.0, 1.0, 1.0, 1.0)) * 0.5; i = max(m.s + m.t * gl_Vertex.z, 0.0); i = 0.1 + i * 0.9; gl_Position = ftransform(); } #fragment uniform sampler2D tex; uniform sampler2D shad; void main() { vec3 t = (vec3(texture2D(tex, vec2(gl_TexCoord[0]))) - vec3(0.5, 0.5, 0.5)) + normalize(n); float l = 0.75 + 0.25 * dot(normalize(t), l); l = i * l + (1.0 - i) * i; l *= (1.0 - m.z * texture2D(shad, vec2(gl_TexCoord[1])).r); gl_FragColor = vec4(l,l,l,l); }