日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統(tǒng) > Android > 正文

OpenGL Shader實例分析(1)Wave效果

2019-10-21 21:25:02
字體:
供稿:網(wǎng)友

這篇文章主要分析一個Shader,從而感受shader的魅力,并學(xué)習(xí)相關(guān)shader的函數(shù)的用法。

先看Shader運(yùn)行的效果:

OpenGL,Shader,Wave

下面是代碼:

Shader "shadertoy/Waves" { //see https://www.shadertoy.com/view/4dsGzH  CGINCLUDE   #include "UnityCG.cginc"        #pragma target 3.0  struct vertOut {   float4 pos:SV_POSITION;   float4 srcPos;  };  vertOut vert(appdata_base v) {  vertOut o;  o.pos = mul (UNITY_MATRIX_MVP, v.vertex);  o.srcPos = ComputeScreenPos(o.pos);  return o; }  fixed4 frag(vertOut i) : COLOR0 {   fixed3 COLOR1 = fixed3(0.0,0.0,0.3);  fixed3 COLOR2 = fixed3(0.5,0.0,0.0);  float BLOCK_WIDTH = 0.03;   float2 uv = (i.srcPos.xy/i.srcPos.w);   // To create the BG pattern  fixed3 final_color = fixed3(1.0);  fixed3 bg_color = fixed3(0.0);  fixed3 wave_color = fixed3(0.0);   float c1 = fmod(uv.x, 2.0* BLOCK_WIDTH);  c1 = step(BLOCK_WIDTH, c1);  float c2 = fmod(uv.y, 2.0* BLOCK_WIDTH);  c2 = step(BLOCK_WIDTH, c2);  bg_color = lerp(uv.x * COLOR1, uv.y * COLOR2, c1*c2);   // TO create the waves   float wave_width = 0.01;  uv = -1.0 + 2.0*uv;  uv.y += 0.1;  for(float i=0.0; i<10.0; i++) {  uv.y += (0.07 * sin(uv.x + i/7.0 + _Time.y));  wave_width = abs(1.0 / (150.0 * uv.y));  wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);  }  final_color = bg_color + wave_color;   return fixed4(final_color, 1.0); }  ENDCG   SubShader {  Pass {   CGPROGRAM    #pragma vertex vert   #pragma fragment frag   #pragma fragmentoption ARB_precision_hint_fastest     ENDCG  }   }   FallBack Off }

下面進(jìn)行分析:

1. ComputeScreenPos的解析:

用于把三維的坐標(biāo)轉(zhuǎn)化為屏幕上的點。有兩種方式,請參考 官方例子

ComputeScreenPos在UnityCG.cginc文件中定義如下:

// Projected screen position helpers#define V2F_SCREEN_TYPE float4inline float4 ComputeScreenPos (float4 pos) { float4 o = pos * 0.5f; #if defined(UNITY_HALF_TEXEL_OFFSET) o.xy = float2(o.x, o.y*_ProjectionParams.x) + o.w * _ScreenParams.zw; #else o.xy = float2(o.x, o.y*_ProjectionParams.x) + o.w; #endif  #if defined(SHADER_API_FLASH) o.xy *= unity_NPOTScale.xy; #endif  o.zw = pos.zw; return o;}

原理解析(待續(xù))

2. 背景的繪制

2.1) fmod用于求余數(shù),比如fmod(1.5, 1.0) 返回0.5;

2.2) step用于大小的比較,step(a,x) :  0 if x<a; 1 if x>=a; 比如: step(1, 1.2), 返回1; step(1, 0.8) 返回0;

2.3) 結(jié)合fmod和step可以得到一個虛線的效果。 比如要得到虛線段長度為1的代碼如下:

c1 = fmod(x, 2*width); c1=step(width,c1); //其中width為1

那么如果x的范圍是[0,1),c1的值為0;范圍為[1,2),c1的值為1;2為一個周期;

那么fmod起到了制作周期的作用,step計算周期內(nèi)的0和1;

2.4)把2.3中的知識運(yùn)用到2維,就可以計算出方塊。

lerp函數(shù)的用法:lerp( a , b ,f ), f為百分?jǐn)?shù)(取值范圍[0,1]);如果f為0,則lerp返回a,f為1,則返回b。f為0到1之間,就返回a到b之間的值。

代碼中的 lerp(uv.x * COLOR1, uv.y * COLOR2, c1*c2); 其中c1和c2的取值不是為1,就是為0,所以就可以變成網(wǎng)格的情況。 背景繪制如下:

