
precision mediump float;

uniform sampler2D texture;
uniform float n_specular;
uniform float Ks;
uniform float Ka;
uniform float Kd;
uniform vec4 diffuse;
uniform vec4 specular;
uniform vec4 ambient;

varying vec2  vTexCoord;
varying vec3  vNormal;
varying vec3  vLightVec;
varying vec3  vViewVec;

void main(void)
{
  
   vec3 vReflect = normalize( 2.0 * dot( vNormal, vLightVec) * vNormal - vLightVec );       

   
   vec4 AmbientColor = ambient * Ka;

   
   vec4 DiffuseColor = diffuse * Kd * max( 0.0, dot( vNormal, vLightVec ));

 
   vec4 SpecularColor = specular * Ks * pow( max( 0.0, dot(vReflect, vViewVec)), n_specular );
   
   vec4 FinalColor = (AmbientColor + DiffuseColor) * texture2D( texture, vTexCoord) + SpecularColor;
   
   gl_FragColor = FinalColor;
}
