// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Unlit/polygon" { Properties { //定义基本属性,可以从编辑器里面进行设置的变量 // _MainTex ("Texture", 2D) = "white" {} } CGINCLUDE //从应用程序传入顶点函数的数据结构定义 struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; //从顶点函数传入片段函数的数据结构定义 struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; //定义贴图变量 sampler2D _MainTex; // float4 _MainTex_ST; //定义与脚本进行通信的变量 vector Value[99]; int PointNum =0; //计算两点间的距离的函数 float Dis(float4 v1,float4 v2) { return sqrt(pow((v1.x-v2.x),2)+pow((v1.y-v2.y),2)); } //绘制线段 bool DrawLineSegment(float4 p1, float4 p2, float lineWidth,v2f i) { float4 center = float4((p1.x+p2.x)/2,(p1.y+p2.y)/2,0,0); //计算点到直线的距离 float d = abs((p2.y-p1.y)*i.vertex.x + (p1.x - p2.x)*i.vertex.y +p2.x*p1.y -p2.y*p1.x )/sqrt(pow(p2.y-p1.y,2) + pow(p1.x-p2.x,2)); //小于或者等于线宽的一半时,属于直线范围 float lineLength = sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2)); if(d<=lineWidth/2 && Dis(i.vertex,center)testy) != (verty[j]>testy)) && (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) c = !c; } return c; } v2f vert (appdata v) { v2f o; //将物体顶点从模型空间换到摄像机剪裁空间,也可采用简写方式——o.vertex = UnityObjectToClipPos(v.vertex); /*o.vertex = UnityObjectToClipPos(v.vertex); */ o.vertex = v.vertex; //2D UV坐标变换,也可以采用简写方式——o.uv = TRANSFORM_TEX(v.uv, _MainTex); //o.uv = v.uv.xy * _MainTex_ST.xy + _MainTex_ST.zw; return o; } fixed4 frag (v2f i) : SV_Target { //绘制多边形顶点 //for(int j=0;j