예제 #1
0
        public void BuildKDTree()
        {
            var triangles = new List <Triangle>(Triangles);

            foreach (var t in triangles)
            {
                t.CalcCachedData();
            }
            KDTree             = new Common.KDTree <Triangle>();
            KDTree.Intersector = (object a, object b, out object i) =>
            {
                var bc = (Common.Bounding.Chain)a;
                return(Common.Intersection.Intersect((BoundingSphere)bc.Boundings[0], (Ray)b, out i) &&
                       Triangle.Intersect((Triangle)bc.Boundings[1], (Ray)b, out i));
            };
            KDTree.Translation = (object b) =>
            {
                var bc = (Common.Bounding.Chain)b;
                return(Triangle.Translation((Triangle)bc.Boundings[1]));
            };
            KDTree.InitFromList(triangles,
                                (t) => new Common.Bounding.Chain(t.BoundingSphere, t)
            {
                Shallow = true
            }
                                //(t) => t
                                );
        }
예제 #2
0
 public static bool Intersect(Triangle triangle, Ray ray, out object intersection)
 {
     Common.RayIntersection r = new Common.RayIntersection();
     Vector2 uv;
     bool hit = triangle.Intersect(ray, false, out r.Distance, out uv);
     r.Userdata = uv;
     intersection = r;
     return hit;
 }
예제 #3
0
        public static bool Intersect(Triangle triangle, Ray ray, out object intersection)
        {
            Common.RayIntersection r = new Common.RayIntersection();
            Vector2 uv;
            bool    hit = triangle.Intersect(ray, false, out r.Distance, out uv);

            r.Userdata   = uv;
            intersection = r;
            return(hit);
        }