如何在渲染全屏四边形时在片段着色器中获取查看方向

How to get the Viewing Direction in the fragment shader while rendering a Fullscreen Quad

我必须分两步渲染一个场景。首先,我渲染到帧缓冲区对象中,然后在下一步中重复使用 FBO 的纹理。我在像这样的全屏四边形上渲染纹理,并附加了着色器:

glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
   glLoadIdentity();
   gluLookAt(0.0,0.0,0.0, 0.0,0.0,-10.0, 0.0,1.0,0.0);

   glMatrixMode(GL_PROJECTION);
   glPushMatrix();
   glLoadIdentity();
   glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);

   glBegin(GL_QUADS);
        glTexCoord2f(0.0,0.0);
        glVertex3f(-1.0,-1.0,0.0);
        glTexCoord2f(1.0,0.0);
        glVertex3f(1.0,-1.0,0.0);
        glTexCoord2f(1.0,1.0);
        glVertex3f(1.0,1.0,0.0);
        glTexCoord2f(0.0,1.0);
        glVertex3f(-1.0,1.0,0.0);
   glEnd();

   glMatrixMode(GL_PROJECTION);
   glPopMatrix();
   glMatrixMode(GL_MODELVIEW);
   glPopMatrix();

在附加的片段着色器中,我需要在 Eye Space 坐标中查看旧场景的实际片段的方向。我的第一个想法是这样的:

vec2 uv = gl_TexCoord[0].st;
vec3 viewDirEye = normalize(vec3(uv.x*2.0-1.0, (uv.y)*2.0-1.0, -1.0));

但是好像不行,不知道为什么。如果有人能在这里帮助我,那就太好了。

您的公式确实从 归一化设备坐标 中的纹理坐标设置了一个方向向量,但在 眼睛 space[=17= 中没有].

您必须考虑投影矩阵(它将定义水平和垂直视野角度)。 您可以使用 inverse 投影矩阵转换为眼睛 space.