单色渲染在opengl中渲染到frambuffer对象
Monochrome rendering in OpenGL to frambuffer object?
有没有办法单色渲染到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中覆盖其值,则可以这样做(
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 单色渲染在opengl中渲染到frambuffer对象