绘制一个正方形,原理也很简单,判断点是否在尺寸所在范围内即可,先获取到(点坐标-中心坐标)的向量,对x,y两个轴的值与size进行判断。
Shader "Unlit/shader5"
{
///绘制正方形
Properties
{
_Center("Center",Vector)=(0.5,0.5,0,0)
_RectColor("RectColor",Color)=(1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f{
float4 vertex:SV_POSITION;
float4 position:TEXCOORD1;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v){
v2f o;
o.vertex=UnityObjectToClipPos(v.vertex);
o.position=v.vertex;
o.uv=v.texcoord;
return o;
}
//中心点
float4 _Center;
//颜色
fixed4 _RectColor;
//绘制正方形
float rect(float2 pt,float2 size,float2 center){
float2 p=pt-center;
float2 halfsize=size*0.5;
float hotz=step(-halfsize.x,p.x)-step(halfsize.x,p.x);
float vert=step(-halfsize.y,p.y)-step(halfsize.y,p.y);
return hotz*vert;
}
fixed4 frag (v2f i) : SV_Target
{
float2 pos=i.position.xy;
float size=0.4;
float inRect=rect(pos,size,_Center);
fixed3 col=fixed3(1,1,0)*inRect;
return fixed4(col,1.0);
}
ENDCG
}
}
}
绘制长方形也是同样的原理
Shader "Unlit/shader5"
{
///绘制正方形
Properties
{
_Center("Center",Vector)=(0.5,0.5,0,0)
_RectColor("RectColor",Color)=(1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f{
float4 vertex:SV_POSITION;
float4 position:TEXCOORD1;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v){
v2f o;
o.vertex=UnityObjectToClipPos(v.vertex);
o.position=v.vertex;
o.uv=v.texcoord;
return o;
}
//中心点
float4 _Center;
//颜色
fixed4 _RectColor;
//绘制正方形
float rect(float2 pt,float2 size,float2 center){
float2 p=pt-center;
float2 halfsize=size*0.5;
float hotz=step(-halfsize.x,p.x)-step(halfsize.x,p.x);
float vert=step(-halfsize.y,p.y)-step(halfsize.y,p.y);
return hotz*vert;
}
float Longrect(float2 pt,float width,float height,float2 center){
float2 p=pt-center;
float2 halfwidth=width*0.5;
float2 halfheight=height*0.5;
float hotz=step(-halfwidth.x,p.x)-step(halfwidth.x,p.x);
float vert=step(-halfheight.y,p.y)-step(halfheight.y,p.y);
return hotz*vert;
}
fixed4 frag (v2f i) : SV_Target
{
float2 pos=i.position.xy;
float size=0.4;
//float inRect=rect(pos,size,_Center);
float longrect=Longrect(pos,0.4,0.2,_Center);
fixed3 col=fixed3(1,1,0)*longrect;
return fixed4(col,1.0);
}
ENDCG
}
}
}