【发布时间】:2015-12-19 22:46:16
【问题描述】:
我试图弄清楚如何在延迟渲染器中渲染天空盒,以便它可以包含在后期处理效果中,但是我的几何阶段在视图空间中,不幸的是,这个阶段的天空盒会受到它的位置的影响像任何物体一样相对于光(它的行为就像离光源很远的大盒子,并且显示得很暗)。 我没有尝试在后期处理中加入天空盒的设置如下:
1:(绑定 FBO)将几何体渲染到颜色、法线、位置 FBO 纹理附件(取消绑定 FBO)。
2:(绑定FBO)渲染场景并计算屏幕空间的光照。(取消绑定FBO)
3:(绑定FBO)应用后期处理效果(取消绑定FBO)
4:将几何 FBO 的深度缓冲区 blit 到默认帧缓冲区
5:渲染天空盒。
我尝试将第 5 步与第 3 步切换 像这样:
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);
【问题讨论】:
-
嗯,“模型视图”空间不是坐标空间。这是一个从模型转换到(世界到)视图空间的矩阵。这里有趣的是,GL 倾向于跳过的中间部分是延迟着色的方便坐标空间,可能会对您有所帮助。
-
抱歉,已编辑。