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)
禁用深度写入)。
嗨,我正在做作业,不知道如何渲染背景。 我画了三角形,所有东西都可以正常显示在屏幕上,但它总是成为前景并挡住了其他所有东西。
这是我渲染背景的代码。
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)
禁用深度写入)。