#version 330 core layout(location=0) in vec3 aPos; layout(location=1) in vec3 aNormal; layout(location=2) in vec2 aTex; uniform mat4 Model; uniform mat4 View; uniform mat4 Projection; 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; };