一次渲染到多个帧缓冲区
Render to multiple Framebuffers at once
我想要一个Scene FBO有场景颜色纹理和深度纹理,还有一个Depth FBO有特定大小的深度纹理(1024x1024) 用于阴影贴图。
我有这样的代码:
Renderer::begin()
drawCube();
drawSphere();
Renderer::end();
在 Renderer::begin()
中绑定 Scene FBO 并在 Renderer::end()
中解除绑定。
那么如何将场景也渲染到 Depth FBO 以便在这种情况下获得深度图?
您不能渲染到两个独立且不兼容的 FBO。而您尝试做的相当于光栅化三角形两次,对不同的深度缓冲区使用不同的视口。
您可以通过使用分层渲染实现与您尝试做的事情相似的事情。您可以 create an array texture for your depth buffer, attach it to the FBO as a layered image, and set multiple viewports for them, then use a GS to output multiple copies of the same triangle to the different layers 对分层深度缓冲区进行不同的栅格化。
但这也需要一个分层的 color 缓冲区,即使您没有为其他光栅化图像使用颜色组件。并且深度数组纹理中的层不能有不同的大小,所以你必须选择维度的并集并忽略该区域之外的东西。
当然,有一个障碍:在完成构建之前无法读取阴影贴图。这意味着如果您的场景实际上需要 使用 阴影贴图(例如阴影),这将完全行不通。
所以基本上这个对话完全是学术性的。
我想要一个Scene FBO有场景颜色纹理和深度纹理,还有一个Depth FBO有特定大小的深度纹理(1024x1024) 用于阴影贴图。 我有这样的代码:
Renderer::begin()
drawCube();
drawSphere();
Renderer::end();
在 Renderer::begin()
中绑定 Scene FBO 并在 Renderer::end()
中解除绑定。
那么如何将场景也渲染到 Depth FBO 以便在这种情况下获得深度图?
您不能渲染到两个独立且不兼容的 FBO。而您尝试做的相当于光栅化三角形两次,对不同的深度缓冲区使用不同的视口。
您可以通过使用分层渲染实现与您尝试做的事情相似的事情。您可以 create an array texture for your depth buffer, attach it to the FBO as a layered image, and set multiple viewports for them, then use a GS to output multiple copies of the same triangle to the different layers 对分层深度缓冲区进行不同的栅格化。
但这也需要一个分层的 color 缓冲区,即使您没有为其他光栅化图像使用颜色组件。并且深度数组纹理中的层不能有不同的大小,所以你必须选择维度的并集并忽略该区域之外的东西。
当然,有一个障碍:在完成构建之前无法读取阴影贴图。这意味着如果您的场景实际上需要 使用 阴影贴图(例如阴影),这将完全行不通。
所以基本上这个对话完全是学术性的。