Смягчение углов направленного источника
This commit is contained in:
parent
1a74ce4d41
commit
7793d7c05c
|
@ -49,7 +49,7 @@ void main()
|
|||
float L_distance; // Расстояние от поверхности до источника
|
||||
float attenuation; // Коэф. угасания
|
||||
float acosA; // Косинус между вектором от поверхности к источнику и обратным направлением источника
|
||||
|
||||
float intensity; // Интенсивность для прожектора
|
||||
|
||||
// Фоновая освещенность
|
||||
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);
|
||||
|
||||
// Если источник - прожектор, то добавим смягчение
|
||||
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)
|
||||
+ vec4(light_f.data[i].color*ks*specular * attenuation, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue