#version 330 core out vec4 frag_color; uniform vec3 light_pos; uniform vec3 solid_color; in vec3 normal; in vec3 frag_position; void main() { vec3 light_color = vec3(1, 1, 1); vec3 light_direction_norm = normalize(light_pos - frag_position); vec3 normal_norm = normalize(normal); vec3 eyes = vec3(1, 1, 0); float ambient_strength = 0.1; vec3 ambient = ambient_strength * light_color; float diff = max(dot(normal_norm, light_direction_norm), 0.0); vec3 diffuse = diff * light_color; float specular_strength = 0.5; vec3 view_direction_norm = normalize(eyes - frag_position); vec3 reflect_dir = reflect(-light_direction_norm, normal_norm); float spec = pow(max(dot(view_direction_norm, reflect_dir), 0.0), 32); vec3 specular = specular_strength * spec * light_color; vec3 result = (ambient + diffuse + specular) * solid_color; frag_color = vec4(result, 1.0); }