我在我的 opengl 4.3 着色器中更改镜面反射功率分量时遇到问题。当我使用介于 0-10 之间的光泽度值时,高光效果很好,但是,随着该值的增加以使材质更发光,光照强度会降低。这是我的代码:
//Direct Lighting
vec3 L = normalize(worldPos.xyz - lightPos.xyz);
vec3 D = normalize(lightDir.xyz);
float dist = length(-L);
float I = max(dot(N.xyz, -L), 0.0);
vec3 h = normalize(-L.xyz + E);
float specLighting = 0.0;
specLighting = pow(max(dot(N.xyz, h), 0.0),50.0);
fColor.xyz = vec3(specLighting);
因此,如果将 shininess 值增加到 50 左右,则根本没有光照。顺便说一句,在这段代码中,我只显示镜面反射来调试问题。
[编辑] 很抱歉解释中缺乏细节,我附上了一些将镜面反射值从 1 更改为 7 的结果的屏幕截图。如您所见,随着镜面高光尺寸的减小(这就是我想要的),灯光也会变暗(这不是我想要的)。大约 10 分钟后,它会完全变黑。
顺便说一句,我完全在像素/片段着色器中执行此操作。
我还添加了来自我的 directx 11 测试引擎的屏幕截图,使用完全相同的代码进行镜面光照,但光泽系数为 100。
直连 11: