UNITY3D shader代码例子<三> shader旋转动画

Shader "Custom/RotateShader" {       
       Properties
       {
           _MainTex("Main Tex",2D)="Write"{}
           //给unity3d提供一个滑动条来控制旋转速度
           _RotateSpeed("Rotate Speed",Range(0,10))=5
       }
       SubShader
       {
         Tags{"Queue"="Transparent" "RenderType"="Transparent"}
         Blend SrcAlpha OneMinusSrcAlpha
         Pass
         {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            sampler2D _MainTex;
            float _RotateSpeed;
            struct v2f
            {
               float4 pos:POSITION;
               float4 uv:TEXCOORD;
            };
            v2f vert(appdata_base v)
            {
               v2f o;
               o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
               o.uv=v.texcoord;
               return o;
            }
            half4 frag(v2f i):COLOR
            {   //定义一个float2来存储顶点的UV的XY,减去0.5是因为uv旋转的起始是1,1为中心,XY都减去0.5是把中心点移到中心。
               float2 uv=i.uv.xy -float2(0.5,0.5);
              //        _Time   是一个内置的float4时间,X是1/20,Y是1倍,Z是2倍,W是3倍           
              //        旋转矩阵的公式是: COS() -  sin() , sin() + cos()     顺时针
              //                                             COS() +  sin() , sin() - cos()     逆时针     

               uv = float2(    uv.x*cos(_RotateSpeed * _Time.y) - uv.y*sin(_RotateSpeed*_Time.y),
                                      uv.x*sin(_RotateSpeed * _Time.y) + uv.y*cos(_RotateSpeed*_Time.y) );
               //再加回来

               uv += float2(0.5,0.5);

               half4 c=tex2D(_MainTex,uv);
               return c;
            }
            ENDCG        
         }                  
     }
}


//旋转后发现,四个顶点周围不太正确,哪是因为UNITY3D默认采取了 重叠纹理寻址模式,需要再贴图里改为夹取纹理寻址模式,贴图的 wrap Mode改为clamp


//具体可参见这篇文章   http://www.cnblogs.com/jdmei520/archive/2013/01/12/2857352.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值