多媒体直播

基于GPUImage模仿抖音放大缩小效果

2019-04-25  本文已影响0人  HHHHHHHHHHD
放大缩小.gif

我们针对这个效果分析下实现的思路。
1.整个过程中视频是基于中心点进行放大缩小的。

fragmentShader实现效果如下

NSString *const kGLImageZoomFragmentShaderString = SHADER_STRING
(
 precision highp float;
 varying vec2 textureCoordinate;
 uniform float scale;//放大缩小的比例值
 
 uniform sampler2D inputImageTexture;
 
 void main()
 {
     
     highp vec2 uv = textureCoordinate;
     
     //uv坐标的中心点并非是(0.0,0.0),所以这里进行一次偏移,后面在偏移回来就可以了
     vec2 center = vec2(0.5, 0.5);
     uv -= center;
     uv = uv / scale;
     uv += center;
     
     gl_FragColor = texture2D(inputImageTexture, uv);
     
 }
 );

整个过程中可以发现,是先放大缩小,然后原来尺寸上面停留几帧,然后重复上面的放大缩小的动作。用U表示上升,D表示下降,N表示无变化则整一个循环就应该是这样的
UUUPPPNNN, UUUPPPNNN, UUUPPPNNN....

详细看代码实现,这里不关着色器的事情,属于业务层的计算...

- (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex{
    
    [super newFrameReadyAtTime:frameTime atIndex:textureIndex];
    
    self.currentFrameCount = self.currentFrameCount + 1;
    
    
    if (self.currentFrameCount == kMaxResetCount) {
        self.currentFrameCount =0;
    }
    
    if (self.currentFrameCount>=kMinResetCount) {
        self.resetCount = self.resetCount + 12;
    }else{
        self.resetCount = self.resetCount - 12;
        
        //不让缩到最小
        if (self.resetCount<0) {
            self.resetCount = 0;
        }
    }

    //这里做放大的计算
    NSInteger value = self.resetCount;
    [self updateForegroundTexture:1.0+(value/100.0)];
}

上一篇下一篇

猜你喜欢

热点阅读