我正在尝试在sceneRoom中创建许多对象的阴影贴图,并将其阴影投影到sceneRoom上。直到现在我已经能够将sceneRoom的阴影投射到自身上,但我想在sceneRoom的地板上投射sceneRoom中其他对象的阴影。
是否可以在一个帧缓冲区中创建多个深度纹理?或者我应该使用几个帧缓冲区,每个帧都有一个深度纹理?
答案 0 :(得分:0)
只有一个GL_DEPTH_ATTACHMENT点,因此任何时候最多只能有一个附加的深度缓冲区。所以你必须使用其他方法。
答案 1 :(得分:0)
不,在FBO中只有一个附着点(技术上,如果算上GL_DEPTH_STENCIL_ATTACHMENT
,则为两个)。您只能将一件事物附加到深度,但这并不意味着您只能使用一张图像。
您可以使用数组纹理存储多个深度图像,然后将此数组纹理附加到GL_DEPTH_ATTACHMENT
。
但是,在此纹理中绘制显式数组级别的唯一方法是使用几何着色器进行分层渲染。因为它听起来像你感兴趣的这些深度图像中的每一个实际上是完全不同的几何图形集,这听起来不像你想要的方法。如果使用几何着色器执行此操作,则将为每个图层处理相同的几何图形集。
您可以考虑的一件事实际上是使用单个深度缓冲区,但将阴影贴图打包到地图集中。如果每个阴影贴图都是512x512,则可以将其中4个存储在尺寸为1024x1024的单个纹理中,并在适当时调整纹理坐标(以及绘制到图集时的视口)。您可能考虑这样做的原因是因为更改渲染目标(FBO状态)往往是在一系列仅深度绘制中绘制调用之间最昂贵的事情。你可能会改变一些制服或顶点指针,但这些变化很便宜。