由于mipmapping,GLSL程序重复纹理坐标导致可见的接缝

时间:2012-05-12 14:25:45

标签: opengl glsl textures

我有一个无缝的纹理。

在碎片整理器中,我使用一个函数在一定程度上从1.0跳到0.0来计算纹理坐标UVproc(这里纹理应该很好地重复)。

问题是在这个接缝处,查找似乎从最小的mipmap级别返回像素值。

如果我是debugoutput

out = vec4(dFdx(UVproc.x), dFdy(UVproc.y),0,1);

然后我可以看到,在这些像素处,这些纹理坐标的有限差异非常高,因此访问了一个小的mipmap级别(有意义 - 因为在这些像素处从1跳到0,有限差异将是大)。

如果我手动只使用textureLod()访问mipmaplevel 0,那么我没有这个问题,但我也松开了mipmapping,一切都变得颗粒状。

所以问题是:

如果在片段着色器中以程序方式计算texturecoordinates(在0-1范围内),如何避免可见的mipmap相关接缝?

1 个答案:

答案 0 :(得分:1)

您应该使用渐变纹理采样,手动设置衍生物。这是一个功能:

gvec textureGrad(gsampler sampler, vec texCoord, gradvec dTdx, gradvec dTdy);