【发布时间】:2013-02-16 16:16:13
【问题描述】:
在我的 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。
Directx 11:
【问题讨论】:
-
你能提供截图吗?
-
@LightnessRacesinOrbit:这很好,因为他没有要求调试他的代码。他的问题在于对输出的期望,而不是代码。
-
这段代码是顶点着色器还是像素着色器?
-
@Nicol 我看不到问题。只有“我的代码有问题。”
标签: opengl graphics lighting specular