OpenGL Water Reflection движется некорректно с камерой - PullRequest
0 голосов
/ 30 мая 2019

Примечание. Это вопрос, вставленный в копию Stack Exchange пару лет назад, но он так и не был решен, и у меня возникла точно такая же проблема, и наш код практически идентичен, так как я думаю, что мы следовали одному и тому же руководству,Я чувствую, что это проблема с используемыми матрицами, но я не уверен, какой из них или как это исправить.
https://gamedev.stackexchange.com/questions/138306/opengl-water-reflection-seems-to-follow-camera-yaw-and-pitch

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

Я считаю, что проблема как-то связана с тем, как яконвертировать из мирового пространства в пространство клипов для проекционного наложения текстур.

Вот изображение того, что происходит.https://imgur.com/rtUJt79

Вершинный шейдер

#version 400
in vec4 vPosition;
out vec4 clipSpace;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main ()
{
  clipSpace = projection * view * model * vec4(vPosition.x, 0.0, vPosition.z, 1.0);
  gl_Position = clipSpace;
}

Фрагментный шейдер

#version 400
in vec4 clipSpace;
out vec4 frag_colour;
uniform sampler2D reflectionTexture;

void main ()
{
    vec2 ndc = (clipSpace.xy / clipSpace.z) / 2.0 + 0.5;
    vec2 reflectTexCoords = vec2(ndc.x, -ndc.y);
    vec4 reflectColour = texture(reflectionTexture, reflectTexCoords);

    frag_colour = reflectColour;
}

Я использую этот код для перемещения камеры под поверхностью воды, чтобы получить отражение

float distance = 2 * (m_camera->GetPosition().y - m_water->GetHeight());
m_camera->m_cameraPosition.y -= distance;
m_camera->m_cameraPitch = -m_camera->m_cameraPitch;

Если этого кода недостаточно для диагностики проблемы, я выложу больше.Я пытался сохранить это до того, что, как я думал, могло быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...