在着色器上实现GL_REPEAT

问题描述 投票:0回答:1

我正在尝试在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);
c++ opengl glsl shader textures
1个回答
0
投票

包装模式在纹理过滤中被接受。您设置了GL_LINEAR滤波器模式,因此它将始终使用2x2纹素覆盖区。如果该轮廓恰好在边界处,则选定的环绕模式将应用以选择每个单独的纹理像素。在您的情况下,如果您靠近边界,则告诉它过滤为textrue边界颜色,而使用GL_REPEAT环绕模式的过滤器将永远不会做到这一点,它将使用相对边界的texel数据。 >

因此if

您要在着色器中手动重新实现,还必须实现纹理元素选择和过滤本身。由于您还使用了mipmapping,所以这样做会非常复杂且缓慢。
© www.soinside.com 2019 - 2024. All rights reserved.