Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何在渲染到屏幕外缓冲区然后渲染到纹理时使用深度测试_Opengl_Graphics_Framebuffer_Depth Buffer - Fatal编程技术网

Opengl 如何在渲染到屏幕外缓冲区然后渲染到纹理时使用深度测试

Opengl 如何在渲染到屏幕外缓冲区然后渲染到纹理时使用深度测试,opengl,graphics,framebuffer,depth-buffer,Opengl,Graphics,Framebuffer,Depth Buffer,我正在将场景渲染为纹理。除了深度测试不起作用外,该方法工作正常。如果渲染到屏幕外纹理,如何启用深度测试?我正在使用帧缓冲区类 除了颜色附件之外,还需要将渲染缓冲区或纹理附加到GL\u DEPTH\u附件。以下是一个很好的入门教程: 在渲染之前,不要忘记清除深度缓冲区,否则会得到黑色图像。 glGetIntegerv(GL_DRAW_BUFFER, &drawBuffer); frameBuffer->Bind(); glDrawBuffer(GL_COLOR_ATTACHMENT0

我正在将场景渲染为纹理。除了深度测试不起作用外,该方法工作正常。如果渲染到屏幕外纹理,如何启用深度测试?我正在使用帧缓冲区类


除了颜色附件之外,还需要将渲染缓冲区或纹理附加到
GL\u DEPTH\u附件
。以下是一个很好的入门教程:


在渲染之前,不要忘记清除深度缓冲区,否则会得到黑色图像。
glGetIntegerv(GL_DRAW_BUFFER, &drawBuffer);
frameBuffer->Bind();
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
rAngle += 0.3f;
glUseProgram(0);
drawSpinningTeapot();
FramebufferObject::Disable();

glDrawBuffer(drawBuffer);
glViewport(0, 0, WINDOW_WIDTH,WINDOW_HEIGHT);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(g_program);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,tex1);
texSampler = glGetUniformLocation(g_program,"texture");
glUniform1f(texSampler, 0);
glActiveTexture(GL_TEXTURE0);
glBegin(GL_QUADS);
{
    glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.5f);
    glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.5f);
    glTexCoord2f(1, 1); glVertex3f( 1,  1, -0.5f);
    glTexCoord2f(0, 1); glVertex3f(-1,  1, -0.5f);
}
glEnd();
glDisable(GL_TEXTURE_2D);