我要完成的工作:在场景顶部绘制场景的深度图(以便靠近的物体更暗,更远的物体更亮)
问题:我似乎不明白如何将正确的纹理坐标从我的顶点着色器传递到我的片段着色器。
所以我创建了我的 FBO,以及深度贴图被绘制到的纹理……并不是说我完全确定我在做什么,但无论如何,它可以工作。我测试了使用固定功能管道绘制纹理,它看起来就像它应该的那样(即深度图)。
但是尝试在我的着色器中使用它是行不通的......
这是我的渲染方法中绑定纹理的部分:
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D, depthTextureId);
glUniform1i(depthMapUniform, 7);
glUseProgram(shaderProgram);
look(); //updates my viewing matrix
box.render(); //renders box VBO
所以...我认为这是对的?也许?不知道为什么纹理 7,这只是我正在检查的教程中的内容......
这是我的顶点着色器中的重要内容:
out vec4 ShadowCoord;
void main() {
gl_Position = PMatrix * (VMatrix * MMatrix) * gl_Vertex; //projection, view and model matrices
ShadowCoord = gl_MultiTexCoord0; //something I kept seeing in examples, was hoping it would work.
}
Aaand,片段着色器:
in vec4 ShadowCoord;
in vec3 Color; //passed from vertex shader, didn't include the code for it though. Just the vertex color.
out vec4 FragColor;
void main(
FragColor = vec4(texture2D(ShadowMap,shadowCoord.st).x * vec3(Color), 1.0);
现在的问题是,片段着色器接收到的纹理坐标始终是 (0,0),即左下角。我尝试将其更改为 ShadowCoord = gl_MultiTexCoord7,因为我认为这可能与我将纹理放在插槽号 7 中有关...但是,唉,问题仍然存在。当 (0, 0) 的颜色发生变化时,整个场景的颜色也会发生变化,而不是仅针对适当的像素/片段发生颜色变化。
这就是我希望获得的一些见解......如何传递正确的坐标(我希望纹理的角落与我的屏幕角落的坐标相同)。是的,这是一个初学者的问题......但我一直在看橙皮书,问题在于它在 GLSL 方面很棒,但是在示例中严重缺乏 OpenGL 方面我真的可以用...