Не работает шейдер освещения
Пытаюсь создать 3D движок на SFML, также используя OpenGL. Решил попробовать написать освещение по моделе Фонга, используя шейдеры, но столкнулся с проблемой, что код просто затемняет модели и все..
Вершинный шейдер:
varying vec3 FragPos;
varying vec3 Normal;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
FragPos = gl_Position;
Normal = gl_Normal;
}
Фрагментный шейдер:
uniform vec3 cameraPosition;
varying vec3 FragPos;
varying vec3 Normal;
float phong(vec3 worldPos, vec3 cameraPos, vec3 lightPos, vec3 normal)
{
vec3 N = normalize(normal);
vec3 V = normalize(worldPos - cameraPos);
vec3 L = normalize(worldPos - lightPos);
vec3 R = reflect(L, N);
float ambient = 0.3;
float diffuse = max(dot(N, -L), 0) * 0.7;
float specular = pow(max(dot(-R, V), 0), 50.0) * 1.1;
return ambient + diffuse + specular;
}
void main()
{
vec4 res = phong(FragPos, cameraPosition, vec3(0.5, 0.5, 0.5), Normal) * gl_Color;
res.w = 1;
gl_FragColor = res;
}
Вот скриншоты, до применения шейдера:
Ответы (1 шт):
Автор решения: TrASH
→ Ссылка
Продебажив, я понял, что нормали всегда равнялись нулю. Я это исправил.
