我有一个场景几款车型与个别位置和旋转。 由于法线,着色器将简单的双向照明到每个像素。
这是我的顶点着色器。
#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);
}
这里是片段着色器。
#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);
}
对于没有旋转物体能正常工作。 但对于旋转的模型照明旋转以及其中,当然,不应该是这样的。
其原因在于,法线不旋转。 我已经尝试过f_normal = model * normal;
但是,这适用于旋转和变换的法线。
所以,我怎么能旋转法线在顶点着色器之前,我把它们发送到片段着色器的照明? 什么是常见的做法?