我正在GLSL中进行2D照明,但是似乎有一个我无法修复的错误。
当场景中有多个灯光时,我的灯光会产生这些奇怪的“图层”,这些图层会重叠。
我的着色器代码非常简单:
uniform vec2 lightLocation[6];
uniform vec3 lightColor[6];
uniform float lightRadius[6];
uniform sampler2D texture0;
void main() {
float distance;
float attenuation;
vec4 color;
vec4 finalColor = vec4(0, 0, 0, 1);
for (int i = 0; i < 6; ++i) {
distance = length(lightLocation[i] - gl_FragCoord.xy);
attenuation = 4.0 / (1.0 + 10.0*(distance / lightRadius[i]));
color = vec4(attenuation, attenuation, attenuation, pow(attenuation, 3)) * vec4(lightColor[i], 1);
finalColor = finalColor + color;
}
gl_FragColor = finalColor * texture(texture0, gl_TexCoord[0].st);
}
谁知道是什么引起了这个问题?
最佳答案
原来问题不在着色器中(感谢Zouch使用Shadertoy找出问题)。
我不小心画了两次灯,而不是一次。