SparrowRenderer/phong.frag
2015-07-02 13:08:05 +02:00

52 lines
1.3 KiB
GLSL

#version 330 core
// material
uniform vec3 materialKd;
uniform vec3 materialKs;
uniform float materialNs;
uniform int nbDirLights;
uniform vec3 dirLights[8];
uniform int nbPointLights;
uniform vec3 pointLights[8];
// texture
uniform sampler2D baseTexture;
// fragment
in vec3 varNormal;
in vec2 varTexCoord;
in vec3 lightDirInView[4];
in vec3 halfVecInView[4];
// resultat
layout(location = 0)out vec4 outColor;
// --------------------
vec3 computeLight(in vec3 kd, in vec3 ks, in float ns, in vec3 color, in vec3 normal, in vec3 lightDir, in vec3 halfVec){
float diffuse = 0;
float specular = 0;
diffuse = dot(normal, lightDir);
diffuse = diffuse < 0 ? 0 : diffuse;
specular = dot(halfVec, normal);
specular = specular < 0 ? 0 : specular;
return color*diffuse*(kd+ks*pow(specular, ns));
}
void main(void) {
int i;
vec3 kd = vec3(texture2D(baseTexture, varTexCoord));
vec3 light = 0.1f*kd;
for(i=0; i<nbDirLights && i<4; ++i)
light += computeLight(kd, materialKs, materialNs, dirLights[i*2+1], varNormal, lightDirInView[i], halfVecInView[i]);
for(i=0; i<nbPointLights && i+nbDirLights<4; ++i)
light += computeLight(kd, materialKs, materialNs, pointLights[i*2+1], varNormal, lightDirInView[nbDirLights+i], halfVecInView[nbDirLights+i]);
outColor = vec4(light, 1);
}