我正在为移动平台开发游戏,我想将效果渲染到比屏幕更低的分辨率渲染目标。问题是,我需要从全屏开始使用深度缓冲区。
如果硬件支持GL_OES_depth_texture,我想它会相对简单一些,但是不幸的是我没有,所以我想知道是否还有其他方法可以从全屏渲染中获取深度信息并将其用于我的较低分辨率渲染。
如果我实际上不能对渲染缓冲区进行下采样,是否可以将分辨率较高的深度缓冲区绑定到分辨率较低的颜色缓冲区的渲染目标?我找不到任何文档说明帧缓冲区对象的所有不同附件的分辨率都必须与分辨率匹配,但是我强烈怀疑这是必需的。
谢谢你的帮助!
我认为您应该渲染附着在FBO上的纹理。纹理可以具有您想要的任何较低分辨率。在大多数平台上,纹理实际上是在OpenGL ES 1.1和2.0中真正有用的唯一FBO附件。
谢谢安东。
Andon的建议是,您可以使用OpenGL ES 2.0可以理解的普通GL_RGBA格式将其渲染为纹理,但是可以以更有效的方式打包/编码颜色。如果仅使用该纹理通过自定义片段着色器进行渲染,该片段着色器将解压缩/解码放入的自定义格式,则可以执行此操作。例如,从纹理采样器读取的值实际上可以是所需的任何格式。
float fR = texture2D(gsuTexture0, gsvTexCoord0).r;
float fG = texture2D(gsuTexture0, gsvTexCoord0).g;
float fB = texture2D(gsuTexture0, gsvTexCoord0).b;
float fA = texture2D(gsuTexture0, gsvTexCoord0).a;
float fDepth = fR;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句