2016-09-06 2 views
1

Я пытаюсь реализовать отложенный рендеринг в моем движке, но у меня возникают некоторые проблемы. Кажется, что в треугольниках есть какая-то статика.OpenGL Отложенная рендеринг статична?

Вот код рисования:

// GEOMETRY PASS 

    gbuffer->BindForWriting(); // glBind(GL_DRAW_FRAMEBUFFER, fbo); 
    window->Clear(); // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glEnable(GL_DEPTH_TEST); // Before it was glDisable(GL_DEPTH_TEST); (I was testing) 

    ... // Render all objects (they are rendering well when not using deferred rendering) 

    // LIGHTING PASS 

    glBindFramebuffer(GL_FRAMEBUFFER, 0); 
    window->Clear(); // Clear buffer again (same thing above) 

    gbuffer->BindForReading(); // glBind(GL_READ_FRAMEBUFFER, fbo); 

    GLsizei HalfWidth = (GLsizei)(window->GetSize().x/2.0f); 
    GLsizei HalfHeight = (GLsizei)(window->GetSize().y/2.0f); // Get half the size of the window 

    gbuffer->SetReadBuffer(GBUFFER_POSITION); // glReadBuffer(GL_COLOR_ATTACHMENT0); 
    glBlitFramebuffer(0, 0, window->GetSize().x, window->GetSize().y, 0, 0, HalfWidth, HalfHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR); 

    gbuffer->SetReadBuffer(GBUFFER_DIFFUSE); // glReadBuffer(GL_COLOR_ATTACHMENT1); 
    glBlitFramebuffer(0, 0, window->GetSize().x, window->GetSize().y, 0, HalfHeight, HalfWidth, window->GetSize().y, GL_COLOR_BUFFER_BIT, GL_LINEAR); 

    gbuffer->SetReadBuffer(GBUFFER_NORMAL); // glReadBuffer(GL_COLOR_ATTACHMENT2); 
    glBlitFramebuffer(0, 0, window->GetSize().x, window->GetSize().y, HalfWidth, HalfHeight, window->GetSize().x, window->GetSize().y, GL_COLOR_BUFFER_BIT, GL_LINEAR); 

    gbuffer->SetReadBuffer(GBUFFER_TEXCOORD); // glReadBuffer(GL_COLOR_ATTACHMENT3); 
    glBlitFramebuffer(0, 0, window->GetSize().x, window->GetSize().y, HalfWidth, 0, window->GetSize().x, HalfHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR); 

(upleft диффузный, праведен нормалей, downleft позиция и прямо-таки является текстура Coords)

Image showing static in triangles

EDIT: Новый снимок экрана после того, как я включен GL_DEPTH_TEST:

enter image description here

EDIT 2 Вот установка GBuffer:

glGenFramebuffers(1, &fbo); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); 

glGenTextures(4, textures); 
glGenTextures(1, &depthTexture); 

for (int i = 0; i < 4; i++) { 
    glBindTexture(GL_TEXTURE_2D, textures[i]); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, windowSize.x, windowSize.y, 0, GL_RGB, GL_FLOAT, NULL); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, textures[i], 0); 
} 

glBindTexture(GL_TEXTURE_2D, depthTexture); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, windowSize.x, windowSize.y, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0); 

GLenum drawBuffers[] = { 
    GL_COLOR_ATTACHMENT0, 
    GL_COLOR_ATTACHMENT1, 
    GL_COLOR_ATTACHMENT2, 
    GL_COLOR_ATTACHMENT3 
}; 
glDrawBuffers(4, drawBuffers); 

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
if (status != GL_FRAMEBUFFER_COMPLETE) { 
    // PRINT ERROR TO LOG (No errors here i've already checked) 
    return; 
} 

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); 

EDIT 3 Я следую this tutorial, если это помогает в чем-нибудь

+0

Есть ли причина отключения теста глубины перед записью в gbuffers? Результаты выглядят так, как если бы треугольники со спины были нарисованы над треугольниками с лицевой стороны. – BDL

+0

О, я просто использовал его раньше, но я попытался отложить его, чтобы проверить, работает ли он таким образом, но результат был таким же, как и у –

+1

. Я отредактирую ответ и обновляю новое изображение. –

ответ

1

Я забыл отключить GL_BLEND перед нанесением объектов в буфере.

Теперь он работает нормально.

glDisable(GL_BLEND); 
(Deferred rendering...) 
glEnable(GL_BLEND); 
+1

'+ 1' Всегда полезно ответить на свой вопрос, когда решение найдено! Любые мысли о [странных тенях OpenGL на простом кубическом объекте] (https://computergraphics.stackexchange.com/q/5649/5846)? Я могу переместить вопрос в SO, если это поможет. – uhoh

+1

@uhoh вы можете переместить этот вопрос в SO, я не могу комментировать CG. –

+0

Готово! [Странные тени OpenGL на простом кубическом объекте] (https://stackoverflow.com/q/47119517/3904031) – uhoh

Смежные вопросы