我使用OpenGL 3.2来渲染阴影贴图。为此,我构建了一个渲染到深度纹理的帧缓冲区。
要将纹理附加到帧缓冲区,我使用:
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, shdw_texture, 0 );
这很管用。渲染灯光视图后,我的GLSL着色器可以对深度纹理进行采样,以解决灯光的可见性问题。
我现在想解决的问题是,有更多的阴影贴图,比如说50个。在我的主渲染过程中,我不想从50个不同的纹理中采样。我可以使用图集,但我想知道:我可以将所有这些阴影贴图作为2D纹理阵列的切片传递吗?
那么,以某种方式创建一个具有DEPTH格式的GL_TEXTURE_2D_ARRAY,并将数组的一层绑定到帧缓冲区?
帧缓冲区是否可以通过纹理阵列层而不仅仅是深度纹理来支持DEPTH?
通常,您需要区分是要创建分层帧缓冲区(请参见分层图像(,还是要将多层纹理的单层附加到帧缓冲区。
使用glFramebufferTexture3D
将3D纹理层(TEXTURE_3D
(或阵列纹理附加到帧缓冲区,或使用glFramebufferTextureLayer
将三维纹理层或阵列纹理层附加到帧缓冲器。在任何一种情况下,最后一个参数都指定纹理的layer
。
分层附件可以使用glFramebufferTexture
进行连接。请参见分层渲染。