zoukankan      html  css  js  c++  java
  • [小明学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.

  • 相关阅读:
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第5次作业
    4
    第三次
    2
    11
    第五次作业
  • 原文地址:https://www.cnblogs.com/WongSiuming/p/5054114.html
Copyright © 2011-2022 走看看