我必须分两步渲染一个场景。首先,我渲染到帧缓冲对象中,然后重复使用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 Coords中查看旧场景的实际片段。我的第一个想法是这样的:
vec2 uv = gl_TexCoord[0].st;
vec3 viewDirEye = normalize(vec3(uv.x*2.0-1.0, (uv.y)*2.0-1.0, -1.0));
但似乎没有用,我也不知道为什么。如果有人可以帮助我,那就太好了。
答案 0 :(得分:1)
您的公式会根据规范化设备坐标中的纹理坐标设置方向矢量,但不会在眼睛空间中设置。
您必须考虑投影矩阵(这将定义视角的水平和垂直视野)。 您可以使用逆投影矩阵转换为眼睛空间。