Note: This is a copy pasted question from Stack Exchange from a couple years ago but it was never solved and im having literally the exact same problem and our code is pretty much identical because I think we followed the same tutorial. I feel like it is a problem with the matrices being used, but im not sure which one or how to fix it. https://gamedev.stackexchange.com/questions/138306/opengl-water-reflection-seems-to-follow-camera-yaw-and-pitch
I'm attempting to add reflective water to my procedural terrain. I've got it to a point which seems like it's reflecting however when I move the camera left/right/up/down the reflections move with it.
I believe the problem has something to do with the way I convert from world space to clip space for the projective texture mapping.
Here is a gif of what is happening. http://i.imgur.com/PDta5Qu.gifv
Vertex Shader
#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;
}
Fragment Shader
#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;
}
I'm using this code to move the camera under the water's surface to get the reflection
float distance = 2 * (m_camera->GetPosition().y - m_water->GetHeight());
m_camera->m_cameraPosition.y -= distance;
m_camera->m_cameraPitch = -m_camera->m_cameraPitch;
If this is insufficient code to diagnose the problem, I'll post more. I tried to keep it to what I thought could be the problem.
Aucun commentaire:
Enregistrer un commentaire