35 lines
1.0 KiB
GLSL
35 lines
1.0 KiB
GLSL
|
|
#version 430 core
|
||
|
|
|
||
|
|
layout (location = 0) in vec3 position;
|
||
|
|
layout (location = 1) in vec3 normal;
|
||
|
|
layout (location = 2) in vec3 tangent;
|
||
|
|
layout (location = 3) in vec2 texture_coord;
|
||
|
|
|
||
|
|
out vec3 frag_position;
|
||
|
|
out vec3 frag_normal;
|
||
|
|
out vec3 frag_tangent;
|
||
|
|
out vec3 frag_bitangent;
|
||
|
|
out vec2 frag_texture_coord;
|
||
|
|
out vec4 view_position;
|
||
|
|
|
||
|
|
uniform mat4 view_matrix;
|
||
|
|
uniform mat4 view_matrix_inverse;
|
||
|
|
uniform mat4 model_matrix;
|
||
|
|
|
||
|
|
uniform float time;
|
||
|
|
|
||
|
|
uniform mat4 shadow_matrix;
|
||
|
|
|
||
|
|
void main()
|
||
|
|
{
|
||
|
|
mat3 model_inverse_matrix = mat3(transpose(inverse(model_matrix))); // @Performance: Compute this only once, before calling the shader
|
||
|
|
frag_normal = normalize(model_inverse_matrix * normal );
|
||
|
|
frag_tangent = normalize(model_inverse_matrix * tangent);
|
||
|
|
frag_bitangent = normalize(model_inverse_matrix * cross(normal, tangent));
|
||
|
|
vec4 world_position = model_matrix * vec4(position, 1.0);
|
||
|
|
frag_position = world_position.xyz / world_position.w;
|
||
|
|
frag_texture_coord = texture_coord;
|
||
|
|
gl_Position = view_matrix * world_position;
|
||
|
|
view_position = gl_Position;
|
||
|
|
}
|