灵魂出窍.gif
我们针对这个效果分析下实现的思路。
1.底部的视频大小没有变化。
2.上面有一个放大缩小的视频,然后带点透明度。
参看前面的实现方案基于GPUImage模仿抖音放大缩小效果 稍微改下shader就可以了。
fragmentShader实现效果如下
NSString *const kGLImageSoulOutFragmentShaderString = SHADER_STRING
(
precision highp float;
varying vec2 textureCoordinate;
uniform float scale;//缩放比
uniform sampler2D inputImageTexture;
void main()
{
highp vec2 uv = textureCoordinate;
vec4 originColor = texture2D(inputImageTexture, uv);
//uv坐标的中心点并非是(0.0,0.0),所以这里进行一次偏移,后面在偏移回来就可以了
vec2 center = vec2(0.5, 0.5);
uv -= center;
uv = uv / scale;
uv += center;
vec4 overlayColor = texture2D(inputImageTexture, uv);
//线性混合
vec4 color = mix(originColor,overlayColor,fract(scale)*0.2);
gl_FragColor = color;
}
);