如何在渲染全屏四边形时在片段着色器中获取查看方向
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.
我必须分两步渲染一个场景。首先,我渲染到帧缓冲区对象中,然后在下一步中重复使用 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.