OpenGLES濾鏡開發(fā)匯總 —— 仿抖音抖動(dòng)特效

抖音的抖動(dòng)特效的實(shí)現(xiàn)原理是,分別對(duì)RGB通道進(jìn)行分離計(jì)算不同的大小得到。廢話不多數(shù),直接上fragment shader 代碼:

precision highp float;
varying vec2 textureCoordinate;
uniform sampler2D inputTexture;

uniform float scale;

void main()
{
    vec2 uv = textureCoordinate.xy;
    vec2 scaleCoordinate = vec2((scale - 1.0) * 0.5 + uv.x / scale ,
                                (scale - 1.0) * 0.5 + uv.y / scale);
    vec4 smoothColor = texture2D(inputTexture, scaleCoordinate);

    // 計(jì)算紅色通道偏移值
    vec4 shiftRedColor = texture2D(inputTexture,
         scaleCoordinate + vec2(-0.1 * (scale - 1.0), - 0.1 *(scale - 1.0)));

    // 計(jì)算綠色通道偏移值
    vec4 shiftGreenColor = texture2D(inputTexture,
         scaleCoordinate + vec2(-0.075 * (scale - 1.0), - 0.075 *(scale - 1.0)));

    // 計(jì)算藍(lán)色偏移值
    vec4 shiftBlueColor = texture2D(inputTexture,
         scaleCoordinate + vec2(-0.05 * (scale - 1.0), - 0.05 *(scale - 1.0)));

    vec3 resultColor = vec3(shiftRedColor.r, shiftGreenColor.g, shiftBlueColor.b);

    gl_FragColor = vec4(resultColor, smoothColor.a);
}

縮放計(jì)算如下:

    @Override
    public void onDrawFrameBegin() {
        super.onDrawFrameBegin();
        mScale = 1.0f + 0.3f * getInterpolation(mOffset);
        mOffset += 0.06f;
        if (mOffset > 1.0f) {
            mOffset = 0.0f;
        }
        GLES20.glUniform1f(mScaleHandle, mScale);
    }

    private float getInterpolation(float input) {
        return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
    }

如果用在視頻編輯階段,scale的值可以跟播放器的播放時(shí)間綁定得到。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,137評(píng)論 2 59
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,361評(píng)論 25 708
  • 這幾天沒日沒夜玩游戲看綜藝看電視劇看電影找人聊天。心痛的情緒似乎舒緩了一點(diǎn)點(diǎn)。可是我明白我的心結(jié)還沒解開。 昨天給...
    iyjyjyjyj閱讀 268評(píng)論 0 0
  • 拿破侖吧翻譯工程元帥錄翻譯自David G. Chandler總編的Napoleon' Marshal,僅供網(wǎng)友交...
    Baidu拿破侖吧閱讀 695評(píng)論 0 1
  • ◎ 在海邊 (文\林嘉梓) 一切都在被無限夸大,無形的巨手扯住你往四面八方拉伸,目光空蕩散漫一如空氣你的歡樂與憂愁...
    林嘉梓閱讀 637評(píng)論 25 89

友情鏈接更多精彩內(nèi)容