1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#version 330
in vec3 position_in_eye_space;
in vec3 normal_in_eye_space;
out vec4 color;
uniform vec3 light_in_eye_space;
uniform vec4 Ia, Id, Is;
uniform vec4 ka, kd, ks;
uniform float s;
void main() {
// transoform the vertex position into "eye space"
vec3 v = position_in_eye_space;
// unit vector from the vertex to the light
vec3 l = normalize(light_in_eye_space - v);
// unit vector from the vertex to the eye point, which is at 0,0,0 in "eye space"
vec3 e = normalize(vec3(0,0,0) - v);
// normal transformed into "eye space"
vec3 n = normalize(normalize(normal_in_eye_space));
// halfway vector
vec3 h = normalize(e+l);
// calculate color using the light intensity equation
vec4 ambient = ka * Ia;
vec4 diffuse = kd * Id * max(dot(n, l), 0);
vec4 specular = ks * Is * pow(max(dot(h, n), 0), s);
color = ambient + diffuse + specular;
}
|