最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenGL Shader實(shí)現(xiàn)光照發(fā)光體特效

 更新時(shí)間:2022年02月11日 16:25:38   作者:JulyYu  
這篇文章主要介紹了如何通過OpenGL Shader實(shí)現(xiàn)光照發(fā)光體特效,不同于陰影遮蓋,它是利用圓形繪制向內(nèi)部。感興趣的小伙伴可以了解一下

內(nèi)發(fā)光原理

內(nèi)發(fā)光原理簡單概況是:采樣周邊像素alpha取平均值疊加效果。概括來說似乎好像特別簡單,但需要一定的理解和消化。發(fā)光物體可以當(dāng)做是一個(gè)圓形對象,去采集圓形對象周邊像素值。例如已知圓形半徑是R,角度是Angle,然后根據(jù)半徑和角度推導(dǎo)算出當(dāng)前像素坐標(biāo)位置,用當(dāng)前像素坐標(biāo)位置得到透明度再去做計(jì)算。

但其實(shí)在陰影遮罩效果中似乎已經(jīng)介紹過了同樣能夠通過。不同點(diǎn)在于陰影遮蓋是利用圓形繪制向外部暈染而內(nèi)發(fā)光效果是作用于內(nèi)部。

發(fā)光體實(shí)現(xiàn)

首先采用繪制圓的方法實(shí)現(xiàn)RGB疊加??梢钥吹街行奈恢美L制圓的位置顏色較深,向外擴(kuò)散顏色逐漸暗淡。效果雖然不對但已經(jīng)知道下一步該怎么實(shí)現(xiàn)了。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    uv -= 0.5;
    uv.x *= iResolution.x/iResolution.y; 
    vec3 color = vec3(0.);
    float glow = length(uv);
    color += glow;
    gl_FragColor = vec4(color,1.);
}

通過取反操作,可用一個(gè)數(shù)除以length(uv)再相乘一個(gè)小數(shù)來稍微減小值的大小。從最終結(jié)果可以看到所期望的效果。對比之前效果展示相除相當(dāng)于對原結(jié)果取反,原先內(nèi)部是數(shù)值最小,相除之后內(nèi)部數(shù)值變成最大。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    uv -= 0.5;
    uv.x *= iResolution.x/iResolution.y; 
    vec3 color = vec3(0.);
    float glow = 0.05 * 3./length(uv);
    color += glow;
    gl_FragColor = vec4(color,1.);
}

但過渡效果泛白范圍似乎過大了一些繼續(xù)對原算法進(jìn)行優(yōu)化。增加pow方法將數(shù)值變得更小一些。

float getGlow(float dist, float radius, float intensity){
    return pow(radius/dist, intensity);
}

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    uv -= 0.5;
    uv.x *= iResolution.x/iResolution.y; 
    vec3 color = vec3(0.);
    float glow = 0.05 * getGlow(length(uv), 1., 2.);
    color += glow;
    gl_FragColor = vec4(color,1.);
}

擴(kuò)展效果

小太陽

改變發(fā)光位置和發(fā)光顏色模擬實(shí)現(xiàn)太陽光照的效果。

float getGlow(float dist, float radius, float intensity){
    return radius/dist;
}

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

    vec2 uv2 = uv;
    uv2 -=1.0;
    float glow = 0.09 * 3./length(uv2);
    color += (5.0 * vec3(0.02 * glow) + vec3(0.9686, 0.6941, 0.0) * glow);
    gl_FragColor = vec4(color,1.);
}

光源移動(dòng)效果

float getGlow(float dist, float radius, float intensity){
    return radius/dist;
}

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec3 color = texture(iChannel1,uv).rgb;

    float position = sin(iTime) / 2.;
    vec2 uv2 = uv;
    uv2 -=0.5;
    uv2.x *= iResolution.x/iResolution.y; 
    uv2 += position;
    float glow = 0.09 * 3./length(uv2);
    color += (5.0 * vec3(0.02 * glow));
    gl_FragColor = vec4(color,1.);
}

以上就是OpenGL Shader實(shí)現(xiàn)光照發(fā)光體特效的詳細(xì)內(nèi)容,更多關(guān)于OpenGL Shader光照發(fā)光體的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android Service控件用法實(shí)例分析

    Android Service控件用法實(shí)例分析

    這篇文章主要介紹了Android Service控件用法,較為詳細(xì)的分析了Service控件的功能、定義、使用方法與注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • Android 文件存儲(chǔ)與SharedPreferences存儲(chǔ)方式詳解用法

    Android 文件存儲(chǔ)與SharedPreferences存儲(chǔ)方式詳解用法

    SharedPreferences是安卓平臺(tái)上一個(gè)輕量級的存儲(chǔ)類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出
    2021-10-10
  • Android Service生命周期詳解

    Android Service生命周期詳解

    這篇文章主要介紹了Android Service生命周期詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Android電量優(yōu)化提高手機(jī)續(xù)航

    Android電量優(yōu)化提高手機(jī)續(xù)航

    這篇文章主要為大家介紹了Android電量優(yōu)化提高你的手機(jī)續(xù)航示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • android控件封裝 自己封裝的dialog控件

    android控件封裝 自己封裝的dialog控件

    自定義dialog肯定是用的很多了 但是感覺每次做都是很亂單純完成任務(wù)而已,現(xiàn)在封裝了一下以后用到直接copy,需要的朋友可以參考下
    2012-11-11
  • Kotlin開發(fā)的一些實(shí)用小技巧總結(jié)

    Kotlin開發(fā)的一些實(shí)用小技巧總結(jié)

    Kotlin 是一個(gè)基于 JVM 的新編程語言,用 JetBrains 的話來說是「更現(xiàn)代化、更強(qiáng)大,所以下面這篇文章主要給大家總結(jié)介紹了關(guān)于Kotlin的一些開發(fā)實(shí)用小技巧,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 談?wù)凙ndroid Fragments 詳細(xì)使用

    談?wù)凙ndroid Fragments 詳細(xì)使用

    本篇文章主要介紹了Android Fragments 詳細(xì)使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果

    android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果

    這篇文章主要介紹了android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果,需要的朋友可以參考下
    2017-06-06
  • Android實(shí)現(xiàn)圖片在屏幕內(nèi)縮放和移動(dòng)效果

    Android實(shí)現(xiàn)圖片在屏幕內(nèi)縮放和移動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android控制圖片在屏幕內(nèi)縮放和移動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • WebView的幾個(gè)常見功能使用方法

    WebView的幾個(gè)常見功能使用方法

    本篇文章介紹了WebView的幾個(gè)常見功能,WebView的功能很強(qiáng)大,感興趣的小伙伴們可以了解一下。
    2016-11-11

最新評論

福建省| 阳原县| 茂名市| 横峰县| 新宾| 霸州市| 上虞市| 资兴市| 加查县| 九龙县| 南阳市| 赤壁市| 昌邑市| 即墨市| 察哈| 栾城县| 酒泉市| 昭通市| 阳谷县| 洪洞县| 日土县| 黄梅县| 星座| 喀喇| 罗山县| 阿鲁科尔沁旗| 宜都市| 微山县| 高陵县| 昌平区| 尉氏县| 清涧县| 霍州市| 嘉禾县| 理塘县| 乌鲁木齐县| 甘肃省| 长子县| 衡阳市| 林周县| 泰来县|