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