Как обновить текстуру отражения объекта в скайбоксе, когда центральная точка камеры меняется?
Я следую этому уроку, чтобы создать скайбокс / кубическую карту с отображением окружения. У меня проблемы с разделом отражения. При расчете отражения учитывается текущее положение, нормаль и положение камеры / глаза, как в следующем фрагментном шейдере в руководстве:
#version 330 core
in vec3 Normal;
in vec3 Position;
out vec4 color;
uniform vec3 cameraPos;
uniform samplerCube skybox;
void main()
{
vec3 I = normalize(Position - cameraPos);
vec3 R = reflect(I, normalize(Normal));
color = texture(skybox, R);
}
а вот вершинный шейдер:
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
out vec3 Normal;
out vec3 Position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
Normal = mat3(transpose(inverse(model))) * normal;
Position = vec3(model * vec4(position, 1.0f));
}
Проблема в том, что если камера не перемещается (поэтому положение глаз остается неизменной), но центр отсчета камеры изменяется, то текстура объекта не изменяется. Это нежелательно. Например, когда вы стоите перед зеркалом и поворачиваете голову влево и вправо, вы ожидаете увидеть отражение в зеркале.
Как мне добиться этого эффекта (т.е. обновить текстуру отражения объекта при изменении центра камеры)?
РЕДАКТИРОВАТЬ: вот видео, которое показывает мою проблему: https://www.youtube.com/watch?v=Yk5akOYnjdc&feature=youtu.be