Rotar los normales en Shader

Tengo una escena con varios modelos con posiciones individuales y rotaciones. Dadas las normales, los shaders aplican iluminación bidireccional simple a cada píxel.

Ese es mi vértice shader.

#version 150

in vec3 position;
in vec3 normal;
in vec2 texcoord;

out vec3 f_normal;
out vec2 f_texcoord;

uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;

void main()
{
    mat4 mvp = proj * view * model;

    f_normal   = normal;
    f_texcoord = texcoord;

    gl_Position = mvp * vec4(position, 1.0);
}

Y aquí está el fragmento shader.

#version 150

in vec3 f_normal;
in vec2 f_texcoord;

uniform sampler2D tex;

vec3 sun = vec3(0.5, 1.0, 1.5);

void main()
{
    vec3 light = max(0.0, dot(normalize(f_normal), normalize(sun)));

    gl_FragColor = texture(tex, f_texcoord) * vec4(light, 1.0);
}

Para objetos sin rotación esto funciona bien. Pero para los modelos rotados, la iluminación también gira, lo que, por supuesto, no debería ser el caso.

La razón de esto es que las normales no están rotadas. Ya lo intentef_normal = model * normal; pero esto aplica tanto la rotación como la transformación a las normales.

Entonces, ¿cómo puedo rotar las normales en el sombreado de vértices antes de enviarlas al sombreado de fragmentos para que se encienda? ¿Qué es un enfoque común?

Respuestas a la pregunta(2)

Su respuesta a la pregunta