【OpenGL】Shader实例分析(三)- 等待标识

来源:互联网 发布:数据库原理及技术ppt 编辑:程序博客网 时间:2024/04/28 15:54

转发请保持地址:http://blog.csdn.net/stalendp/article/details/22687059

写了个等待标识,不过效率估计不是很高。结果如下:


Shader "stalendp/waitIcons" {       CGINCLUDE                      #include "UnityCG.cginc"                            #pragma target 3.0                struct v2f {                  float4 pos:SV_POSITION;                  float2 uv : TEXCOORD0;             };                    v2f vert(appdata_base v) {                  v2f o;                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);                o.uv = v.texcoord.xy;                return o;             }                      fixed calcDot(fixed a, fixed ca, fixed2 uv) {        a /= 57.295779513;        ca /= 57.295779513;        fixed tt = 180/57.295779513;        uv = (fixed2(cos(a), sin(a)) * 0.2+ uv)*10;        fixed adit = tt*2*step(tt, a-ca);        fixed r = 1-step(ca + adit, a);        r *= lerp(0.2, -1, saturate((ca-a+adit)/25))*2;        return smoothstep(r-0.2, r, length(uv.xy));        }              fixed4 frag(v2f input) : COLOR0 {                  float2 uv = input.uv.xy - float2(0.5);              float rx = fmod(uv.x, 0.4);              float ry = fmod(uv.y, 0.4);              float mx = step(0.4, abs(uv.x));              float my = step(0.4, abs(uv.y));              float alpha = 1- mx*my*step(0.1, length(half2(rx,ry)));              alpha*=0.9;                          fixed4 foreColor = fixed4(1);            fixed4 bgColor = fixed4(fixed3(0.4),alpha);            fixed4 result = bgColor;                        fixed ca = fmod(_Time.y, 2)*180;           bgColor = lerp(foreColor, bgColor, calcDot(0, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(30, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(60, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(90, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(120, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(150, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(180, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(210, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(240, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(270, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(300, ca, uv));bgColor = lerp(foreColor, bgColor, calcDot(330, ca, uv));                        return bgColor;            }          ENDCG                  SubShader {             LOD 200           Tags {"Queue" = "Transparent"}           ZWrite Off           Blend SrcAlpha OneMinusSrcAlpha               Pass {                    CGPROGRAM                          #pragma vertex vert                    #pragma fragment frag                    #pragma fragmentoption ARB_precision_hint_fastest                           ENDCG                }                  }             FallBack Off      }  


1 0
原创粉丝点击