在着色器上实现 GL_REPEAT

Implementing GL_REPEAT on shader

我正在尝试在 glsl 上实施 GL_REPEAT。我使用 mod 函数写了一些东西,但是有一个 problem 两个纹理结合在一起的地方。你能解释一下为什么它不能正常工作吗?

主要内容:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
我的着色器代码如下所示:
in vec2 TextureCoord;

float yCoord = mod(TextureCoord.y + 0.5, 1.0);
emission = texture(material.emission,vec2(TextureCoord.x, yCoord)).rgb;

//result
vec3 result = emission;
FragColor = vec4(result, 1.0f);

纹理过滤 期间支持环绕模式。您设置 GL_LINEAR 过滤器模式,因此它将始终使用 2x2 纹素足迹。如果该足迹恰好位于边界处,则所选环绕模式将应用 以选择每个单独的纹素 。在你的例子中,如果你靠近边界,你告诉它过滤到 texttrue 边界颜色,GL_REPEAT wrap 模式的过滤器永远不会这样做,它会使用来自相反边界的纹素数据.

所以如果你想在着色器中手动重新实现,你还必须实现纹素选择和过滤本身 .由于您还使用 mipmapping,这样做会非常复杂且缓慢。