美文网首页
Android基于Shader的图像处理(11)-仿抖音灵魂出窍

Android基于Shader的图像处理(11)-仿抖音灵魂出窍

作者: andev009 | 来源:发表于2018-11-26 15:43 被阅读46次

完整代码查看# AndroidShaderDemo下的SoulOutRender

灵魂出窍效果原理是图像分两层,第一层是底图,第二层覆盖第一层上,一边放大,一边淡化。前面实现了缩放特效,这次只需要再加上淡化动画就可以了。因为两层图像混合在一起,所以也用到了颜色混合,在GLSL里,颜色混合用glBlendFunc,改变源图像的Alpha值,就可以实现淡化动画效果。
SoulOutRender的onDrawFrame方法如下:

@Override
    public void onDrawFrame(GL10 gl) {
        glClear(GL_COLOR_BUFFER_BIT);

        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE);
        float progress;
        if (curFrame <= MaxFrame) {
            progress = curFrame * 1.0f / MaxFrame;
        } else {
            curFrame = 0;
            progress = 0;
        }
        float scale = 1f + progress * 0.3f;
                float alpha = 0.3f - progress * 0.3f;
        curFrame++;

        drawLayer(1.0f,1.0f);

        drawLayer(scale, alpha);

        GLES20.glUseProgram(0);
        glDisable(GL_BLEND);
    }

首先打开颜色混合,然后计算缩放因子和淡化因子,之前在介绍缩放特效时说过,这里不重复了。然后调用drawLayer两次,画两个图层,一个是底层原大的,因此缩放因子是1,而且Alpha值是1。第二层赋予每帧的缩放因子和淡化因子,实现动画效果。

最终效果如下:


soul_out.gif

相关文章

网友评论

      本文标题:Android基于Shader的图像处理(11)-仿抖音灵魂出窍

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