Смягчение углов направленного источника
This commit is contained in:
parent
1a74ce4d41
commit
7793d7c05c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue