OpenGL如何渲染背景

OpenGL how to render background

嗨,我正在做作业,不知道如何渲染背景。 我画了三角形,所有东西都可以正常显示在屏幕上,但它总是成为前景并挡住了其他所有东西。

这是我渲染背景的代码。

void render(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(bgShaderID);
    glBindVertexArray(bgArrayID);
    glDrawArrays(GL_TRIANGLES, 0, 6);
    glBindVertexArray(0);

    // draw everything else

    glutSwapBuffers(); 
    glFlush();

} 

在我的顶点着色器中,我有以下内容:

in vec3 a_vertex;
in vec3 a_colour;

out vec3 fragmentColor;

void main(){    

    gl_Position =  vec4(a_vertex.xy, 0.0 ,1);
    fragmentColor = a_colour;
}

您似乎启用了 GL_DEPTH_TEST。我不知道您使用什么投影矩阵和 z 值来绘制前景对象,但是

gl_Position =  vec4(a_vertex.xy, 0.0 ,1);

正在将背景的 clip space z 设置为 0。假设是透视投影,这非常接近前平面。假设一些 prthographic 投影,这仍然在深度范围的中间。

您当然可以尝试设置 z=1.0 以将其设置为着色器中的远平面。但是,由于您先绘制背景,因此最好在绘制背景期间暂时禁用 GL_DEPTH_TEST(或通过 glDepthMask(GL_FALSE) 禁用深度写入)。