#define SHADER_NAME PHASER_MESH_FS precision mediump float; uniform vec3 uLightPosition; uniform vec3 uLightAmbient; uniform vec3 uLightDiffuse; uniform vec3 uLightSpecular; uniform vec3 uFogColor; uniform float uFogNear; uniform float uFogFar; uniform vec3 uMaterialAmbient; uniform vec3 uMaterialDiffuse; uniform vec3 uMaterialSpecular; uniform float uMaterialShine; uniform vec3 uCameraPosition; uniform sampler2D uTexture; varying vec2 vTextureCoord; varying vec3 vNormal; varying vec3 vPosition; void main (void) { vec4 color = texture2D(uTexture, vTextureCoord); vec3 ambient = uLightAmbient * uMaterialAmbient; vec3 norm = normalize(vNormal); vec3 lightDir = normalize(uLightPosition - vPosition); float diff = max(dot(norm, lightDir), 0.0); vec3 diffuse = uLightDiffuse * (diff * uMaterialDiffuse); vec3 viewDir = normalize(uCameraPosition - vPosition); vec3 reflectDir = reflect(-lightDir, norm); float spec = pow(max(dot(viewDir, reflectDir), 0.0), uMaterialShine); vec3 specular = uLightSpecular * (spec * uMaterialSpecular); vec3 result = (ambient + diffuse + specular) * color.rgb; float depth = gl_FragCoord.z / gl_FragCoord.w; float fogFactor = smoothstep(uFogNear, uFogFar, depth); gl_FragColor.rgb = mix(result.rgb, uFogColor, fogFactor); gl_FragColor.a = color.a; }