Доброго времени суток! Я пытался сделать диффузное освещение и столкнулся с проблемой что когда позиция света по z больше или меньше 0 (чем дальше от нуля тем больше косяк) при повороте камеры позиция света магическим образом меняется
поворот камеры практически равен нулю, позиция света по z равна -2.0f
тут я чуть чуть повернул камеру и свет переместился
Код шейдеров:
// атрибуты
layout (location = 0) in vec3 position;
layout (location = 0) in vec2 uv;
layout (location = 2) in vec3 normals;
// выход на вход в фрагментный шейдер
//in vec2 uv;
out vec2 pass_uv;
out vec3 FragPos;
out vec3 ToLightVector;
out vec3 normal;
//юниформы
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 projectionMatrix;
uniform vec3 LightPos;
uniform vec3 ModelColor;
//нужное
vec3 lightPos;
void main() {
normal = normals;
vec4 WorldPosition = ModelMatrix * vec4(position, 1.0f);
gl_Position = projectionMatrix * ViewMatrix * WorldPosition;
lightPos =(vec4(LightPos , 1.0f) * ViewMatrix).xyz;
ToLightVector= lightPos - WorldPosition.xyz;
pass_uv = uv;
}
фрагментный:
#version 330
// здесь версию тоже необходимо помечать
//вход-выход
out vec4 color;
in vec2 pass_uv;
in vec3 surfaceNormal;
in vec3 ToLightVector;
in vec3 normal;
//юниформы
uniform vec3 LightColor;
uniform vec3 ModelColor;
//нужное
float AmbientPower = 0.05f;
vec3 result;
vec3 diffuse;
vec3 Ambient;
float brightness;
void main() {
brightness = max(dot(normalize(normal), normalize(ToLightVector)),0.0f);
diffuse = brightness * LightColor;
Ambient =AmbientPower * LightColor;
result = (Ambient + diffuse) * ModelColor;
color = vec4(result, 1.0f);
}
Скажите пожалуйста из за чего это происходит и как исправить?