Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #version 330
- // TODO: get color value from vertex shader
- in vec3 world_position;
- in vec3 world_normal;
- // Uniforms for light properties
- uniform vec3 light_direction;
- uniform vec3 light_position;
- uniform vec3 eye_position;
- uniform float material_kd;
- uniform float material_ks;
- uniform int material_shininess;
- uniform vec3 object_color;
- uniform int spotlight;
- uniform float cut_off;
- layout(location = 0) out vec4 out_color;
- void main()
- {
- vec3 V = normalize(eye_position - world_position);
- vec3 L = normalize(light_position - world_position);
- vec3 H = normalize(L + V);
- // TODO: define ambient light component
- float ambient_light = 0.25;
- // TODO: compute diffuse light component
- float diffuse_light = material_kd*max(0,(dot(world_normal, L)));
- // TODO: compute specular light component
- float specular_light = 0;
- if(diffuse_light > 0)
- specular_light = material_ks * pow(max(dot(world_normal, H), 0), material_shininess);
- // TODO: compute light
- float light_att_factor;
- if(spotlight == 1) {
- float cut_off = radians(30);
- float spot_light = dot(L, light_direction);
- float spot_light_limit = cos(radians(cut_off));
- if (spot_light > spot_light_limit)
- {
- float linear_att = (spot_light - spot_light_limit) / (1 - spot_light_limit);
- light_att_factor = pow(linear_att, 2);
- diffuse_light *= light_att_factor;
- specular_light *= light_att_factor;
- }
- }
- else {
- light_att_factor = 1 / pow(distance(light_position, world_position), 2);
- }
- vec3 color = object_color * (ambient_light + light_att_factor * (diffuse_light + specular_light));
- // TODO: write pixel out color
- out_color = vec4(color, 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement