单色渲染在opengl中渲染到frambuffer对象

Monochrome rendering in OpenGL to frambuffer object?

本文关键字:frambuffer 对象 opengl 单色渲      更新时间:2023-10-16

有没有办法单色渲染到OpenGL中的帧缓冲区?

我的最终目标是渲染到立方纹理以创建用于在我的应用程序中遮蔽的阴影图。

从我理解的方法中,对于每个光源,将场景渲染6次(使用6个可能的正交方向(到每个FBO,然后将它们全部添加到Cube Map中。

i alrady的着色器可以为一个这样的相机位置提供深度图。但是,这些着色器以完整的RGB渲染,对于深度图,它比需要的大3倍。有没有办法单色渲染以减少纹理的大小?

如何为shadowmap(或cubemap(创建纹理[s]?如果您在创建纹理时使用GL_DEPTH_COMPONENT[16|24|32]格式,则纹理将是您想要的单个通道。

检查官方文档:https://www.khronos.org/registry/opengl-refpages/gl2.1/xhtml/glteximage2d.xml

gl_depth_component

每个元素都是一个深度值。 GL将其转换为浮点,乘以签名的比例因子乘以 gl_depth_scale,添加签名的偏见gl_depth_bias, 夹具到范围[0,1](请参阅GlpixelTransfer(。

您可以看到,每个元素都是单个深度值。

因此,如果您使用这样的东西:

 for (i = 0; i < 6; i++)
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
                 0,
                 GL_DEPTH_COMPONENT24,
                 size,
                 size,
                 0,
                 GL_DEPTH_COMPONENT,
                 GL_FLOAT,
                 NULL);

单元素大小必须为24位(也许有32个带填充物(。否则,指定深度大小是否将其存储为RGB [a]。

将是荒谬的。

这篇文章还验证了深度纹理是单个通道纹理:https://www.opengl.org/discussion_boards/showthread.php/123939-how-is-iis-data-s-data-sta---------------------in--is-data-s-noup-in-gl_depth_depth_component24-texture

"我的Alrady具有为一个这样的相机位置呈现深度图的着色器。但是,这些着色器以完整的RGB渲染,在深度图中,这些着色器是比其需要大的3倍。">

通常,您将场景渲染到Shadowmap以获得深度值(或距离(,对吗?那你为什么还是呈RGB?如果您只需要深度值,则无需因为不需要编写附件而进行彩色附件,只需写入深度缓冲区(实际上,如果您不在frag中覆盖其值,则可以这样做(