Затухание не применяется правильно
Я не могу понять, правильно ли применяется ослабление света или нет.
Кажется, что это не потому, что блеск стальной рамы для куба, расположенного на (-500, 100, 100)
(слева) слишком много выделено - я думаю, должно быть меньше, учитывая, что положение света (белый куб) (100.0, 100.0f, 100.0f)
,
Я использую эту формулу, чтобы получить затухание
1.0 / (constant + linear * distance + quadratic * (distance^2))
Фрагмент шейдера:
#version 450 core
struct Material {
sampler2D diffuse;
sampler2D specular;
float shininess;
};
struct Light {
vec3 position;
vec3 ambient;
vec3 diffuse;
vec3 specular;
float constant;
float linear;
float quadratic;
};
uniform vec3 cameraPosition;
uniform Material material;
uniform Light light;
in vec3 vNormal;
in vec2 vTexCoord;
in vec4 fragPosition;
out vec4 color;
void main() {
vec3 norm = vNormal;
vec3 lightDir = normalize(light.position - vec3(fragPosition.xyz));
vec3 viewDir = normalize(cameraPosition - vec3(fragPosition.xyz));
vec3 reflectDir = reflect(-lightDir, norm);
vec3 ambient = light.ambient * vec3(texture(material.diffuse, vTexCoord));
vec3 diffuse = light.diffuse * max(dot(norm, lightDir), 0.0) * vec3(texture(material.diffuse, vTexCoord));
vec3 specular = light.specular * pow(max(dot(viewDir, reflectDir), 0.0f), material.shininess) * vec3(texture(material.specular, vTexCoord));
float d = length(lightDir);
float attenuation = 1.0f / (light.constant + light.linear * d + light.quadratic * (d * d));
ambient *= attenuation;
diffuse *= attenuation;
specular *= attenuation;
color = vec4(ambient + diffuse + specular, 1.0f);
}
И передать следующие значения в программу
glUniform1f(lightConstantLoc, 1.0);
glUniform1f(lightLinearLoc, 0.1);
glUniform1f(lightQuadraticLoc, 0.01);
Также те же позиции, но изменили угол обзора
Так что там не так? Мои расчеты неверны? Что там происходит?