35 lines
1,019 B
GLSL
35 lines
1,019 B
GLSL
layout(location = 0) in vec3 inPosition;
|
|
layout(location = 1) in vec3 inNormal;
|
|
layout(location = 2) in vec2 inTexCoords;
|
|
layout(location = 3) in vec3 inTangent;
|
|
layout(location = 4) in mat4 inModel;
|
|
|
|
layout(std140, binding = 0) uniform UniformSceneData {
|
|
mat4 projection, view, model;
|
|
vec4 cameraPosition;
|
|
} sceneData;
|
|
|
|
out VS_OUT {
|
|
vec3 FragPos;
|
|
vec3 Normal;
|
|
vec2 TexCoords;
|
|
mat3 TBN;
|
|
} vs_out;
|
|
|
|
out gl_PerVertex {
|
|
vec4 gl_Position;
|
|
};
|
|
|
|
void main() {
|
|
gl_Position = sceneData.projection * sceneData.view * inModel * vec4(inPosition, 1.0);
|
|
vs_out.Normal = transpose(inverse(mat3(inModel))) * inNormal;
|
|
vs_out.FragPos = vec3(inModel * vec4(inPosition, 1.0));
|
|
vs_out.TexCoords = inTexCoords;
|
|
|
|
vec3 Bitangent = cross(inTangent, normalize(vs_out.Normal));
|
|
|
|
vec3 T = normalize(vec3(inModel * vec4(inTangent, 0.0)));
|
|
vec3 B = normalize(vec3(inModel * vec4(Bitangent, 0.0)));
|
|
vec3 N = normalize(vec3(inModel * vec4(inNormal, 0.0)));
|
|
vs_out.TBN = mat3(T, B, N);
|
|
}
|