public void GenerateRooms(VoxelGrid <bool> grid) { grid.ForEach(delegate(int x, int y, int z) { var size = new Vector3(10, 5, 10); var averageVolume = size.X * size.Y * size.Z; var roomDensity = 4f; if (Rand.NextDouble() > 1 / averageVolume / roomDensity) { return; } var room = new BoundingBox(); room.Minimum = new Vector3(x, y, z); room.Maximum = room.Minimum + size; CreateRoom(grid, room); }); }
public void TestSimple() { var engine = EngineFactory.CreateEngine(); engine.Initialize(); var grid = new VoxelGrid <bool>(new Point3(100, 30, 100)); var gen = new SimpleCaveGenerator(); gen.GenerateRandom(grid, 0.35f); for (int i = 0; i < 5; i++) { gen.ProcessCellularAutomata(grid); } new VoxelTerrainConvertor().SetTerrain(grid.ToArray()); engine.AddSimulator(new FlashlightSimulator()); engine.AddSimulator(new VoxelTerrainSimulator()); engine.AddSimulator(new WorldRenderingSimulator()); engine.Run(); }
public void ProcessCellularAutomata(VoxelGrid <bool> grid) { grid.ForEach(delegate(int x, int y, int z) { int sum = 0; for (int i = 0; i < 3 * 3 * 3; i++) { int ix = x + i % 3; int iy = y + (i / 3) % 3; int iz = z + (i / 9) % 3; if (!grid.ContainsKey(ix, iy, iz)) { ; //sum++; } else if (grid[ix, iy, iz]) { sum++; } } grid[x, y, z] = sum >= 17; }); }
public void FillBorders(VoxelGrid <bool> grid) { grid.ForEach(delegate(int x, int y, int z) { var val = false; if (x == 0) { val = true; } if (y == 0) { val = true; } if (z == 0) { val = true; } if (x == grid.Size.X) { val = true; } if (y == grid.Size.Y) { val = true; } if (z == grid.Size.Z) { val = true; } if (val) { grid[x, y, z] = true; } }); }