Как обновить текстуру отражения объекта в скайбоксе, когда центральная точка камеры меняется?

Я следую этому уроку, чтобы создать скайбокс / кубическую карту с отображением окружения. У меня проблемы с разделом отражения. При расчете отражения учитывается текущее положение, нормаль и положение камеры / глаза, как в следующем фрагментном шейдере в руководстве:

#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

0 ответов

Другие вопросы по тегам