42 lines
1.2 KiB
GLSL
42 lines
1.2 KiB
GLSL
#version 330 core
|
|
#extension GL_ARB_shading_language_420pack : enable
|
|
|
|
uniform mat4 projection_matrix;
|
|
uniform mat4 view_matrix;
|
|
uniform mat4 model_matrix;
|
|
|
|
const uint lights = 2u;
|
|
|
|
const vec3 lightPos[lights] = {vec3(2.0, -2.0, 10.0),
|
|
vec3(2.0, 2.0, 10.0)};
|
|
const vec3 lightColor[lights] = {vec3(1.0, 0.9, 0.8),
|
|
vec3(0.0, 1.0, 0.0)};
|
|
const float lightIntensity[lights] = {75.0, 25.0};
|
|
|
|
|
|
layout(location = 0) in vec3 vertex;
|
|
layout(location = 1) in vec2 vertexTC;
|
|
layout(location = 2) in vec3 vertexNorm;
|
|
|
|
out vec2 fragTC;
|
|
out vec3 lightColors[lights];
|
|
out vec3 lightVecs[lights];
|
|
|
|
void main(void) {
|
|
vec4 vertex_Pos = model_matrix * vec4(vertex, 1.0);
|
|
gl_Position = projection_matrix * view_matrix * vertex_Pos;
|
|
|
|
fragTC = vertexTC;
|
|
|
|
vec3 vertexNorm_trans = (model_matrix*vec4(vertexNorm, 0.0)).xyz;
|
|
|
|
for (uint i = 0u;i < lights;++i) {
|
|
vec3 lightVec = lightPos[i]-vertex_Pos.xyz;
|
|
lightVecs[i] = -lightVec;
|
|
vec3 lightNorm = normalize(lightVec);
|
|
float lightDist = length(lightVec);
|
|
lightColors[i] = lightColor[i]*clamp(dot(vertexNorm_trans, lightNorm), 0.0, 1.0)*
|
|
clamp(lightIntensity[i]/(lightDist*lightDist), 0.0, 1.0);
|
|
}
|
|
}
|