#version 330 core layout(location=0) in vec3 aPos; layout(location=1) in vec3 aNormal; layout(location=2) in vec2 aTex; // uniform mat4 Model; layout (std140) uniform Matrices { mat4 View; // start: 0 // end: 16 * 4 = 64 mat4 Projection; // start: 64 // end: 64 + 64 = 128 }; uniform mat4 Model; out vec2 TexCoords; out vec3 VertexWorldPos; out vec3 FragNormal; // @note: I still do not fully understand how the FragNormal calculation works. Need to make sure I intuitively // get that void main() { gl_Position = Projection*View*Model*vec4(aPos, 1.0); VertexWorldPos = vec3(Model * vec4(aPos, 1.0)); FragNormal = mat3(transpose(inverse(Model))) * aNormal; FragNormal = normalize(FragNormal); TexCoords = aTex; };