这个问题是由于Phong模型的过度强调了高光的反射而导致的。通过调整设置缓解这个问题。
一种简单的解决方法是使用Blinn-Phong模型。Blinn-Phong模型对于高光反射的描述采用了更加均匀分布的方法,并且通常不会产生此类异常效果。在OpenGL中实现Blinn-Phong着色器时,只需要修改片段着色器中的高光反射计算部分,如下所示:
vec3 halfwayDir = normalize(lightDir + viewDir);
float specularBlinn = pow(max(dot(normal, halfwayDir), 0.0), shininess);
vec3 specular = specularBlinn * lightColor;
通过使用Blinn-Phong模型,您应该能够避免这种光泽环问题。