simple light

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
precision highp float;
uniform float time;
uniform vec2 resolution;
varying vec3 fPosition;
varying vec3 fNormal;
void main()
{
//Параметры источника света для начала пусть будут тупо в коде
// Координаты источника света
vec3 lightPos = vec3 (10.0*sin(time*10.0), 20.0*cos(time*10.0), 0.0);
// Интенсивность свечения
float LightItensity = 10000.0;
// Для начала источник всенаправленный
//Далее вычисляется угол, под которым свет от источника падает на текущий пиксель:
// Вектор луча света, освещающего текущий пиксель
vec3 lightVec = normalize(fPosition - lightPos);
//Угол между нормалью
//(перпендикуляр к полигону, на котором находится пиксель)
// и вектором луча, который освещает этот пиксель
float lightNormalAngle = dot(lightVec, fNormal);
//Определим цвет фигуры
vec3 figColor = vec3(0.5, 0.4, 0.6);
LightItensity = LightItensity/pow(distance(fPosition, lightPos), 3.0);
gl_FragColor = vec4(figColor*lightNormalAngle*LightItensity, 1.0);
}