微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OES_depth_texture 和 glReadPixels

如何解决OES_depth_texture 和 glReadPixels

open gle es 2.0 扩展, OES_depth_texture,允许将深度信息写入带有附加纹理的帧缓冲区。

然而,规范没有描述带有这种扩展的 glreadPixels 的用法。据我所知,glreadPixels 不适用于这样的帧缓冲区(我已经尝试过,但得到了无效操作错误)。

我的这个假设正确吗?有谁知道这个问题的另一个参考?或者是否有其他方法可以从附加的纹理中读取以使用 glreadPixels?

解决方法

OES_depth_texture

此扩展定义了一种新的纹理格式,用于在纹理中存储深度值。深度纹理图像广泛用于阴影投射,但也可用于其他效果,例如基于图像的渲染、置换贴图等。

没有直接的方法。你只能间接地做到这一点。如果你想读出一个深层的纹理,你需要做以下步骤:

  1. 创建一个与深度纹理相同大小的帧缓冲区

  2. 使用着色器读取深层纹理并将其写入帧缓冲区的颜色附件中。

  3. 使用 glReadPixels 读取颜色缓冲区。


可能有支持 NV_read_depth 扩展的 Nvidia 硬件的替代方案:

未扩展的 OpenGL-ES 2.0 仅支持使用 ReadPixels 从当前绑定的帧缓冲区的默认颜色缓冲区中读取。但是,能够从深度和模板缓冲区中读取数据对于调试很有用。此扩展将这些功能重新引入 OpenGL-ES 2.0。

很遗憾我没有找到相应的 OES 扩展名。


无法直接读取深度缓冲区。见OpenGL ES 3.2 Specification - 16.1.2 ReadPixels

[...] 从表 8.2 中定义的格式中选择的实现格式,不包括格式 DEPTH_COMPONENTDEPTH_STENCILSTENCIL_INDEX

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。