69 lines
2.0 KiB
GLSL
69 lines
2.0 KiB
GLSL
#version 330 core
|
|
|
|
layout(location = 0) in vec3 a_position;
|
|
layout(location = 1) in vec2 a_texCoord;
|
|
layout(location = 2) in vec3 a_normal;
|
|
layout(location = 3) in vec3 a_tangent;
|
|
layout(location = 4) in vec3 a_bitangent;
|
|
|
|
out vec3 v_normal;
|
|
out vec2 v_texCoord;
|
|
|
|
out vec3 v_fragmentPosition;
|
|
out vec3 v_fragmentPositionTangent;
|
|
out vec4 v_fragmentPositionDirectionalLightSpace;
|
|
|
|
out vec3 v_viewPositionTangent;
|
|
|
|
struct DirectionalLight {
|
|
vec3 direction;
|
|
bool isActive;
|
|
vec3 color;
|
|
};
|
|
uniform DirectionalLight u_directionalLight;
|
|
out vec3 v_lightDirectionTangent;
|
|
|
|
struct PointLight {
|
|
vec3 position;
|
|
bool isActive;
|
|
vec3 color;
|
|
};
|
|
#define NUM_POINT_LIGHTS 1
|
|
uniform PointLight u_pointLight[NUM_POINT_LIGHTS];
|
|
out vec3 v_lightPositionTangent0;
|
|
//out vec3 v_lightPositionTangent1;
|
|
//out vec3 v_lightPositionTangent2;
|
|
//out vec3 v_lightPositionTangent3;
|
|
|
|
uniform vec3 u_viewPosition;
|
|
|
|
uniform mat4 u_modelViewProjMatrix;
|
|
uniform mat4 u_modelMatrix;
|
|
|
|
uniform mat4 u_directionalLightViewProjMatrix;
|
|
|
|
void main() {
|
|
gl_Position = u_modelViewProjMatrix * vec4(a_position, 1.0f);
|
|
|
|
vec3 T = normalize(vec3(u_modelMatrix * vec4(a_tangent, 0.0f)));
|
|
vec3 B = normalize(vec3(u_modelMatrix * vec4(a_bitangent, 0.0f)));
|
|
vec3 N = normalize(vec3(u_modelMatrix * vec4(a_normal, 0.0f)));
|
|
mat3 TBN_transposed = transpose(mat3(T, B, N));
|
|
|
|
v_lightDirectionTangent = TBN_transposed * u_directionalLight.direction;
|
|
v_lightPositionTangent0 = TBN_transposed * u_pointLight[0].position;
|
|
//v_lightPositionTangent1 = vec3(0.0f);
|
|
//v_lightPositionTangent2 = vec3(0.0f);
|
|
//v_lightPositionTangent3 = vec3(0.0f);
|
|
|
|
v_fragmentPositionTangent = TBN_transposed * vec3(u_modelMatrix * vec4(a_position, 1.0f));
|
|
|
|
v_fragmentPosition = vec3(u_modelMatrix * vec4(a_position, 1.0f));
|
|
v_fragmentPositionDirectionalLightSpace = u_directionalLightViewProjMatrix * vec4(v_fragmentPosition, 1.0f);
|
|
|
|
v_viewPositionTangent = TBN_transposed * u_viewPosition;
|
|
|
|
v_normal = a_normal;
|
|
v_texCoord = a_texCoord;
|
|
}
|