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

完整代码查看# 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,290评论 3 119
  • 每天早上上班赶公交车,路上急匆匆,甚至小跑起来,全神贯注的向着目的地—公交站台前进。但是在一个转角的小店子里散发的...
    曾经叫笔名阅读 356评论 2 1
  • 今天看到一首开心歌,觉得甚好,下面分享给大家: ...
    曼丽心语阅读 497评论 1 1
  • 现在是2018.10.8日下午三点半,距离考研还有75天,我在图书馆的楼道刷着简书。头疼,这次第三天了,疼的恶心,...
    波波波波赵阅读 390评论 0 0

友情链接更多精彩内容