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
37
38
39
40
41
42
43
44
45
|
#version 330
// CSci-4611 Assignment 5: Art Render
// TODO: You need to calculate per-fragment shading here using a toon shading model
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;
uniform sampler2D diffuse_ramp;
uniform sampler2D specular_ramp;
void main() {
// normalized normal
vec3 n = normalize(normal_in_eye_space);
// unit vector from the vertex to the light
vec3 l = normalize(light_in_eye_space - position_in_eye_space);
// unit vector from the vertex to the eye point, which is at 0,0,0 in "eye space"
vec3 e = normalize(-position_in_eye_space);
// halfway vector
vec3 h = normalize(l + e);
// calculate color using the light intensity equation
vec4 ambient = Ia * ka;
float diff_intensity = max(dot(n, l), 0.0);
vec2 diffuse_texture = vec2(diff_intensity, 0.0);
vec4 diffuse = Id * kd * texture(diffuse_ramp, diffuse_texture);
float spec_intensity = pow(max(dot(n, h), 0.0), s);
vec2 specular_texture = vec2(spec_intensity, 0.0);
vec4 specular = Is * ks * texture(specular_ramp, specular_texture);
color = diffuse + specular;
}
|