使用来自一个GL_TEXTURE_EXTERNAL_OES纹理的opengl渲染天空盒

时间:2017-09-26 08:49:48

标签: android opengl-es skybox

我们正在尝试从单个纹理在Android上渲染天空盒/立方体贴图(参见图像,立方体的每个面都是一种颜色),但我们在大多数边缘都看到了强烈的接缝。

3x2纹理
3x2 texture

我们设置了GL_TEXTURE_WRAP_S& GL_TEXTURE_WRAP_T到GL_CLAMP_TO_EDGE,可以从某些边缘移除接缝,但这对纹理内的边缘没有影响。

我们最初认为这只是插值伪影,这是跨越这些边缘的线性插值的结果,但在将GL_TEXTURE_MAG_FILTERGL_TEXTURE_MIN_FILTER设置为GL_NEAREST时,我们仍然看到1-2px尖锐的接缝。请参阅线性和最近邻居的示例。

立方角的GLES30.GL_LINEARGLES30.GL_NEAREST Cube's corner with GLES30.GL_LINEAR and GLES30.GL_NEAREST

我们正在从Android SurfaceTexture中读取纹理,因此输入纹理必须为GL_TEXTURE_EXTERNAL_OES。 我们知道使用原生GL_TEXTURE_CUBE_MAPglEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS)可以解决此问题,但GL_TEXTURE_EXTERNAL_OES不支持此问题。

有人对我们如何解决这个问题有所了解吗?是否可以在着色器代码中设置过滤限制? 是一个带有离屏帧缓冲的双遍渲染,我们可以用它将GL_TEXTURE_EXTERNAL_OES转换为常规的2D纹理(并将其绑定到立方体贴图),这是一个很好的尝试解决方案吗?

0 个答案:

没有答案