我正在尝试在OpenGL中创建一个深度贴图,由于某种原因,帧缓冲区不会写入纹理,我尝试了多种方法来修复它,但它似乎无法正常工作。
这是我做的:
这是帧缓冲和纹理的生成:
glGenFramebuffers(1, &_DepthMapFBO);
glBindFramebuffer(GL_FRAMEBUFFER, _DepthMapFBO);
glGenTextures(1, &_DepthMapTex);
glBindTexture(GL_TEXTURE_2D, _DepthMapTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, DEPTH_TEXTURE_WIDTH, DEPTH_TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, _DepthMapTex, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, _DepthMapTex, 0);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
(上面我尝试用glTexImage2D
替换glTexStorage2D
,我尝试将glFramebufferTexture
替换为glFramebufferTexture2D
,两者都没有效果
然后(之前有东西,但是他们找工作了,我查了一下)我渲染了帧缓冲,如下所示:
_DepthProgram.Use();
// Setting uniforms here
glViewport(0, 0, DEPTH_TEXTURE_WIDTH, DEPTH_TEXTURE_HEIGHT);
glBindFramebuffer(GL_FRAMEBUFFER, _DepthMapFBO);
glClear(GL_DEPTH_BUFFER_BIT);
// Rendering the scene here
glBindFramebuffer(GL_FRAMEBUFFER, 0);
这些是我使用的着色器:
(顶点)
#version 410 core
layout(location = 0) in vec3 Position;
uniform mat4 LightSpaceMatrix;
uniform mat4 Model;
void main()
{
gl_Position = LightSpaceMatrix * Model * vec4(Position, 1.0);
}
(片段)
#version 410 core
void main()
{
// gl_FragDepth = 0.0;
}
我尝试将纹理渲染到一个平面上,它完全是白色的(我检查过应该有其他值),正如您在片段着色器中看到的那样,我试图显式写入{{ 1}}但它没有改变纹理,它保持白色(1.0)。
我浏览了整个互联网并看了learnopengl.com并且每个人似乎和我一样,我错过了什么?
( 我仔细检查过,我正在将纹理渲染到平面上,我用另一个替换gl_FragDepth
并渲染纹理 )< / p>
如果我遗漏了一些信息,请告诉我。
编辑:顺便说一下,glBindTexture
我没有收到任何错误。