我想实现Phong光照。 在一些教程镜面照明被添加到环境和漫射照明,然后总照明由纹理颜色相乘。 我还看到,其中在加入的环境和漫灯带纹理颜色乘以后单独加入镜面照明的教程。
下面是本两个选项,并用屏幕截图的片段着色器。
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
in vec3 normals;
in vec3 fragPosition;
//texture samplers
uniform sampler2D texture1;
uniform vec3 ambientLight;
uniform vec3 lightPosition;
uniform vec3 lightColor;
uniform vec3 viewPosition;
uniform float specularStrength;
uniform float shineDamp;
void main()
{
vec3 norm = normalize(normals);
vec3 lightDir = normalize(lightPosition - fragPosition);
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * lightColor;
vec3 viewDir = normalize(viewPosition - fragPosition);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), shineDamp);
vec3 specular = specularStrength * spec * lightColor;
// 1. Specular is added to ambient and diffuse lights and this result is multiplied with texture
//FragColor = vec4((ambientLight + diffuse + specular), 1.0f) * texture(texture1, TexCoord);
// 2. Specular is added separately to result of multiplication of ambient + diffuse and texture
//FragColor = vec4((ambientLight + diffuse), 1.0f) * texture(texture1, TexCoord) + vec4(specular, 1.0);
}
选项1镜面被添加到环境和漫
选项2镜面单独加入。
在这些截图shineDump值为32.0f和specularStrength是0.5F。
哪一个看起来是正确的? 在我看来,相比于第一一个第二选择看起来是正确的,但有很多教程使用公式从第一选项。