Чтобы сделать темную сторону объекта темной, вам нужно 3 вещи:
нормальный твой фрагмент
-положение вашего фрагмента
-положение вашего света
-интенсивность света после затухания на вашем фрагменте
Общая идея вычисления cos () состоит в том, что если cos> 0 означает, что свет попадает на фронт фрагмента, но если он отрицательный, это означает, что -lightDir показывает противоположное направление нормали, что означает lightDir на самом деле ударяет фрагмент со спины.
in vec3 fragPos;
in vec3 fragNormal;
uniform vec3 lightPos
vec3 lightIntensity;
vec3 lightShadowCalc(vec3 fragPos, vec3 fragNormal, vec3 lightPos, vec3 lightIntensity)
{
vec3 lightDir = normalize(fragPos - lightPos);
vec3 newIntensity = lightIntensity * cos(fragNormal, -lightDir)
newIntensity = max(vec3(0), newIntensity);
return newIntensity;
}
это должно быть что-то вроде той надежды, что это поможет.