【问题标题】:OpenGL how to render backgroundOpenGL如何渲染背景
【发布时间】:2015-05-02 15:05:48
【问题描述】:

您好,我正在做作业,但不知道如何渲染背景。 我已经绘制了三角形,所有东西都可以渲染到屏幕上,但它总是成为前景并挡住了其他所有东西。

这是我渲染背景的代码。

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;
}

【问题讨论】:

    标签: opengl background render


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-09
      • 2011-05-02
      • 2023-03-23
      • 2015-10-25
      • 1970-01-01
      • 2020-08-20
      相关资源
      最近更新 更多