繁体   English   中英

在着色器上实现 GL_REPEAT

[英]Implementing GL_REPEAT on shader

我正在尝试在 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纹素足迹。 如果该足迹恰好在边界处,则所选的环绕模式将应用于选择每个单独的 texel 在你的情况下,如果你靠近边界,你告诉它过滤到 textrue 边界颜色,这是一个带有GL_REPEAT环绕模式的过滤器永远不会做的,它会使用来自相反边界的 texel 数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM