Необходимо уменьшить значения RGB для рассеянного света (см. glLight
).Например:
glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 1])
glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 0.8, 0.8, 1])
Окружающий свет применяется ко всем поверхностям независимо от положения или направления света.Рассеянный свет зависит от положения, соответственно направления света и вектора нормали (glNormal
) поверхности.
Цвет света умножается на текущий цвет (из-за glEnable(GL_COLOR_MATERIAL)
) и окружающий, рассеянный и зеркальный свет суммируются.
Стандартная модель освещения OpenGL Blinn-Phong рассчитывается следующим образом:
Ka ... ambient material
Kd ... difusse material
Ks ... specular material
La ... ambient light
Ld ... diffuse light
Ls ... specular light
sh ... shininess
N ... norlmal vector
L ... light vector (from the vertex position to the light)
V ... view vector (from the vertex position to the eye)
Id = max(dot(N, L), 0.0);
H = normalize(V + L);
NdotH = max(dot(N, H), 0.0);
Is = pow(NdotH, sh);
fs = Ka*La + Id*Kd*Ld + Is*Ks*Ls;