precision highp float; varying highp vec2 vTextureCoord; varying highp vec4 vNormal; varying highp vec3 vPosition; uniform sampler2D uSampler; void main() { highp vec4 texelColor = texture2D(uSampler, vTextureCoord); vec3 n = normalize(vec3(-50., 100., 50.) - vPosition); float diffuse = max(dot(normalize(vNormal.xyz), n), 0.); float specular = pow( max(dot( reflect(n, normalize(vNormal.xyz)), normalize(vec3(0., 0., -50.) - vPosition)), 0.), 10.); gl_FragColor = vec4((texelColor.xyz * diffuse * 0.8) + (texelColor.xyz * vec3(0.2)) + (specular * vec3(1.)), 1.0); }