我试图弄清楚如何在延迟渲染器中渲染天空盒,以便它可以包含在后期处理效果中,但是我的几何阶段在视图空间中,不幸的是,这个阶段的天空盒将受到它相对于像任何物体一样发光(它的行为就像离光源很远的大盒子,并且显示得很暗)。我没有尝试在后期处理中加入天空盒的设置如下:
1:(绑定 FBO)将几何体渲染到颜色、法线、位置 FBO 纹理附件(取消绑定 FBO)。
2:(绑定FBO)渲染场景并计算屏幕空间的光照。(取消绑定FBO)
3:(绑定FBO)应用后期处理效果(取消绑定FBO)
4:将几何FBO的深度缓冲区blit到默认帧缓冲区
5:渲染天空盒。
我试图用 3 像这样切换第 5 步:
2:(绑定FBO)渲染场景并计算屏幕空间中的光照。
5:渲染天空盒
(解除绑定FBO)
3:(绑定FBO)应用后期处理效果(取消绑定FBO)
4:将几何FBO的深度缓冲区blit到默认帧缓冲区
但显然天空盒没有关于场景的深度信息,而是在灯光舞台上渲染。如果我尝试在 2 和 5 之间进行任何深度 blitting,我相信我正在进行无效的 GL 调用,因为我在调用时已经绑定到 FBO
GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, DeferredFBO.fbo_handle);
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, 0); // Write to default
// framebuffer or a skybox framebuffer
GL30.glBlitFramebuffer(0, 0, DisplayManager.Width,
DisplayManager.Height, 0, 0, DisplayManager.Width,
DisplayManager.Height, GL11.GL_DEPTH_BUFFER_BIT,
GL11.GL_NEAREST);