如何解决OES_depth_texture 和 glReadPixels
open gle es 2.0 扩展, OES_depth_texture,允许将深度信息写入带有附加纹理的帧缓冲区。
然而,规范没有描述带有这种扩展的 glreadPixels 的用法。据我所知,glreadPixels 不适用于这样的帧缓冲区(我已经尝试过,但得到了无效操作错误)。
我的这个假设正确吗?有谁知道这个问题的另一个参考?或者是否有其他方法可以从附加的纹理中读取以使用 glreadPixels?
解决方法
此扩展定义了一种新的纹理格式,用于在纹理中存储深度值。深度纹理图像广泛用于阴影投射,但也可用于其他效果,例如基于图像的渲染、置换贴图等。
没有直接的方法。你只能间接地做到这一点。如果你想读出一个深层的纹理,你需要做以下步骤:
-
创建一个与深度纹理相同大小的帧缓冲区
-
使用着色器读取深层纹理并将其写入帧缓冲区的颜色附件中。
-
使用
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_COMPONENT、DEPTH_STENCIL 和 STENCIL_INDEX
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。