著色器圖像處理(轉(zhuǎn)場(chǎng)效果二)

左右平移滑入滑出

使用片元著色器, 依次讓左邊的像素代替右邊的像素(或右邊的代替左邊的), 產(chǎn)生一種錯(cuò)覺, 感覺像是進(jìn)行了平移操作

precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D texMap;
uniform sampler2D colorMap;
uniform float stepValue; //[0.0, 1.0]
void main () {
    vec2 st = varyTextCoord;
    if(st.x < stepValue) {
        st = vec2(st.x +  (1.0 - stepValue), st.y); //map x [0, 1]
        vec3 color = texture2D(texMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    } else {
        st = vec2((st.x - stepValue), st.y);
        vec3 color = texture2D(colorMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    }
}

左右平移滑入滑出

放大縮小

precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D texMap;
uniform sampler2D colorMap;
uniform float stepValue; //0.0<=stepValue<=0.5.

void main () {

    vec2 st = varyTextCoord;

    if(st.x > 0.5 - stepValue && st.x < 0.5 + stepValue &&
        st.y > 0.5 - stepValue && st.y < 0.5 + stepValue) {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(texMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    } else {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(colorMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    }

}
放大縮小.gif

四角推出

precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D texMap;
uniform sampler2D colorMap;
uniform float stepValue; //0.0<=stepValue<=0.5.

void main () {

    vec2 st = varyTextCoord;

    if(st.x > 0.5 - stepValue && st.x < 0.5 + stepValue ||
        st.y > 0.5 - stepValue && st.y < 0.5 + stepValue) {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(texMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    } else {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(colorMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    }

}
四角推出.gif

上下平移打開效果


precision highp float;
varying lowp vec2 varyTextCoord;
uniform sampler2D texMap;
uniform sampler2D colorMap;
uniform float stepValue; //0.0<=stepValue<=0.5

void main () {

    vec2 st = varyTextCoord;

    if(st.y < 0.5 - stepValue || st.y > 0.5 + stepValue) {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(texMap, st).rgb;;
        gl_FragColor = vec4(vec3(0.0, 0.0, 0.0) , 1.);
    } else {
        st = vec2(st.x, st.y);
        vec3 color = texture2D(colorMap, st).rgb;;
        gl_FragColor = vec4(color , 1.);
    }

}
image.gif
最后編輯于
?著作權(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)容

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