美文网首页多媒体直播
基于GPUImage模仿抖音放大缩小效果

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

作者: HHHHHHHHHHD | 来源:发表于2019-04-25 15:27 被阅读0次
    放大缩小.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)];
    }
    
    

    相关文章

      网友评论

        本文标题:基于GPUImage模仿抖音放大缩小效果

        本文链接:https://www.haomeiwen.com/subject/nrlzgqtx.html