基本上我用这段代码将texture2D从原来的inputImageTexture中抵消
highp vec2 toprightcoord = textureCoordinate + 0.25;
highp vec4 tr = texture2D(inputImageTexture, toprightcoord);
它会做它应该做的事情,但是它会从偏移纹理的边缘留下拉伸的像素颜色(就像拉出披萨片的奶酪一样)。 如何将其替换为任何颜色或透明?
答案 0 :(得分:1)
我假设您已将纹理包装参数设置为GL_CLAMP_TO_EDGE
。见glTexParameter
。
当使用纹理查找函数texture2D
访问纹理时,这会导致拉伸像素超出范围[0.0,1.0]。
您可以使用wrap参数GL_REPEAT
创建“平铺”纹理。
但如果你想要
“如何将其替换为任何颜色或透明?”
,然后你必须做范围检查。
如果在x
或y
坐标处超出限制1.0,则以下代码将Alpha通道设置为0.0。如果纹理坐标在边界内,变量inBounds
设置为1.0,则设置为0.0:
vec2 toprightcoord = textureCoordinate + 0.25;
vec4 tr = texture2D(inputImageTexture, toprightcoord);
vec2 boundsTest = step(toprightcoord, vec2(1.0));
flaot inBounds = boundsTest.x * boundsTest.y;
tr.a *= inBounds;
您可以将此扩展到[0.0,1.0]中的范围测试:
vec2 boundsTest = step(vec2(0.0), toprightcoord) * step(toprightcoord, vec2(1.0));
注意,glsl函数step
genType step( genType edge, genType x);
如果x[i] < edge[i]
则返回0.0,否则返回1.0。
使用glsl函数mix
,颜色可以用不同的颜色替换:
vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
tr = mix(red, tr, inBounds);