public void Generate() { System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch(); timer.Start(); MeshData meshData = MarchingCubes.Poligonyze( new Bounds(center, terrainMaster.chunkSize), Sample, terrainMaster.resolution, (1 - terrainMaster.soilToAirVolumetricRatio) * 2 - 1); timer.Stop(); Debug.Log("Chunk " + center + ": MarchingCubes.Poligonyze in " + timer.ElapsedMilliseconds + " milliseconds."); Matrix4x4 matrix = Matrix4x4.Scale(Vector3.one * terrainMaster.postProcessingScale) * Matrix4x4.Translate(-center); meshData.Transform(matrix); ThreadWorkManager.RequestMainThreadWork(() => { gameObject = new GameObject(); gameObject.name = center.ToString(); gameObject.layer = LayerMask.NameToLayer("Terrain"); Mesh mesh = meshData.ToMesh(); gameObject.AddComponent <MeshFilter>().sharedMesh = mesh; gameObject.AddComponent <MeshRenderer>().sharedMaterial = terrainMaster.chunkMaterial; gameObject.AddComponent <MeshCollider>().sharedMesh = mesh; gameObject.transform.parent = terrainMaster.transform; gameObject.transform.position = center * terrainMaster.postProcessingScale; gameObject.SetActive(isVisible); }); }
void SpawnMarchingMapChunk(Vector3Int center, Vector3Int size) { MeshData meshData = MarchingCubes.Poligonyze(new PolygonizableVoxelMap(voxelMap), new Bounds(center, size), Vector3.one * 2, 0.5f); //Debug.Log("Finished MarchingCubes.Poligonyze at " + center); ThreadWorkManager.RequestMainThreadWork(() => { GameObject go = new GameObject(); go.AddComponent <MeshFilter>().mesh = meshData.ToMesh(); go.AddComponent <MeshRenderer>().sharedMaterial = voxelMaterial; go.transform.rotation = Quaternion.Euler(-90, 0, 0); }); }
void SpawnMap() { MeshData meshData = new MeshData(); Vector3Int[] directions = new Vector3Int[] { new Vector3Int(1, 0, 0), new Vector3Int(-1, 0, 0), new Vector3Int(0, 1, 0), new Vector3Int(0, -1, 0), new Vector3Int(0, 0, 1), new Vector3Int(0, 0, -1) }; // Invert y and z for visualization purposes voxelMap.Foreach((x, y, z, voxelPresent) => { if (voxelPresent) { //Instantiate(voxelPrefab, new Vector3(x, y, z), Quaternion.identity, transform); for (int i = 0; i < directions.Length; i++) { if (voxelMap.CheckVoxelAt(x + directions[i].x, y + directions[i].y, z + directions[i].z) == false) { CreateSquare(new Vector3Int(x, y, z), meshData, directions[i]); } } } }); meshData.CalculateNormals(); ThreadWorkManager.RequestMainThreadWork(() => { GameObject go = new GameObject(); go.AddComponent <MeshFilter>().mesh = meshData.ToMesh(); go.AddComponent <MeshRenderer>().sharedMaterial = voxelMaterial; go.transform.rotation = Quaternion.Euler(-90, 0, 0); /*MeshData m = new MeshData(); * * //CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(1, 0, 0)); * CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(-1, 0, 0)); * CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(0, 1, 0)); * CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(0, -1, 0)); * //CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(0, 0, 1)); * CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(0, 0, -1)); * * CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(1, 0, 0)); * //CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(-1, 0, 0)); * //CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(0, 1, 0)); * CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(0, -1, 0)); * //CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(0, 0, 1)); * CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(0, 0, -1)); * * CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(1, 0, 0)); * CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(-1, 0, 0)); * CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(0, 1, 0)); * //CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(0, -1, 0)); * //CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(0, 0, 1)); * CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(0, 0, -1)); * * //CreateSquare(new Vector3Int(100, 100, 100), m, new Vector3Int(1, 0, 0)); * CreateSquare(new Vector3Int(100, 100, 101), m, new Vector3Int(-1, 0, 0)); * CreateSquare(new Vector3Int(100, 100, 101), m, new Vector3Int(0, 1, 0)); * CreateSquare(new Vector3Int(100, 100, 101), m, new Vector3Int(0, -1, 0)); * CreateSquare(new Vector3Int(100, 100, 101), m, new Vector3Int(0, 0, 1)); * //CreateSquare(new Vector3Int(100, 100, 101), m, new Vector3Int(0, 0, -1)); * * CreateSquare(new Vector3Int(101, 100, 101), m, new Vector3Int(1, 0, 0)); * //CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(-1, 0, 0)); * //CreateSquare(new Vector3Int(101, 100, 100), m, new Vector3Int(0, 1, 0)); * CreateSquare(new Vector3Int(101, 100, 101), m, new Vector3Int(0, -1, 0)); * CreateSquare(new Vector3Int(101, 100, 101), m, new Vector3Int(0, 0, 1)); * //CreateSquare(new Vector3Int(101, 100, 101), m, new Vector3Int(0, 0, -1)); * * CreateSquare(new Vector3Int(101, 101, 101), m, new Vector3Int(1, 0, 0)); * CreateSquare(new Vector3Int(101, 101, 101), m, new Vector3Int(-1, 0, 0)); * CreateSquare(new Vector3Int(101, 101, 101), m, new Vector3Int(0, 1, 0)); * //CreateSquare(new Vector3Int(101, 101, 100), m, new Vector3Int(0, -1, 0)); * CreateSquare(new Vector3Int(101, 101, 101), m, new Vector3Int(0, 0, 1)); * //CreateSquare(new Vector3Int(101, 101, 101), m, new Vector3Int(0, 0, -1)); * * m.Smooth(); * go = new GameObject(); * go.AddComponent<MeshFilter>().mesh = m.ToMesh(); * go.AddComponent<MeshRenderer>().sharedMaterial = voxelMaterial;*/ }); }