Normalen im Shader drehen

Ich habe eine Szene mit mehreren Modellen mit individuellen Positionen und Drehungen. Bei gegebenen Normalen wenden die Shader eine einfache bidirektionale Beleuchtung auf jedes Pixel an.

Das ist mein Vertex-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);
}

Und hier ist der Fragment-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);
}

Bei Objekten ohne Drehung funktioniert dies problemlos. Bei gedrehten Modellen wird jedoch auch die Beleuchtung gedreht, was natürlich nicht der Fall sein sollte.

Der Grund dafür ist, dass die Normalen nicht gedreht werden. Ich habe es schon versuchtf_normal = model * normal; Dies gilt jedoch sowohl für die Rotation als auch für die Transformation der Normalen.

Wie kann ich also die Normalen im Vertex-Shader drehen, bevor ich sie zur Beleuchtung an den Fragment-Shader sende? Was ist ein gemeinsamer Ansatz?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage