diff --git a/shaders/lighting.frag b/shaders/lighting.frag index 05ca466..d69ed60 100644 --- a/shaders/lighting.frag +++ b/shaders/lighting.frag @@ -53,7 +53,7 @@ void main() float specular; // Зеркальная составляющая float attenuation; // Угасание с учетом расстояния float acosA; // Косинус между вектором от поверхности к источнику и обратным направлением источника - + float intensity; // Интенсивность для прожектора // Фоновая освещенность color = vec4(ka, 1); @@ -88,6 +88,14 @@ void main() // Угасание с учетом расстояния attenuation = 1 / (1 + light_f.data[i].K[0] * L_distance + light_f.data[i].K[1] * L_distance * L_distance); + // Если источник - прожектор, то добавим смягчение + if (light_f.data[i].angle < 180) + { + intensity = clamp((light_f.data[i].angle - 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); }