我想在中心切割上实现图像的平滑合并效果。我从下面的代码中获得了中心切割。
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main(){
vec4 CurrentColor = vec4(0.0);
if(textureCoordinate.y < 0.5){
CurrentColor = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y-0.125)));
} else{
CurrentColor = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y+0.125)));
}
gl_fragColor = CurrentColor;
}
上面的代码给下面的图像效果。
实际值:
中心切割:
期望的输出:
我想要的是锋利的切割不应该存在,两半应该有平滑的渐变合并。
答案 0 :(得分:2)
你想要一个真正的模糊,还是只是线性混合?因为模糊涉及模糊内核,而混合将是这两者之间的简单插值,具体取决于y坐标。
这是线性混合的代码。
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main(){
float steepness = 20; /* controls the width of the blending zone, larger values => shaper gradient */
vec4 a = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y-0.125)));
vec4 b = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y+0.125)));
/* EDIT: Added a clamp to the smoothstep parameter -- should not be neccessary though */
vec4 final = smoothstep(a, b, clamp((y-0.5)*steepness, 0., 1.)); /* there's also mix instead of smoothstep, try both */
gl_FragColor = final;
}
执行实际模糊有点复杂,因为您要应用该模糊内核。基本上它涉及两个嵌套循环,迭代相邻的纹素并根据一些分布将它们相加(最灵活的是通过附加纹理提供该分布,这也允许添加一些散景)。