OpenGL,Shader,Wave

3. 波紋的繪制

3.1 ) 坐標(biāo)的轉(zhuǎn)化

uv = -1.0 + 2.0*uv;  // 把原始的uv進(jìn)行擴(kuò)展和位移,得到新的uv。我們的操作就是在新的uv上進(jìn)行的,最終顯示時會映射到原來到uv,請參考下圖

OpenGL,Shader,Wave

3.2 )  畫一條直線:

由于上面把y軸移動到屏幕的中心,所以屏幕的上半部分為正的,下半部分為負(fù)的,代碼如下:

wave_width = abs(1.0 / (50.0 * uv.y));wave_color = fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);

其中50.0是用來控制線的寬度的(數(shù)值越大,線越細(xì)),效果如下:

OpenGL,Shader,Wave

3.3)把直線變?yōu)榍€,并使其動起來:

uv.y += (0.07 * sin(uv.x*10 + _Time.y));wave_width = abs(1.0 / (50.0 * uv.y));wave_color = fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);

效果如下:

OpenGL,Shader,Wave

3.4)多畫幾條曲線,形成波浪:

for(float i=0.0; i<10.0; i++) { uv.y += (0.07 * sin(uv.x + i/7.0 + _Time.y)); wave_width = abs(1.0 / (150.0 * uv.y)); wave_color += fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);}

最終效果請見文章開頭。

