Opengl es 如何在偏移原始vec4后替换纹理2D的空像素?
基本上,我用这段代码将texture2D从其原始的inputImageTexture中偏移Opengl es 如何在偏移原始vec4后替换纹理2D的空像素?,opengl-es,glsl,textures,opengl-es-2.0,fragment-shader,Opengl Es,Glsl,Textures,Opengl Es 2.0,Fragment Shader,基本上,我用这段代码将texture2D从其原始的inputImageTexture中偏移 highp vec2 toprightcoord = textureCoordinate + 0.25; highp vec4 tr = texture2D(inputImageTexture, toprightcoord); 它做了它应该做的,但是它从偏移纹理的边缘留下了一个拉伸的像素颜色(就像从拉过的比萨饼片中取出的奶酪)。 如何将其替换为任何颜色或透明?我假设您已将纹理包裹参数设置为GL\u CL
highp vec2 toprightcoord = textureCoordinate + 0.25;
highp vec4 tr = texture2D(inputImageTexture, toprightcoord);
它做了它应该做的,但是它从偏移纹理的边缘留下了一个拉伸的像素颜色(就像从拉过的比萨饼片中取出的奶酪)。
如何将其替换为任何颜色或透明?我假设您已将纹理包裹参数设置为
GL\u CLAMP\u to\u EDGE
。看见
这会导致在使用纹理查找功能访问纹理时拉伸像素,超出范围[0.0,1.0]
可以使用包裹参数GL\u 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函数
如果x[i]
,则返回0.0,否则返回1.0
使用glsl功能,颜色可以替换为不同的颜色:
vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
tr = mix(red, tr, inBounds);
真棒,这是可行的,虽然透明部分仍然留下一些混合颜色,但它仍然做它应该做的。谢谢你,伙计
vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
tr = mix(red, tr, inBounds);