在 iOS 中使用 GLSL 實現(xiàn)分屏濾鏡

首先使用 OpenGL ES 加載原圖进倍,可以參考我的另一篇文章《OpenGL ES 加載圖片并翻轉(zhuǎn)》。頂點著色器代碼不變购对,主要 attribute 屬性傳入頂點坐標和紋理坐標猾昆。

頂點著色器

attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;

void main()
{
    TextureCoordsVarying = TextureCoords;
    gl_Position = Position;
}

片元著色器 uniform 傳入紋理圖片,我們將根據(jù)修改紋理坐標的對應關系實現(xiàn)對應的分屏效果骡苞。

片元著色器(原圖)

attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;

void main()
{
    TextureCoordsVarying = TextureCoords;
    gl_Position = Position;
}
原圖.png

2分屏

片元著色器(2分屏)

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main()
{
    vec2 xy = TextureCoordsVarying;
    float y;
    if (xy.y >= 0.0 && xy.y <= 0.5)
    {
        y = xy.y + 0.25;
    }
    else
    {
        y = xy.y - 0.25;
    }
    gl_FragColor = texture2D(Texture, vec2(xy.x, y));
}
分屏_2.png

3分屏

片元著色器(3分屏)

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main()
{
    vec2 xy = TextureCoordsVarying;
    if (xy.y < 1.0/3.0)
    {
        xy.y = xy.y + 1.0/3.0;
    }
    else if (xy.y > 2.0/3.0)
    {
        xy.y = xy.y - 1.0/3.0;
    }
    gl_FragColor = texture2D(Texture, xy);
}
分屏_3.png

4分屏

片元著色器(4分屏)

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main()
{
    vec2 xy = TextureCoordsVarying;
    if (xy.x <= 0.5)
    {
        xy.x = xy.x * 2.0;
    }
    else
    {
        xy.x = (xy.x - 0.5) * 2.0;
    }
    
    if (xy.y <= 0.5)
    {
        xy.y = xy.y * 2.0;
    }
    else
    {
        xy.y = (xy.y - 0.5) * 2.0;
    }
    
    gl_FragColor = texture2D(Texture, xy);
}
分屏_4.png

6分屏

片元著色器(6分屏)

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main()
{
    vec2 xy = TextureCoordsVarying;
    if (xy.x <= 1.0/3.0)
    {
        xy.x = xy.x + 1.0/3.0;
    }
    else if (xy.x >= 2.0/3.0)
    {
        xy.x = xy.x - 1.0/3.0;
    }
    
    if (xy.y <= 1.0/3.0)
    {
        xy.y = xy.y + 1.0/3.0;
    }
    else if (xy.y >= 2.0/3.0)
    {
        xy.y = xy.y - 1.0/3.0;
    }
    
    gl_FragColor = texture2D(Texture, xy);
}

分屏_6.png

9分屏

片元著色器(9分屏)

precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;

void main()
{
    vec2 xy = TextureCoordsVarying;
    if (xy.x <= 1.0/3.0)
    {
        xy.x = xy.x * 3.0;
    }
    else if (xy.x <= 2.0/3.0)
    {
        xy.x = (xy.x - 1.0/3.0) * 3.0;
    }
    else
    {
        xy.x = (xy.x - 2.0/3.0) * 3.0;
    }
    
    if (xy.y <= 1.0/3.0)
    {
        xy.y = xy.y * 3.0;
    }
    else if (xy.y <= 2.0/3.0)
    {
        xy.y = (xy.y - 1.0/3.0) * 3.0;
    }
    else
    {
        xy.y = (xy.y - 2.0/3.0) * 3.0;
    }
    
    gl_FragColor = texture2D(Texture, xy);
}
分屏_9.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垂蜗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子解幽,更是在濱河造成了極大的恐慌贴见,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躲株,死亡現(xiàn)場離奇詭異片部,居然都是意外死亡,警方通過查閱死者的電腦和手機霜定,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門档悠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捆探,“玉大人,你說我怎么就攤上這事站粟∈蛲迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵奴烙,是天一觀的道長助被。 經(jīng)常有香客問我,道長切诀,這世上最難降的妖魔是什么揩环? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮幅虑,結果婚禮上丰滑,老公的妹妹穿的比我還像新娘。我一直安慰自己倒庵,他們只是感情好褒墨,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著擎宝,像睡著了一般郁妈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绍申,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天噩咪,我揣著相機與錄音,去河邊找鬼极阅。 笑死胃碾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的筋搏。 我是一名探鬼主播仆百,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拆又!你這毒婦竟也來了儒旬?” 一聲冷哼從身側響起栏账,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤帖族,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挡爵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竖般,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年茶鹃,在試婚紗的時候發(fā)現(xiàn)自己被綠了涣雕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艰亮。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挣郭,靈堂內(nèi)的尸體忽然破棺而出迄埃,到底是詐尸還是另有隱情,我是刑警寧澤兑障,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布侄非,位于F島的核電站,受9級特大地震影響流译,放射性物質(zhì)發(fā)生泄漏逞怨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一福澡、第九天 我趴在偏房一處隱蔽的房頂上張望叠赦。 院中可真熱鬧,春花似錦革砸、人聲如沸除秀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳞仙。三九已至,卻和暖如春笔时,著一層夾襖步出監(jiān)牢的瞬間棍好,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工允耿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留借笙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓较锡,卻偏偏與公主長得像业稼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚂蕴,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348