注意:这是几年前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;
如果代码不足以诊断问题,我将发布更多内容。我试图将其保持在我认为可能是问题所在的位置。