GLSL OpenGL每增加一盏灯都会变得更暗
我有一个场景,一盏灯就可以完美地工作。然而,当我再添加两个时,每一个新的添加都会变暗,直到几乎看不见为止。衰减系数是错误的还是其他原因GLSL OpenGL每增加一盏灯都会变得更暗,opengl,glsl,opengl-3,lighting,Opengl,Glsl,Opengl 3,Lighting,我有一个场景,一盏灯就可以完美地工作。然而,当我再添加两个时,每一个新的添加都会变暗,直到几乎看不见为止。衰减系数是错误的还是其他原因 int i = 0; for(i=0; i<3; i++){ if (lights[i].enabled == 1.0){ //Lighting Attributes vec4 light_position = vec4(lights[i].position,1.0);
int i = 0;
for(i=0; i<3; i++){
if (lights[i].enabled == 1.0){
//Lighting Attributes
vec4 light_position = vec4(lights[i].position,1.0);
vec4 light_ambient = lights[i].ambient;
vec4 light_diffuse = lights[i].diffuse;
vec4 light_specular = lights[i].specular;
float light_att_constant = 1.0;
float light_att_linear = 0.0;
float light_att_quadratic = 0.01;
float light_shine = 1.0;
//Object Attributes
vec3 obj_position = n_vertex;
vec3 obj_normals = n_normal;
vec4 obj_color = n_colors;
//Calc Distance
vec3 distance_LO = (obj_position - light_position.xyz);
float distance = length(distance_LO);
//Normalize some attributes
vec3 n_light_position = normalize(distance_LO);
//Apply ambience
finalColor *= light_ambient * global_ambient;
//Calc Cosine of Normal and Light
float NdotL = max(dot(obj_normals, n_light_position),0.0);
//Calc Eye Vector (negated position)
vec3 eye_view = -obj_position;
//Check if Surface is facing the Light
if (NdotL > 0){
//Apply lambertian reflection
finalColor += obj_color * light_diffuse * NdotL;
//Calc the half-vector
vec3 half_vector = normalize(light_position.xyz + eye_view);
//Calc angle between normal and half-vector
//See the engine notebook for a diagram.
float NdotHV = max(dot(obj_normals, half_vector), 0.0);
//Apply Specularity
finalColor += obj_color * light_specular * pow(NdotHV, light_shine);
}
//Calc Attenuation
float attenuation = light_att_constant / ((1 + light_att_linear * distance) *
1 + light_att_quadratic * distance * distance);
//Apply Attenuation
finalColor = finalColor * attenuation;
}
}
color = vec4(finalColor.rgb, 1.0);
你的色彩倍增。这意味着阴影将变得更暗 如果你在某个相对亮度的1/2周围有一个区域,那么你将它乘以该灯光的1/2贡献,你将得到1/4 如果你有Photoshop或Gimp,你可以自己用倍增混合模式测试,三个圆圈,纯红色,纯绿色和纯蓝色,然后重叠。比较Photoshop中的乘法和线性减淡加号操作 这里有一个例子
你肯定会想要一种加法效果,也就是说,把这些术语加在一起。你可以将颜色乘以。这意味着阴影将变得更暗 如果你在某个相对亮度的1/2周围有一个区域,那么你将它乘以该灯光的1/2贡献,你将得到1/4 如果你有Photoshop或Gimp,你可以自己用倍增混合模式测试,三个圆圈,纯红色,纯绿色和纯蓝色,然后重叠。比较Photoshop中的乘法和线性减淡加号操作 这里有一个例子 你肯定会想要一个加法效果,也就是说,把术语加在一起