Opengl,将深度纹理绘制为正方形

Opengl,将深度纹理绘制为正方形,opengl,graphics,depth-buffer,Opengl,Graphics,Depth Buffer,这是我设置深度纹理的方式: glBindTexture(GL_TEXTURE_2D, gbuffer_tex[2]); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, int(screen_width), int(screen_height), 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, G

这是我设置深度纹理的方式:

glBindTexture(GL_TEXTURE_2D, gbuffer_tex[2]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, int(screen_width), int(screen_height), 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);

glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, gbuffer_tex[0], 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, gbuffer_tex[1], 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, gbuffer_tex[2], 0);
然后,在将场景绘制到帧缓冲区上时,激活帧缓冲区。一切正常。 如果我在gDebugger中运行该程序,深度纹理看起来还可以。但当我试图画它时,它只是黑色的。如果我绘制一个设置为颜色附件的纹理,它看起来很好。 只是深度纹理变成了黑色

我的片段着色器如下所示:

in VS_OUT { vec2 UV; } vs_in;
layout (binding = 3) uniform sampler2D depth_texture;
out vec4 fragColor;
void main()
{
  vec2 tex_coord = vec2(vs_in.UV.x, -vs_in.UV.y); 
  float texture_color = texture(depth_texture, tex_coord).r;
  fragColor = vec4(texture_color, texture_color, texture_color, 1.0);
}

当我将鼠标悬停在gDebugger中的深度纹理上时,值介于0.96和1.0之间。所以它应该是白色而不是黑色。

为什么要使用
比较\u REF\u和\u纹理
?如果要绘制原始数据,应将比较模式设置为
NONE
,不?更重要的是,考虑到在GLSL着色器中使用的是普通的
sampler2D
,这实际上不起任何作用。如果要启用深度比较,需要使用
sampler2DShadow
。如果你想在深度纹理中看到黑色以外的东西而不做任何复杂的事情,我建议你将采样值平方。我不想启用深度比较,只需在正方形上绘制深度纹理即可。如果我将这些值平方,这无关紧要,因为它们都是零。我已经检查了gdebugger中的值,所有值都是零。然后不要使用
比较\u REF\u到\u TEXTURE
。你认为
COMPARE
有什么建议?