【问题标题】:Depth Buffer seems to not work - OpenGL Shader深度缓冲区似乎不起作用 - OpenGL 着色器
【发布时间】:2016-11-03 20:08:14
【问题描述】:

我将 openGL 与 GLFW 和 GLEW 一起使用。我正在使用着色器渲染所有内容,但深度缓冲区似乎不起作用。 我用于 3D 渲染的着色器是:

顶点着色器

#version 410\n
layout(location = 0) in vec3 vertex_position;
layout(location = 1) in vec2 vt
uniform mat4 view, proj, model;
out vec2 texture_coordinates;
void main() {
    texture_coordinates = vt;
    gl_Position = proj * view * model* vec4(vertex_position, 1.0);
};

片段着色器

#version 410\n
in vec2 texture_coordinates;
uniform sampler2D basic_texture;
out vec4 frag_colour;
void main() {
    vec4 texel = texture(basic_texture, vec2(texture_coordinates.x, 1 - texture_coordinates.y));
    frag_colour = texel;
};

我还启用了深度缓冲区和剔除面

glEnable(GL_DEPTH_BUFFER);
glDepthFunc(GL_NEVER);

glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);

这就是它的样子:

【问题讨论】:

    标签: c++ opengl shader glfw depth-buffer


    【解决方案1】:

    您没有启用深度测试。将glEnable(GL_DEPTH_BUFFER); 更改为glEnable(GL_DEPTH_TEST); 可以使用glGetError() 检测到此错误。

    【讨论】:

    • @LuizAugustoWendt:另外,您使用了glDepthFunc(GL_NEVER),这意味着深度测试将永远不会通过。所以所有的碎片都应该被剔除。屏幕上出现某些内容的唯一原因是您启用了错误的内容。
    • 是的,我从来没有只是为了测试深度测试是否有效:~
    【解决方案2】:

    就像 SurvivalMachine 说的,将GL_DEPTH_BUFFER 更改为GL_DEPTH_TEST。还要确保在你的主循环中,在任何绘图命令之前调用glClear(GL_DEPTH_BUFFER_BIT)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多