예제 #1
0
            public List <CsgPolygon> ClipPolygons(List <CsgPolygon> polygons)
            {
                if (Plane == null)
                {
                    return(new List <CsgPolygon>(polygons));
                }

                var frontPolygons = new List <CsgPolygon>();
                var backPolygons  = new List <CsgPolygon>();

                for (int i = 0; i < polygons.Count; i++)
                {
                    Plane.SplitPolygon(polygons[i], frontPolygons, backPolygons, frontPolygons, backPolygons);
                }

                if (Front != null)
                {
                    frontPolygons = Front.ClipPolygons(frontPolygons);
                }
                if (Back != null)
                {
                    backPolygons = Back.ClipPolygons(backPolygons);
                }
                else
                {
                    backPolygons.Clear();
                }

                frontPolygons.AddRange(backPolygons);
                return(frontPolygons);
            }
예제 #2
0
 public void ClipTo(CsgNode bsp)
 {
     Polygons = bsp.ClipPolygons(Polygons);
     Front?.ClipTo(bsp);
     Back?.ClipTo(bsp);
 }