Opengl无缝纹理

时间:2014-07-26 03:21:28

标签: opengl-es textures mipmaps

当我在两个纹理彼此相邻的地方放置andrid时,有一个轻微的缝隙,你可以在其中看到它们后面的绘制对象。基本上看起来像一个小差距。我把它缩小到mipmapping

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

如果我将它们都设置为GL_NEAREST,则接缝会消失,但纹理看起来像废话。我还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

纹理边缘的采样行为取决于您使用glTexParamteri()设置的纹理包装设置,使用GL_TEXTURE_WRAP_SGL_TEXTURE_WRAP_T作为参数名称。它们分别控制两个纹理方向的包裹模式。

这些参数的默认值为GL_REPEAT,它会创建纹理的重复模式。这意味着当您接近纹理的左边缘并到达最后一半纹素时,将在最左边和最右边的像素之间进行线性插值。这很可能会导致你的接缝。

ES 2.0中的其他有效值为GL_MIRRORED_REPEATGL_CLAMP_TO_EDGE。两者都应该更适合您的情况,但GL_CLAMP_TO_EDGE是最直接的。它将在接近边缘时简单地使用边缘处的纹素,而不会对后半个纹素进行任何插值。

您可以使用以下方法设置这些参数值:

glTexParamteri(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParamteri(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);