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 ); }
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; }
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); }