Параллельный источник

This commit is contained in:
2022-12-20 16:02:31 +03:00
parent 7793d7c05c
commit ac1d6be8c4
4 changed files with 103 additions and 0 deletions

View File

@@ -23,6 +23,12 @@ layout(std140, binding = 2) uniform Light
int count;
} light_f;
layout(std140, binding = 3) uniform Sun
{
vec3 direction;
vec3 color;
} sun;
uniform sampler2D gPosition;
uniform sampler2D gNormal;
uniform sampler2D gDiffuseP;
@@ -54,6 +60,23 @@ void main()
// Фоновая освещенность
color = vec4(ka, 1);
// Расчет солнца, если его цвет не черный
if (length(sun.color) > 0)
{
// Данные об источнике относительно фрагмента
L_vertex = normalize(-sun.direction);
// Диффузная составляющая
diffuse = max(dot(L_vertex, N), 0.0); // скалярное произведение с отсеканием значений < 0
// Вектор половины пути
H = normalize(L_vertex + Cam_vertex);
// Зеркальная составляющая
specular = pow(max(dot(H, N), 0.0), p*4); // скалярное произведение с отсеканием значений < 0 в степени p
// Результирующий цвет с учетом солнца
color += vec4(sun.color*kd*diffuse, 1)
+ vec4(sun.color*ks*specular, 1);
}
// Цикл по источникам света
int i;
for (i = 0; i < light_f.count; i++)