Hi all.
I encountered a weird bug when computing screen space reflection vector for my SSR feature.
Here is a plane facing toward my camera. Color indicates the reflection vector in screen space. Everything works fine currently.

When I put my camera closer to the plane, suddenly the reflection vector in the center of the screen will get "mirrored", as shown by the following picture

Here is my code in GLSL.
vec3 csDir=normalize(reflect(csPos,csNormal));
vec4 psPos = ProjectionMatrix * vec4(csPos, 1.0f);
vec3 ndcsPos = psPos.xyz / psPos.w;
vec3 ssPos = 0.5f * ndcsPos + 0.5f;
csDir +=csPos;
vec4 psDir = ProjectionMatrix * vec4(csDir, 1.0);
vec3 ndcEndPoint = psDir.xyz / psDir.w;
vec3 ssEndPoint = 0.5f * ndcEndPoint + 0.5f;
vec3 ssDir=normalize(ssEndPoint-ssPos);
Any help would be appreciated.