#version 330 core layout(location = 0) in vec3 aPosition; layout(location = 1) in vec3 aNormal; layout(location = 2) in vec2 aUV; uniform mat4 uModel; uniform mat4 uView; uniform mat4 uProjection; out vec3 vNormal; out vec3 vWorldPos; void main() { vec4 worldPos = uModel * vec4(aPosition, 1.0); vWorldPos = worldPos.xyz; vNormal = mat3(transpose(inverse(uModel))) * aNormal; gl_Position = uProjection * uView * worldPos; }