1

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

3x2 纹理
3x2 纹理

我们已将 GL_TEXTURE_WRAP_S 和 GL_TEXTURE_WRAP_T 设置为 GL_CLAMP_TO_EDGE,这会从某些边缘移除接缝,但这对纹理内部的边缘没有影响。

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

多维数据集的角落GLES30.GL_LINEARGLES30.GL_NEAREST
带有 GLES30.GL_LINEAR 和 GLES30.GL_NEAREST 的立方体角

我们正在从 Android SurfaceTexture 读取纹理,因此输入纹理必须是GL_TEXTURE_EXTERNAL_OES. 我们知道这个问题应该可以通过使用本机GL_TEXTURE_CUBE_MAP和来解决glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS),但不支持GL_TEXTURE_EXTERNAL_OES.

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

4

0 回答 0