[小明学Shader]11.圆角

原文连接:http://blog.csdn.net/mobanchengshuang/article/details/38731035

1.代码

 1 Shader"Custom/圆角"{
 2     properties{
 3         _MainTex("Base(RGB)",2D)="white"{}
 4         _Value("Cut Value",range(0,0.25))=0.1
 5     }
 6     CGINCLUDE
 7     #include "UnityCG.cginc"
 8     
 9             sampler2D _MainTex;
10             float _Value;
11     
12             struct v2f {
13                 float4 pos:SV_POSITION;
14                 float2 uv:TEXCOORD;
15             };
16     
17             v2f vert(appdata_full v){
18                 v2f o;
19                 o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
20                 o.uv=v.texcoord;
21                 return o;
22             }
23     
24             float4 frag(v2f i):COLOR{
25                 float4 c=tex2D(_MainTex,i.uv);
26                 
27                 //计算圆角
28                 float2 uv=i.uv-0.5;
29                 float remain=0.5-_Value;
30                 //计算当前uv是不是在四个边角
31                 float mx=step(remain,abs(uv[0]));
32                 float my=step(remain,abs(uv[1]));
33                 //计算当前uv在四个边角的相对uv
34                 float rx = fmod(uv.x, remain); 
35                 float ry = fmod(uv.y, remain);     
36                 //若在边角,且距离顶点的距离大于value值,则不显示
37                 float fillAlpha=1-mx*my*step(_Value*_Value,rx*rx+ry*ry);
38                 
39                 c.a=fillAlpha;
40                 
41                 return c;
42             }
43     ENDCG
44     
45     subshader{
46         Tags{"Queue"="Transparent"}
47         Blend SrcAlpha OneMinusSrcAlpha
48         pass{
49             CGPROGRAM
50             #pragma vertex vert
51             #pragma fragment frag
52             
53             ENDCG
54         }
55     }
56     
57     FallBack "Diffuse"
58 }

2.效果

3.原理

计算出下图所示中紫色区域内点距离两个绿色点的距离,大于目标值的不显示即可.在计算相对于交点的坐标时,通过求莫的方式即可获得(fmod不会改变符号).所以本方法所能画的最大半径是0.25.

转载于:https://www.cnblogs.com/WongSiuming/p/5054114.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值