-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfragment.shader
51 lines (41 loc) · 1.38 KB
/
fragment.shader
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
46
47
48
49
50
51
#version 330 core
in vec3 outNormal;
in vec3 fragPosition;
in vec2 outUV;
out vec4 color;
uniform sampler2D Texture;
uniform vec4 selectedColor;
uniform bool useTexture;
uniform vec3 viewPos;
void main()
{
vec3 lightColour = vec3(0.8f, 0.8f, 0.8f);
vec3 lightPosition = vec3(1000.0f, 700.0f, 1000.0f);
vec3 cubeColour = vec3(texture(Texture, outUV));
vec3 resultantColour;
//ambient lighting
float ambientStrength = 0.4f;
vec3 ambient_contribution = ambientStrength * lightColour;
//diffuse lighting
vec3 norm = normalize(outNormal);
vec3 light_direction = normalize(lightPosition - fragPosition);
float incident_degree = max(dot(norm, light_direction), 1.0f);
vec3 diffuse_contribution = incident_degree * lightColour;
//specular lighting
float specularStrength = 0.2f;
vec3 viewDir = normalize(viewPos - fragPosition);
vec3 reflectDir = reflect(-light_direction, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.2), 1024);
vec3 specular_contribution = specularStrength * spec * lightColour;
float distance = length(lightPosition - fragPosition) / 400;
if(useTexture)
{
resultantColour = ((ambient_contribution + diffuse_contribution) * cubeColour) / distance;
color = vec4(resultantColour, 1.0f);
}
else
{
resultantColour = ((ambient_contribution + diffuse_contribution) * (vec3(selectedColor) * cubeColour)) / distance;
color = vec4(resultantColour, 1.0f);
}
}