public void TestExtractSurfaceAllEdges() { int size = 16; var srcGrid = new DelegateHermiteGrid(p => p.X % 2 == 0 || p.Y % 2 == 0 || p.Z % 2 == 0, (p, i) => new Vector4(), new Point3(size, size, size)); testExtractSurface(srcGrid); }
public void TestExtractSurfaceNoEdges() { //TODO: serious optimization idea: store all signs for each cube int size = 16; var srcGrid = new DelegateHermiteGrid(p => true, (p, i) => new Vector4(), new Point3(size, size, size)); testExtractSurface(srcGrid); }
public void TestHermiteCopyingAllEdges() { int size = 32; var srcGrid = new DelegateHermiteGrid(p => p.X % 2 == 0 || p.Y % 2 == 0 || p.Z % 2 == 0, (p, i) => new Vector4(), new Point3(size, size, size)); int times = 100; Console.WriteLine(PerformanceHelper.Measure(() => { for (int i = 0; i < times; i++) { HermiteDataGrid.CopyGrid(srcGrid); } }).Multiply(1f / times).PrettyPrint()); }
private static void testExtractSurface(DelegateHermiteGrid srcGrid) { var grid = HermiteDataGrid.CopyGrid(srcGrid); int times = 40; var vertices = new List <Vector3>(10 * 1000 * 1000); var indices = new List <int>(10 * 1000 * 1000); var extractor = new DualContouringAlgorithm(); var time = PerformanceHelper.Measure(() => { for (int i = 0; i < times; i++) { vertices.Clear(); indices.Clear(); extractor.GenerateSurface(vertices, indices, srcGrid); } }); Console.WriteLine("Time: " + time.Multiply(1f / times).PrettyPrint()); Console.WriteLine("{0:#.0}x{0:#.0}x{0:#.0} grid per second", Math.Pow(srcGrid.Dimensions.X * srcGrid.Dimensions.Y * srcGrid.Dimensions.Z / (time.TotalSeconds / times), 1 / 3f)); }