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

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

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

【OpenGL】Shader实例分析(三)- 等待标识_第1张图片

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      
}  


你可能感兴趣的:(unity3d,OpenGL,GLSL,shader)