Ejemplo n.º 1
0
        void Test(OctreeNode<Voxel> node, IEnumerable<Triangle> triangles)
        {
            if (node.Level > maxLevel) return;

            var result = triangles.Where(t => t.Intersects(node.AABB)).ToList();
            if (result.Any())
            {
                if (node.Level == maxLevel)
                {
                    node.Fill();
                }
                else
                {

                    if (node.Children == null)
                    {
                        node.Split();
                    }
                    Parallel.ForEach(node.Children, child => Test(child, result));
                }

            }
        }
Ejemplo n.º 2
0
        void Test2(OctreeNode<Voxel> node, Func<OctreeNode<Voxel>, bool> func)
        {
            if (node.Level > maxLevel) return;

            if (func(node))
            {
                if (node.Level == maxLevel)
                {
                    node.Fill();
                }
                else
                {

                    if (node.Children == null)
                    {
                        node.Split();
                    }
                    Parallel.ForEach(node.Children, child => Test2(child, func));
                }
            }

            //else
            //{
            //    var result = triangles.Where(t => func(node)).ToList();
            //    if (result.Any())
            //    {
            //        if (node.Children == null)
            //        {
            //            node.Split();
            //        }
            //        Parallel.ForEach(node.Children, child => Test2(child, result, func));
            //    }
            //}
        }
Ejemplo n.º 3
0
 void Intersect(OctreeNode<Voxel> node, Triangle tri)
 {
     if(node.Level > maxLevel) return;
     if (tri.Intersects(node.AABB))
     {
         if (node.Level == maxLevel)
         {
             node.Fill();
         }
         else
         {
             if (node.Children == null)
             {
                 node.Split();
             }
             foreach (var child in node.Children)
             {
                 Intersect(child,tri);
             }
         }
     }
 }