public void InitSides() { this.Sides = new List <AreaSide>(); AreaSide rDownSide = new AreaSide() { Index = 0, Points = new List <Vector3>() }; rDownSide.EdgeLine = new Line() { Start = this.Rect.Min, End = new Vector3(this.Rect.Max.x, 0, this.Rect.Min.z) }; // min.z 一样 rDownSide.SortPoints(); this.Sides.Add(rDownSide); AreaSide rRightSide = new AreaSide() { Index = 1, Points = new List <Vector3>() }; rRightSide.EdgeLine = new Line() { Start = new Vector3(this.Rect.Max.x, 0, this.Rect.Min.z), End = this.Rect.Max }; // Max.x 一样 rRightSide.SortPoints(); this.Sides.Add(rRightSide); AreaSide rUpSide = new AreaSide() { Index = 2, Points = new List <Vector3>() }; rUpSide.EdgeLine = new Line() { Start = this.Rect.Max, End = new Vector3(this.Rect.Min.x, 0, this.Rect.Max.z) }; // Max.z 一样 rUpSide.SortPoints(); this.Sides.Add(rUpSide); AreaSide rLeftSide = new AreaSide() { Index = 3, Points = new List <Vector3>() }; rLeftSide.EdgeLine = new Line() { Start = new Vector3(this.Rect.Min.x, 0, this.Rect.Max.z), End = this.Rect.Min }; // Min.x 一样 rLeftSide.SortPoints(); this.Sides.Add(rLeftSide); }
/// <summary> /// 判断一个Side是否和一个Area相交,如果相交了,分别把Side和AABB的边裁减成多个线段 /// </summary> public void Intersect_Side_AreaAABB(AreaSide rSide, AreaAABB rArea) { List <Vector3> rTempPoints = new List <Vector3>(rSide.Points); Line rLine = rSide.EdgeLine; for (int j = 0; j < rArea.Sides.Count; j++) { List <Vector3> rTempAreaPoints = new List <Vector3>(rArea.Sides[j].Points); Line rAreaLine = rArea.Sides[j].EdgeLine; this.GetIntersectPoint_AABB(rLine, rAreaLine, rTempPoints, rTempAreaPoints); rArea.Sides[j].Points = rTempAreaPoints; rArea.Sides[j].SortPoints(); } rSide.Points = rTempPoints; rSide.SortPoints(); }