其實寫shader,很多時候都是要通過不斷地效果疊加并調(diào)試來達(dá)到效果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久精品久久精品亚洲人| 日韩高清不卡在线| 你懂的亚洲视频| 中文字幕在线观看精品| 国产黄色一级片| 欧美乱大交xxxxx另类| 日韩午夜黄色| 欧美一级手机免费观看片| 国产一卡二卡3卡4卡四卡在线 | 日韩亚洲欧美中文在线| 亚洲免费精品| 在线日韩欧美| 欧美日韩精品在线视频| 欧美日韩中国免费专区在线看| 91精品国产综合久久久久| 7799精品视频天天看| 国产激情在线播放| 久久99蜜桃精品| 亚洲成av人片在线| 午夜一区二区三区免费| 亚洲视频在线观看日本a| 黄色一级大片在线免费看国产一| 亚洲日本精品视频| 一区二区三区在线不卡| 国产在线看一区| 国产网站av| 欧美天堂一区二区| 国产午夜精品视频免费不卡69堂| 精品日韩在线播放| 欧美日韩99| 日韩不卡高清视频| 国产欧美日韩最新| 国产99精品| 日韩国产91| 欧美三级日韩在线| 精品日韩在线观看| 99精品视频99| av中文天堂在线| 国产偷久久久精品专区| 国产高清视频一区二区| www.eeuss影院| 一区在线视频观看| 亚洲热在线观看| 亚洲一区在线观看视频| 日韩高清在线一区二区| 黄色资源在线观看| 91精品国产综合久久精品app| 久草视频在线看| 亚洲午夜av| 99久久精品国产亚洲| 国内精品99| 欧美一级一级性生活免费录像| 日韩欧美中文字幕在线播放| 亚洲一区不卡在线| 欧美日本精品| 色综合久久六月婷婷中文字幕| 国产午夜精品视频| 午夜亚洲一区| 日韩不卡中文字幕| 免费视频中文字幕| 在线欧美日韩精品| 欧美日韩国产中文| 国产亚洲二区| av高清一区| 国产丝袜一区二区| 久久电影国产免费久久电影| 精品视频www| www.xxxx精品| 日韩欧美国产一二三区| 91久久久精品| 日韩视频中文字幕| 日韩精品欧美在线| 快she精品国产999| 日韩国产91| 日韩视频在线免费播放| 国产不卡一区二区在线观看| 国产成人精品999| 色猫猫国产区一区二在线视频| 日韩在线高清视频| 精品国产免费观看一区| 欧美乱大交xxxxx另类| 欧美日韩精品在线观看| 午夜国产欧美理论在线播放| 国产高清在线视频| 97caopor国产在线视频| 国产91欧美| 免费国产成人看片在线| 国产99在线 | 亚洲| 一区二区国产在线| 欧美精选午夜久久久乱码6080| 欧美日韩一级片在线观看| 黄色一区二区在线| 亚洲一区精品在线| 亚洲综合视频一区| 久久久久久久久99精品| 日韩视频精品| aa国产成人| 91精品国产日韩91久久久久久| 精品视频www| 激情婷婷亚洲| 日韩欧美字幕| 国内不卡的二区三区中文字幕| 国产91大片| 91精品国产91综合久久蜜臀| 日韩精品视频网| 国产欧美日韩在线| 麻豆一区二区99久久久久| 国产高清在线视频| 中文字幕在线观看国产| 91精品视频在线| 日韩三级视频在线看| 国产在线看一区| 1024国产在线| 91精品国产91久久久久| 亚洲福利精品在线| 91精品国产欧美日韩| 午夜精品免费视频| 亚洲高清在线观看一区| 99这里有精品视频| 在线看欧美日韩| 欧美三级中文字幕在线观看| www.老鸭窝.com| 日韩中文字幕久久| 中文官网资源新版中文第二页在线观看 | www高清在线视频日韩欧美| 在线视频日韩欧美| 中文字幕 亚洲一区| 亚州黄色一级| 欧美亚洲天堂| 欧美性生交大片免费| 亚洲欧美伊人| 欧美在线观看视频一区| 亚洲欧洲日韩在线| 中文字幕在线观看网址| 最近高清中文在线字幕在线观看| 欧美日韩国产高清视频| 欧美国产中文| 精品1区2区3区| 一本大道一区二区三区| 91精品国产亚洲| 欧美日韩综合视频| 91精品国产综合久久香蕉最新版 | 欧美日韩国产一中文字不卡| 中文精品在线| 在线免费播放av| 午夜影院在线观看欧美| 中文字幕在线国产| 日韩影院二区| 国产 日韩 欧美 综合 一区| 国产日韩免费| 国产欧美日韩亚洲| 精品久久久精品| 国产欧美久久久精品免费| 国产激情久久久| 久久久91精品| 日本熟女一区二区| 在线免费播放av| 亚洲一区不卡在线| 国产在线高清精品| 欧美日韩人人澡狠狠躁视频| 99色在线视频| 91精品国产91| 午夜av一区| 69堂精品视频在线播放| 一区二区三区免费看视频| 九九视频精品免费| 欧美亚洲国产日韩2020| 日韩精品丝袜在线| 国产黄色在线看| 一本久久a久久精品亚洲| 日韩亚洲欧美中文高清在线| 中文字幕亚洲在| 欧美三级在线视频| 亚洲综合在线视频| 欧美在线观看视频一区| 亚洲免费在线视频一区 二区| 精品网站999| 久久人人88| 免费在线视频一级不卡| 欧美1区免费| 中文在线日韩| 在线视频你懂得一区| 欧美日韩国产在线看| 精品在线99| 亚洲电影中文字幕在线观看| 91精品久久久久久蜜臀| 中文字幕狠狠干| 免费在线国产| 欧美日韩日本视频| 亚洲欧洲精品在线| 欧美日韩高清不卡| 国产在线黄色片| 国产一级在线免费观看| 精品网站999www| 欧美午夜精品在线| 精品熟女一区二区三区| 一区二区视频免费看| 日韩精品免费视频一区二区三区| 亚洲黄色一区二区| 亚洲三级网站| 日韩在线中文| 国产www.大片在线| 亚洲久草视频| 亚洲国产www| 日本精品在线播放| 婷婷中文字幕综合| 黄色视屏免费在线观看| av中文资源在线| 日韩精品丝袜在线| 激情国产在线| 成人一区二区不卡免费| 欧美日韩午夜精品| 久久欧美中文字幕| 国产午夜精品久久| 91精品国产网站| 一区二区三区鲁丝不卡| 日韩在线高清| 国产视频一区三区| 韩国av一区二区| 中文字幕在线日韩| 精品免费久久久| 日韩国产成人| 欧美日韩亚洲不卡| 91精品国产高清| 国产一区在线精品| 91精品国产91久久| 国产1卡2卡三卡四卡网站| 色综合天天性综合| 国产亚洲欧美中文| 一区二区不卡视频在线观看| 国产字幕中文| 欧美日韩精品欧美日韩精品一| 国产午夜精品视频| 在线精品观看| 中文亚洲欧美| 久久99精品久久久久婷婷| 精品在线一区二区| 中文字幕第一页在线播放| 蜜臀91精品国产高清在线观看| 91av久久久| 天天摸日日摸狠狠添| 国产字幕在线看| 国产丝袜在线播放| 欧美国产小视频| 国产视频aaa| 一级特黄大欧美久久久| 国产欧美日韩不卡免费| 欧美日韩成人一区| 97视频在线| 精品国产99| 91久久视频| 日韩精品免费观看视频| 国产字幕中文| 欧美日韩午夜在线视频| 欧美一级久久久久久久久大| 中文字幕在线视频网| 中文字幕欧美亚洲| 欧美日韩激情一区| 欧美国产一级| 天天综合天天综合| 欧美日韩在线看| 国产在线欧美日韩| 国产激情久久| 亚洲国产无线乱码在线观看 | 亚洲视频在线观看日本a| 国产在线黄色片| 欧美日韩中文字幕综合视频| 亚洲国产午夜精品| 午夜伊人狠狠久久| 国产欧美三级| 一区二区精品区| 欧美 日韩 国产 在线观看| 国产黄色在线网站| 91精品国产高清91久久久久久| 91午夜在线| 国产一区日韩欧美| 91欧美日韩| 日韩精品在线播放| 日韩av一区在线| 国产永久在线观看| av午夜在线| 成人禁用看黄a在线| 欧美三级免费观看| 国产精品一区二三区| av一区在线| 亚洲综合三区| 快she精品国产999| 亚洲免费中文字幕| 91精品国产综合久久蜜臀| 亚洲福利精品视频| 欧美黄页在线免费观看| 日韩在线一区二区| 国产中文在线视频| 亚洲素人一区二区| 日本不卡免费高清视频| 欧美日韩一二三四| 在线欧美一级视频| 三级网站免费观看| 亚洲第一福利视频在线| 中文字幕国产在线| 国产黄在线播放| 91精品国产99| 精品国产欧美成人夜夜嗨| 中文字幕在线国产| 亚洲三级欧美| 色综合影院在线| 精品色蜜蜜精品视频在线观看| 日韩久久精品视频| 亚洲高清在线观看一区| 亚洲综合日韩欧美| 欧美在线日韩| 中文字幕一区二区三区精品| 亚洲一区视频在线观看视频| 91欧美日韩在线| 精品一二三四区| 国产日韩亚洲欧美| 国产在线www| 欧美一级搡bbbb搡bbbb| 欧美国产一区视频在线观看| 在线不卡一区二区| 中文字幕欧美国内| 综合图区亚洲白拍在线| 国产一区在线不卡| 亚洲国产www| 中文字幕欧美日韩在线不卡| 一区视频在线播放| 国产欧美日韩精品综合| 日韩视频在线观看视频| 在线视频国内一区二区| 亚洲国产欧美日韩精品| 在线日韩欧美| 日韩一级免费视频| 精品久久久三级| 国产一级视频| 欧美乱大交xxxxx另类| 香蕉av一区| 中文在线一区二区| 青青国产91久久久久久| 999精品色在线播放| 国产裸体歌舞团一区二区| 亚洲成年网站在线观看| 韩日中文字幕第一页| 日本亚洲视频在线| 国产一级粉嫩xxxx| 一区在线免费| 日韩欧美一级在线| 不卡在线视频| 中文字幕亚洲乱码| 国产aa精品| 国产网站av| 欧美日韩在线第一页| aa国产成人| 天天综合天天| 日韩精品视频网| 一区二区三区鲁丝不卡| 国产日韩精品在线| 亚洲免费精品| 欧美专区中文字幕| 99pao成人国产永久免费视频| 日韩av一区二| 国产在线小视频| 国产在线拍偷自揄拍精品| 欧美日韩三级视频| 在线视频亚洲| 国产婷婷色一区二区三区在线| 在线国产99| 欧美亚洲天堂| 欧美一卡2卡3卡4卡| 一级日本免费的| 首页国产欧美久久| 99视频一区| 精品久久在线观看| 在线一区免费| 中文在线一区二区| 精品在线一区二区| 亚洲欧洲精品在线| 国产中文在线播放| www.中文字幕在线观看| 国产一区三区三区| 国产视频二区| 日韩国产在线不卡视频| 日韩免费不卡avV| 日韩中文字幕在线视频观看| 欧美国产亚洲一区| 亚洲成a人片在线www| 日韩欧美色综合网站| 高清一区二区| 亚洲.国产.中文慕字在线| 久久激情中文| 中文字幕第一页在线| 欧美精选午夜久久久乱码6080| 一级日韩一级欧美| 久久麻豆视频| 精品日韩视频| 91久久大香伊蕉在人线| 欧美一级日韩不卡播放免费| 国产日韩三级| 精品av中文字幕在线毛片| 国产三级在线| 一级片免费在线播放|