Смягчение углов направленного источника

This commit is contained in:
parent 1a74ce4d41
commit 7793d7c05c
1 changed files with 9 additions and 1 deletions

View File

@ -49,7 +49,7 @@ void main()
float L_distance; // Расстояние от поверхности до источника float L_distance; // Расстояние от поверхности до источника
float attenuation; // Коэф. угасания float attenuation; // Коэф. угасания
float acosA; // Косинус между вектором от поверхности к источнику и обратным направлением источника float acosA; // Косинус между вектором от поверхности к источнику и обратным направлением источника
float intensity; // Интенсивность для прожектора
// Фоновая освещенность // Фоновая освещенность
color = vec4(ka, 1); color = vec4(ka, 1);
@ -85,6 +85,14 @@ void main()
// Угасание с учетом расстояния // Угасание с учетом расстояния
attenuation = 1 / (1 + light_f.data[i].attenuation[1] * L_distance + light_f.data[i].attenuation[2] * L_distance * L_distance); attenuation = 1 / (1 + light_f.data[i].attenuation[1] * L_distance + light_f.data[i].attenuation[2] * L_distance * L_distance);
// Если источник - прожектор, то добавим смягчение
if (light_f.data[i].direction_angle.a < 180)
{
intensity = clamp((light_f.data[i].direction_angle.a - acosA) / 5, 0.0, 1.0);
diffuse *= intensity;
specular *= intensity;
}
color += vec4(light_f.data[i].color*kd*diffuse * attenuation, 1) color += vec4(light_f.data[i].color*kd*diffuse * attenuation, 1)
+ vec4(light_f.data[i].color*ks*specular * attenuation, 1); + vec4(light_f.data[i].color*ks*specular * attenuation, 1);
} }