Rodar Normais no Shader
Eu tenho uma cena com vários modelos com posições individuais e rotações. Dadas as normais, os shaders aplicam uma iluminação bidirecional simples a cada pixel.
Esse é o meu 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);
}
E aqui está o shader do fragmento.
#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 sem rotação, isso funciona bem. Mas para modelos rotacionados, a iluminação também é girada, o que, é claro, não deveria ser o caso.
A razão para isso é que as normais não são giradas. Eu já tenteif_normal = model * normal;
mas isso aplica rotação e transformação às normais.
Então, como posso rotacionar as normais no shader de vértice antes de enviá-las ao fragment shader para iluminação? O que é uma abordagem comum?