Как использовать тестирование глубины при рендеринге в внеэкранный буфер, затем на текстуру - PullRequest
8 голосов
/ 22 апреля 2011

Я рендерил свою сцену в текстуру.Это прекрасно работает, за исключением того, что не работает глубинное тестирование.Как включить проверку глубины при рендеринге за пределами текстуры?Я использую класс FrameBuffer http://www.opengl.org/news/comments/framebuffer_object_fbo_c_class_available_with_example_application/

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

1 Ответ

12 голосов
/ 22 апреля 2011

Вам необходимо прикрепить буфер визуализации или текстуру к GL_DEPTH_ATTACHMENT в дополнение к цветному вложению. Вот хороший учебник, с которого можно начать:

http://www.songho.ca/opengl/gl_fbo.html

...