#opengl #glsl #phong #specular
#opengl #glsl #фонг #зеркальная
Вопрос:
Я реализую зеркальную подсветку в OpenGL как часть модели phong. В настоящее время подсветка перемещается при перемещении моей камеры, а не становится ярче или тусклее, что, очевидно, не является ожидаемым результатом. Я следовал руководству по learnopengl.com
#version 330 core
in vec3 outColor;
in vec3 outNormal;
in vec3 fragPos;
out vec4 FragColor;
uniform vec3 lightPos = vec3(-2.0f, 0.0f, 0.0f);
uniform vec3 lightColor = vec3(1.0, 0.5f, 1.0f);
uniform vec3 viewPos;
float ambientStrength = 0.2;
float specularStrength = 0.5;
uniform sampler2D tex;
void main()
{
vec3 normal = normalize(outNormal);
vec3 lightDir = normalize(lightPos - fragPos);
//ambient lighitng
vec3 ambient = ambientStrength * lightColor;
//diffuse lighting
float diffuseFactor = max(dot(normal, lightDir), 0.0);
vec3 diffuse = diffuseFactor * lightColor;
//specular lighting
vec3 viewDir = normalize(viewPos - fragPos);
vec3 reflectDir = reflect(-lightDir, normal);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 128);
vec3 specular = specularStrength * spec * lightColor;
vec3 result = (ambient diffuse specular) * outColor;
FragColor = vec4(result, 1.0f);// texture(tex, outTexCoords);// vec4(0.0f, 1.0f, 0.0f, 1.0f);
}
Комментарии:
1. Хм, почему это не ожидаемый результат?
2. Разве она не должна становиться ярче или тусклее, а не двигаться?
3. @NicolBolas Разве она не должна становиться ярче или тусклее, а не двигаться?
4. Что ж, если центр подсветки перемещается, то на поверхности есть места, где она становится ярче или темнее. Просто возьмите любой реальный объект с блестящей поверхностью и двигайтесь вокруг него. Вы увидите, что блики будут перемещаться. Это то, что пытается имитировать модель подсветки Phong.