欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果

 更新時(shí)間:2022年02月11日 16:16:00   作者:JulyYu  
這篇文章主要介紹了如何利用OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)OpenGL有一定幫助,需要的可以參考一下

smoothstep另一種用法

在之前OpenGL Shader-抗鋸齒實(shí)現(xiàn)文章中所介紹的那樣:為了抗鋸齒效果可以用smoothstep函數(shù)對(duì)繪制形狀進(jìn)行平滑過渡來實(shí)現(xiàn)。其中也提到了當(dāng)smoothstep函數(shù)中入?yún)?code>a和b范圍過大時(shí)就會(huì)出現(xiàn)漸變效果。如OpenGL Shader-抗鋸齒實(shí)現(xiàn)中所展示的效果:

遮罩效果實(shí)現(xiàn)

看到這個(gè)效果后似乎可以利用smoothstep函數(shù)中ab入?yún)⑷〈蠓秶鷣韺?shí)現(xiàn)不一樣的特效能力。例如可以使用該特點(diǎn)來實(shí)現(xiàn)類似于老電影中遮罩效果,在視圖邊緣出現(xiàn)一層朦朧遮罩中間最亮四周有一層淡淡的陰影效果。

實(shí)現(xiàn)原理其實(shí)就是利用smoothstep函數(shù)入?yún)⑹褂么蠓秶担诶L制圓基礎(chǔ)上改造處理。底色使用白色vec3(1.),陰影遮蓋使用黑色vec3(1.)就能達(dá)到陰影遮罩效果了。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;

    vec4 texture = texture(iChannel2,uv);
    uv -= 0.5;
    uv.x *= iResolution.x/iResolution.y;
    float m = 0.4;
    m = smoothstep(m-0.2,m+0.2,length(uv) - 0.2);
    vec3 pixel = mix(vec3(1.),vec3(0.),m);
    gl_FragColor = vec4(pixel,1.0);
    
}

除了采用smoothstep函數(shù)實(shí)現(xiàn)外,下面還有一種方法也能實(shí)現(xiàn)陰影遮罩效果。如下glsl所示 對(duì)顏色向量vec4 texturevignette相乘,相當(dāng)于改變色值通道亮度達(dá)到明暗對(duì)比;同時(shí)對(duì)于取值uv.y-0.5可以理解越接近中心取值越接近為0,那么計(jì)算得出的vignette就越大約接近為1。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec4 texture = vec4(1.);
    float vigAmt = 4.0;
    float vignette = (1.0-vigAmt*(uv.y-0.5)*(uv.y-0.5))*(1.0-vigAmt*(uv.x-0.5)*(uv.x-0.5));
    texture *= vignette;
    gl_FragColor = texture;
}

通過對(duì)照也能發(fā)現(xiàn)采用圓形公式實(shí)現(xiàn)遮罩是有一定圓弧趨勢(shì),而另一種遮罩是偏向矩形,在特效效果上略有差異。以此類推肯定還可以根據(jù)這種方式來實(shí)現(xiàn)星型,愛心等形狀遮罩。

smoothstep

vignette

效果擴(kuò)展

最后可以增加一個(gè)time時(shí)間入?yún)?,通過vigAmt值不斷變化vignette強(qiáng)弱來實(shí)現(xiàn)忽明忽暗的效果,會(huì)有一種在看老電影的感受。

#define time iTime
void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec4 texture = texture(iChannel2,uv);
    float vigAmt = 4.0 + 0.3 * sin(time + 5.0 * cos(time*5.0));
    float vignette = (1.0-vigAmt*(uv.y-0.5)*(uv.y-0.5))*(1.0-vigAmt*(uv.x-0.5)*(uv.x-0.5));
    texture *= vignette;
    gl_FragColor = texture;
}

到此這篇關(guān)于OpenGL Shader實(shí)現(xiàn)陰影遮罩效果的文章就介紹到這了,更多相關(guān)OpenGL Shader陰影遮罩內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 源碼如何編譯調(diào)試

    Android 源碼如何編譯調(diào)試

    本文主要介紹Android 源碼編譯調(diào)試,這里對(duì)Android 源碼的編譯以及調(diào)試做了詳細(xì)的流程詳解,有需要的小伙伴可以參考下
    2016-08-08
  • Android 文件存儲(chǔ)及常見問題解決

    Android 文件存儲(chǔ)及常見問題解決

    這篇文章主要介紹了Android 文件存儲(chǔ)及常見問題解決的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Android掛斷電話最新實(shí)現(xiàn)方法

    Android掛斷電話最新實(shí)現(xiàn)方法

    大家好,本篇文章主要講的是Android掛斷電話最新實(shí)現(xiàn)方法,感興趣的同學(xué)感快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 淺析KJFrameForAndroid框架如何高效加載Bitmap

    淺析KJFrameForAndroid框架如何高效加載Bitmap

    Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進(jìn)行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件。本文主要是從KJFrameForAndroid框架中分析高效加載Bitmap的方法
    2014-07-07
  • Android中FoldingLayout折疊布局的用法及實(shí)戰(zhàn)全攻略

    Android中FoldingLayout折疊布局的用法及實(shí)戰(zhàn)全攻略

    這篇文章主要介紹了Android中FoldingLayout折疊布局的用法及實(shí)例,通過FoldingLayout我們可以制作出炫酷的菜單折疊效果,文中的例子講解得非常詳細(xì),需要的朋友可以參考下
    2016-02-02
  • Android自定義帶有圓形進(jìn)度條的可長(zhǎng)按控件功能

    Android自定義帶有圓形進(jìn)度條的可長(zhǎng)按控件功能

    這篇文章主要介紹了Android自定義帶有圓形進(jìn)度條的可長(zhǎng)按控件,思路很簡(jiǎn)單,使用簡(jiǎn)單的畫筆工具就可以完成這個(gè)控件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-06-06
  • Android打造炫酷進(jìn)度條效果

    Android打造炫酷進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android打造炫酷進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn))

    Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn))

    這篇文章主要介紹了Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn)),本文直接給出效果圖和兩種語(yǔ)言的實(shí)現(xiàn)代碼及布局代碼,需要的朋友可以參考下
    2015-06-06
  • Kotlin?launch原理全面分析

    Kotlin?launch原理全面分析

    在Android開發(fā)中,launch是我們經(jīng)常用的,今天來看看它是什么原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • Android checkbox的listView(多選,全選,反選)具體實(shí)現(xiàn)方法

    Android checkbox的listView(多選,全選,反選)具體實(shí)現(xiàn)方法

    由于listview的一些特性,剛開始寫這種需求的功能的時(shí)候都會(huì)碰到一些問題,重點(diǎn)就是存儲(chǔ)每個(gè)checkbox的狀態(tài)值,在這里分享出了完美解決方法:
    2013-06-06

最新評(píng)論