#version 330 core layout (location = 0) in vec3 a_position; layout (location = 1) in vec2 a_texcoord; layout (location = 2) in vec3 a_normal; uniform mat4 u_vp; uniform mat4 u_model; out vec3 v_fragpos; out vec2 v_texcoord; out vec3 v_normal; void main() { v_texcoord = a_texcoord; v_normal = normalize(mat3(transpose(inverse(u_model))) * a_normal); vec4 fragpos4 = u_model * vec4(a_position, 1.0); v_fragpos = vec3(fragpos4); gl_Position = u_vp * fragpos4; }