亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

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

這篇文章主要分析一個(gè)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)化為屏幕上的點(diǎn)。有兩種方式,請(qǐng)參考 官方例子

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可以得到一個(gè)虛線的效果。 比如要得到虛線段長(zhǎng)度為1的代碼如下:

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

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

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

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

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)行的,最終顯示時(shí)會(huì)映射到原來到uv,請(qǐng)參考下圖

OpenGL,Shader,Wave

3.2 )  畫一條直線:

由于上面把y軸移動(dòng)到屏幕的中心,所以屏幕的上半部分為正的,下半部分為負(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)榍€,并使其動(dòng)起來:

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);}

最終效果請(qǐng)見文章開頭。

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

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一区二区日韩av| 色婷婷综合在线观看| yellow中文字幕久久| 免费在线黄网站| 先锋影音在线资源站91| 亚洲最大福利视频网站| 亚洲欧洲在线免费| 成人无遮挡免费网站视频在线观看| 91资源在线视频| 黄色三级网站| 不卡福利视频| 91热爆在线观看| 亚洲护士老师的毛茸茸最新章节| 黄色一级大片在线免费看国产| 亚洲天天做日日做天天谢日日欢| 99精品女人在线观看免费视频| av在线看网址| 韩国av免费在线| 波多野结衣片子| 97成人在线观看| 91丨九色丨蝌蚪富婆spa| 欧美亚洲一区二区三区四区| 一本一道久久a久久精品综合蜜臀| 无圣光视频在线观看| 亚洲精品视频区| 国产三级精品在线观看| 欧美精品成人一区二区三区四区| 亚洲av永久无码精品| 久久99亚洲网美利坚合众国| 99精品一区二区| 国产精品亚洲电影久久成人影院| 第四色日韩影片| 97碰碰碰免费色视频| 国产精品播放| 免费人成黄页网站在线一区二区| 成人性做爰片免费视频| 日韩在线视频线视频免费网站| 一区二区成人免费视频| 国产理论视频在线观看| 欧美激情欧美狂野欧美精品| 亚洲美女主播视频免费观看| 日韩激情一区二区| 任你躁av一区二区三区| 国产在线精品一区二区夜色| 泷泽萝拉在线播放| 超碰人人在线| 欧美日韩国产精品一区二区三区四区| 亚洲综合色网站| 一级黄色大片网站| 666av成人影院在线观看| 99免费看香蕉视频| 亚洲人成在线网站| 美女国产一区二区三区| 九九精品在线观看| 国内a∨免费播放| av毛片午夜不卡高**水| 中文字幕在线播放视频| 在线免费不卡电影| 2020日本在线视频中文字幕| 国产 高清 精品 在线 a| 亚洲国产精品第一区二区| 国产成人在线免费视频| 国产情侣一区二区| 91在线不卡| 日韩欧美国产小视频| 欧洲vodafone精品| 日韩欧美在线123| 欧美久色视频| 一区二区三区四区五区精品视频| 天天综合在线观看| 综合欧美国产视频二区| 北条麻妃视频在线| 国产精选久久| 国产精品女同一区二区| 欧美高清一级片在线观看| 久久久久无码精品国产| 国产91亚洲精品| 另类亚洲自拍| sm在线播放| 91美女在线视频| 少妇愉情理伦三级| 在线亚洲精品自拍| 97超碰人人看人人| 亚洲av无码片一区二区三区| 极品盗摄国产盗摄合集| 久久国产精品久久久久| 日韩精品一区国产麻豆| 欧美日韩www| 精品一区二区三区的国产在线观看| 成人短视频在线| 在线播放中文字幕| 88av在线播放| 18av在线播放| av网站在线播放| 在线观看视频二区| sese在线视频| 香蕉视频网站在线播放| 亚洲欧洲日产国码无码久久99| 亚洲一区亚洲二区亚洲三区| 国精品产品一区| 欧美午夜精品一区| 亚洲男人的天堂网| 欧美日韩另类图片| 亚洲国产高清一区| 婷婷亚洲精品| 婷婷久久综合九色综合绿巨人| eeuss草民免费| 亚洲一区二区三区观看| 黄色小视频免费观看| 粉嫩的18在线观看极品精品| 国产精品手机播放| 少妇精品无码一区二区免费视频| 久久亚洲国产视频| 少妇高潮喷水久久久久久久久久| 久久久精品黄色| 国产精品久久久久久久99| 亚洲精品**不卡在线播he| av日韩在线网站| 欧美一区二三区| 非洲一级黄色片| 天堂在线观看视频观看www| 懂色中文一区二区在线播放| 国产视频三级在线观看播放| 国产三级短视频| 你懂的在线观看网站| 亚洲高清资源| 国产一区在线观| 中文字幕av亚洲精品一部二部| 黄色一级大片在线免费看国产一| 午夜精品久久久久久久蜜桃app| 亚洲精品国产精品国自产观看| 欧美一区免费观看| 91精品国产自产在线老师啪| 青青草国产精品视频| 成人激情自拍| 日韩黄色网络| 免费一级做a爰片久久毛片潮| 一本一本久久a久久精品综合麻豆| 欧美一区二区三区日韩| 粉嫩粉嫩芽的虎白女18在线视频| 天天色天天操综合| 久久久久亚洲精品一区二区三区| 欧美日韩中文不卡| 日本高清不卡视频| 欧美性猛交p30| 呦呦在线视频| 精品久久久久久亚洲综合网| 国产日本在线| 亚洲精品乱码久久| 国产精品一区二区三区美女| 国产黄色av网站| 日韩妆和欧美的一区二区| 国产在线一区观看| 精品免费av在线| 国产91综合一区在线观看| 精品国内自产拍在线观看视频| 日本少妇毛茸茸| 国产精品亚洲激情| 全网国产福利在线播放| 欧美乱妇18p| 这里视频有精品| 亚洲精品乱码久久久久久黑人| 日本激情免费| 亚洲欧美综合图区| 亚洲人av在线| 天天爽天天爽夜夜爽| 蜜桃在线视频| 在线观看免费成人av| 无码人妻aⅴ一区二区三区| 国产精品丝袜黑色高跟鞋| 国产精品三区在线| 91高清在线免费观看| 日韩另类视频| 日本一区二区免费不卡| 久久www免费人成看片高清| 国产精品久久婷婷| yellow在线观看网址| 亚洲日本丝袜连裤袜办公室| 日韩精品欧美精品| 亚洲天堂av免费在线观看| 日韩视频免费中文字幕| 喜爱夜蒲2在线| 一区二区三区在线免费看| 国产人成视频在线观看| 日本精品视频一区二区三区| 伊人一区二区三区| 先锋av资源| 欧美国产视频在线| 国产伦精品一区二区三区视频| 欧美插插视频| 高清国产在线一区| 久久精品国产一区二区电影| 国产欧美日韩精品一区二区三区| 亚洲aa在线观看| 91麻豆文化传媒在线观看| 久久久久久久综合狠狠综合| 91精品久久久久久久久中文字幕| 波多野结衣三级视频| 欧美三区美女| 又黄又湿又爽又免费又色| 成人直播在线观看| 制服视频三区第一页精品| 午夜私人影院久久久久| 久久资源中文字幕| 成人自拍视频| 日本精品999| 中文字幕1区2区| 免费黄色影片在线| 欧美激情视频网| 国模私拍视频在线播放| 国产福利久久久| 国产精品久久久久婷婷二区次| 空姐吹箫视频大全| 琪琪第一精品导航| 青春草在线观看| 久久99精品久久久| 青青一区二区三区| 成人精品美女隐私视频| 中文在线一区| 亚洲欧美日韩一区二区三区在线| 999精品视频| 国产视频一区二区| 亚洲成人av一区二区三区| 黄色片视频网站| 超碰人人人人人人人| 精品日韩视频| 欧美日韩国产美女| 91精品国自产在线偷拍蜜桃| 欧美深深色噜噜狠狠yyy| 三级视频在线观看| 久久精品三级| 久久久久亚洲av片无码下载蜜桃| 欧美日韩国产精品自在自线| 人人妻人人做人人爽| 婷婷综合视频| 日本视频www色| 亚洲永久视频| 国产美女视频免费| 四季久久免费一区二区三区四区| 日本aⅴ精品一区二区三区| 欧美女人天堂| 国产精品㊣新片速递bt| 91精品国产美女浴室洗澡无遮挡| 久久久久久国产精品日本| 国产欧美综合在线观看第十页| 人人干人人插| 欧美性猛交xxxx乱大交少妇| 成人亚洲一区二区一| 男人的天堂va在线| 亚州视频一区二区三区| 在线欧美小视频| 超碰97成人| 国产在线成人| www.先锋影音av| 国产精品久久久久久久av大片| 国产精品xxxxxx| 91极品视频在线观看| 亚洲高清电影| 盗摄精品av一区二区三区| 在线碰免费视频在线观看| 午夜日韩影院| 国产精品av一区二区三区| 国产影视精品一区二区三区| 亚洲精品之草原avav久久| av成人毛片| 91视频国产一区| 色狠狠色狠狠综合| 久久精品人人做人人综合| 在线成人欧美| 精品在线观看国产| 国产福利视频一区| 色婷婷综合久久久久中文一区二区| 亚洲色婷婷一区二区三区| 大肉大捧一进一出好爽| 人人澡人人澡人人看欧美| 国内三级在线观看| 高清在线观看免费| 日韩在线卡一卡二| 一区二区在线电影| 日韩视频免费在线| 欧美三级又粗又硬| 久久久久久这里只有精品| 国产福利视频导航| 亚洲精品偷拍视频| 视频一区二区国产| 亚洲成av人片一区二区梦乃| 波多野结衣成人在线| 天堂一区二区三区四区| 日本在线观看www| 亚洲黄色成人久久久| 亚洲老妇激情| 亚洲国产精品99久久久久久久久| 欧美顶级大胆免费视频| 日韩欧美一级二级三级久久久| 国产精品密蕾丝袜| 成人在线免费播放视频| 久久久久久99精品| 最新天堂网www| 国产成人精品自拍| 羞羞网站免费观看| 激情亚洲一区二区三区四区| jizz欧美性11| 国产精品久久久久久久久久精爆| 精品99一区二区三区| 东京热一区二区三区四区| 91视频论坛| 成人mm视频在线观看| 精品国产免费人成电影在线观...| 97视频在线观看免费高清完整版在线观看| 三级做a全过程在线观看| 国产盗摄视频一区二区三区| 国产精品一区二区欧美黑人喷潮水| 亚洲人精选亚洲人成在线| 美女日韩欧美| 神马电影在线观看| 欧美日韩国产精品一区| 久久久精品人妻一区二区三区四| 色欧美片视频在线观看| 天堂a√中文在线| 日本一区二区不卡高清更新| 360天大佬第二季在线观看| 久久不卡日韩美女| 天使萌一区二区三区免费观看| 欧美日韩免费| 欧美日韩国产一二三| 日韩欧美一级二级三级久久久| 欧美激情18p| 欧美另类videos粗暴黑人|