opengl - 在 OpenGL 中渲染到纹理数组的一层

标签 opengl textures render-to-texture shadow-mapping

我使用OpenGL 3.2渲染shadow maps 。为此,我构建了一个渲染为深度纹理的帧缓冲区。

为了将纹理附加到帧缓冲区,我使用:

glFramebufferTexture2D( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, shdw_texture, 0 );

这很好用。渲染灯光 View 后,我的 GLSL 着色器可以采样深度纹理来解决灯光的可见性。

我现在试图解决的问题是拥有更多的阴影贴图,假设有 50 个。在我的主渲染 channel 中,我不想从 50 个不同的纹理中进行采样。我可以使用图集,但我想知道:我可以将所有这些阴影贴图作为 2D 纹理数组中的切片传递吗?

所以,以某种方式创建一个 GL_TEXTURE_2D_ARRAY使用 DEPTH 格式,并将数组的一层绑定(bind)到帧缓冲区?

帧缓冲区是否可以通过纹理数组层(而不仅仅是深度纹理)支持深度?

最佳答案

一般来说,您需要区分是要创建分层帧缓冲区(请参阅 Layered Images )还是要将多层纹理的单层附加到帧缓冲区。

使用glFramebufferTexture3D将 3D 纹理 (TEXTURE_3D) 层或数组纹理附加到帧缓冲区或使用 glFramebufferTextureLayer将三维或数组纹理层附加到帧缓冲区。无论哪种情况,最后一个参数都指定纹理的

可以使用glFramebufferTexture附加分层附件。请参阅Layered rendering .

关于opengl - 在 OpenGL 中渲染到纹理数组的一层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66588990/

相关文章:

c++ - 计算顶点法线

opengl - Tizen UI - Enlightenment Foundation 库中的 E17 和 EVAS

openGL 独立纹理指的是其他纹理

c++ - Opengl Rgba 从 1 个分量到灰度

android - 如何使用 OpenGL ES 将纹理加载到圆上

objective-c - Metal 中的多个渲染目标

c++ - Qt 5.5 和 OpenGL : Retrieving device info

c++ - 使用 GLEW、GLFW 和 g++ 编译在 OS X 10.10 下启用 OpenGL 4.1

glTexImage2D 的 android 位图像素格式

c++ - 渲染到 QOpenGLFramebufferObject GL_HALF_FLOAT