Я пытаюсь реализовать освещение в моем вершинном шейдере, однако, похоже, что цвета вершины не сильно меняются.
#version 330
структурированный макет для атрибутов вершин
layout (location = 0 ) in vec3 vertex_position;
layout (location = 1 ) in vec3 vertex_color;
layout (location = 2 ) in vec3 vertex_normal;
/// однородные переменные
uniform mat4 ModelMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrix;
uniform mat4 NormalMatrix;
uniform vec3 AmbientFinal;
/// struct для обработки информации о свете и информации о материале
struct lightInfo
{
vec3 LightPosition;
vec3 ambientLightInt;
vec3 diffuseLightInt;
vec3 SpecularLightInt;
};
uniform lightInfo lights;
struct MaterialInfo
{
vec3 ka;
vec3 kd;
vec3 ks;
float Shineness;
};
uniform MaterialInfo material;
out vec3 colour;
расчёты освещения в основном
void main()
{
///light position in eye coordinates
vec4 lighteye = ViewMatrix * ModelMatrix * vec4(lights.LightPosition, 1.0f);
vec3 tnorm = normalize(mat3(NormalMatrix) * vertex_normal);
/// Положение в глазных яблоках
vec4 eyeCoords = ViewMatrix*ModelMatrix* vec4(vertex_position, 1.f);
vec3 s = normalize(vec3(lighteye - eyeCoords));
vec3 v = normalize(-eyeCoords.xyz);
vec3 r = reflect(-s, tnorm);
vec3 ambient = material.ka * lights.ambientLightInt;
float sdotn = max(dot(s, tnorm),0.0);
vec3 diffuse = lights.diffuseLightInt * material.kd * sdotn;
vec3 spec = vec3(0.0);
if(sdotn > 0)
spec = lights.SpecularLightInt * material.ks * pow (max(dot(r,v), 0.0), material.Shineness);
gl_Position = ProjectionMatrix *ViewMatrix*ModelMatrix* vec4(vertex_position, 1.f);
colour = (diffuse + ambient + spec) + vertex_color;
}
производимая мощность
выход без учета освещения
Это переменные
///lights and Mats
lightInfo lights;
lights.LightPosition = glm::vec3(0.f, 0.f, 2.f);
lights.ambientLightInt = glm::vec3(0.1f, 0.1f, 0.1f);
lights.diffuseLightInt = glm::vec3(1.f);
lights.SpecularLightInt = glm::vec3(1.f);
MaterialInfo mat;
mat.ka = glm::vec3(0.1f, 0.1f, 0.1f);
mat.kd = glm::vec3(0.5f, 0.5f, 0.5f);
mat.ks = glm::vec3(0.5f, 0.5f, 0.5f);
mat.Shineness = 30.f;
Возможно мое пониманиеосвещение не так?Я не понимаю, почему на 3D-объект не влияют расчеты освещения