Не думаю, что моя сцена освещена правильно?OpenGL - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь реализовать освещение в моем вершинном шейдере, однако, похоже, что цвета вершины не сильно меняются.

#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;
}        

производимая мощность

output from running program

выход без учета освещения

output without lighting

Это переменные

///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-объект не влияют расчеты освещения

Hard coded the term

...