#version 330 core // Matrices uniform mat4 modelViewMatrix; uniform mat4 MVP; uniform mat4 normalMatrix; uniform mat4 viewMatrix; uniform vec3 dirLight[2]; uniform int nbPointLights; uniform vec3 pointLights[8]; layout(location = 0)in vec3 inPosition; layout(location = 1)in vec3 inNormal; layout(location = 2)in vec4 inTexCoord; out vec3 lightDirInView[5]; out vec3 halfVecInView[5]; out vec3 varNormal; out vec2 varTexCoord; void computeDirectionnalLightingVectorsInView(in vec3 posInView, in vec3 lightDirInWorld, out vec3 lightDir, out vec3 halfVec){ lightDir = mat3(viewMatrix)*lightDirInWorld; halfVec = normalize(normalize(lightDir) - normalize(posInView)); lightDir = normalize(lightDir); } void computePointLightingVectorsInView(in vec3 posInView, in vec3 lightPosition, out vec3 lightDir, out vec3 halfVec){ lightDir = vec3(viewMatrix*vec4(lightPosition, 1.0)) - posInView; halfVec = normalize(lightDir - posInView); lightDir = normalize(lightDir); } void main(void) { int i; computeDirectionnalLightingVectorsInView(vec3(modelViewMatrix*vec4(inPosition, 1.0)), dirLight[0], lightDirInView[0], halfVecInView[0]); for(i=1; i