繁体   English   中英

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

[英]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();

在所附的“片段着色器”中,我需要查看“眼空间坐标”中旧场景实际片段的观看方向。 我的第一个想法是这样的:

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

但这似乎不起作用,我也不知道为什么。 如果有人可以在这里帮助我,那将是很棒的。

您的公式的确从规范化设备坐标中的纹理坐标设置了方向矢量,但未在眼睛空间中设置方向矢量。

您必须考虑投影矩阵(这将定义水平和垂直视场角)。 您可以使用投影矩阵将其转换为眼睛空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM