@IliaNeverov

Почему при повороте камеры перемещается источник света?

Доброго времени суток! Я пытался сделать диффузное освещение и столкнулся с проблемой что когда позиция света по z больше или меньше 0 (чем дальше от нуля тем больше косяк) при повороте камеры позиция света магическим образом меняется
607aa3990516d792726106.png
поворот камеры практически равен нулю, позиция света по z равна -2.0f
607aa3d0ee114631171756.png
тут я чуть чуть повернул камеру и свет переместился

Код шейдеров:
//  атрибуты
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);
}

Скажите пожалуйста из за чего это происходит и как исправить?
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы