34 lines
1.1 KiB
GLSL
34 lines
1.1 KiB
GLSL
layout(location = 0) in vec3 inPosition;
|
|
layout(location = 1) in vec3 inNormal;
|
|
layout(location = 2) in vec2 inUV;
|
|
layout(location = 3) in vec3 inTangent;
|
|
|
|
layout(location = 0) out vec3 outFragPos;
|
|
layout(location = 1) out vec3 outNormal;
|
|
layout(location = 2) out vec2 outUV;
|
|
layout(location = 3) out mat3 TBN;
|
|
|
|
layout(std140, binding = 0) uniform UniformObjectData {
|
|
mat4 projection, view, model;
|
|
vec4 albedoTint;
|
|
vec4 emission;
|
|
float metallic, roughness;
|
|
} objectData;
|
|
|
|
out gl_PerVertex {
|
|
vec4 gl_Position;
|
|
};
|
|
|
|
void main() {
|
|
gl_Position = objectData.projection * objectData.view * objectData.model * vec4(inPosition, 1.0);
|
|
outFragPos = vec3(objectData.model * vec4(inPosition, 1.0));
|
|
outNormal = transpose(inverse(mat3(objectData.model))) * inNormal;
|
|
outUV = inUV;
|
|
|
|
vec3 Bitangent = cross(inTangent, normalize(outNormal));
|
|
|
|
vec3 T = normalize(vec3(objectData.model * vec4(inTangent, 0.0)));
|
|
vec3 B = normalize(vec3(objectData.model * vec4(Bitangent, 0.0)));
|
|
vec3 N = normalize(vec3(objectData.model * vec4(inNormal, 0.0)));
|
|
TBN = mat3(T, B, N);
|
|
}
|