我试图做到:我的绘画场景的深度地图上我的场景的顶部(使物体越接近暗,渐行渐远更轻)GLSL质地传递从顶点着色器坐标
问题:我似乎无法理解如何从我的顶点着色器向我的片段着色器传递正确的纹理坐标。
因此,我创建了我的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方面的例子严重缺乏我真的可以使用...