在着色器上实现GL_REPEAT

Implementing GL_REPEAT on shader

本文关键字:GL REPEAT 实现      更新时间:2023-10-16

我正在尝试在glsl上实现GL_REPEAT。我使用 mod 函数写了一些东西,但两个纹理组合存在问题。你能解释一下为什么它不能正常工作吗?

在主要:
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纹素占用空间。如果该封装恰好位于边界处,则所选换行模式将应用于选择每个单独的纹素。在您的情况下,如果您靠近边框,您告诉它过滤成 textrue 边框颜色,而具有GL_REPEAT换行模式的过滤器永远不会这样做,它会使用来自相反边框的纹素数据。

因此,如果要在着色器中手动重新实现它,还必须实现纹素选择和过滤本身。由于您也使用 mipmapping,因此这样做将非常复杂且缓慢。