35 lines
1.2 KiB
GLSL
35 lines
1.2 KiB
GLSL
#version 330 core
|
|
|
|
in vec2 UV;
|
|
in vec3 position_worldspace;
|
|
in vec3 normal_cameraspace;
|
|
in vec3 eyeDirection_cameraspace;
|
|
in vec3 lightDirection_cameraspace;
|
|
|
|
layout(location = 0) out vec3 color;
|
|
|
|
uniform sampler2D albedoSampler;
|
|
uniform sampler2D specularSampler;
|
|
uniform mat4 mv; // mv of mvp (Model, View, Projection)
|
|
uniform vec3 lightPosition_worldspace;
|
|
uniform vec3 lightColor;
|
|
uniform float lightPower;
|
|
|
|
void main() {
|
|
vec3 materialDiffuseColor = texture(albedoSampler, UV).rgb;
|
|
vec3 materialAmbientColor = vec3(0.1, 0.1, 0.1) * materialDiffuseColor;
|
|
vec3 materialSpecularColor = texture(specularSampler, UV).rgb;
|
|
|
|
float distance = length(lightPosition_worldspace - position_worldspace);
|
|
|
|
vec3 n = normalize(normal_cameraspace);
|
|
vec3 l = normalize(lightDirection_cameraspace);
|
|
float cosTheta = clamp(dot(n, vec3(1.0)), 0, 1);
|
|
|
|
vec3 E = normalize(eyeDirection_cameraspace);
|
|
vec3 R = reflect(vec3(-1.0), n);
|
|
float cosAlpha = clamp(dot(E, R), 0, 1);
|
|
|
|
color = materialAmbientColor + materialDiffuseColor * lightColor * lightPower * cosTheta / (distance*distance) + materialSpecularColor * lightColor * lightPower * pow(cosAlpha, 5) / (distance * distance);
|
|
}
|