/*public void ClearTerrain(Blocks MyBlocks) { for (int i = 0; i < MyBlocks.Size.x; i++) for (int j = 0; j < MyBlocks.Size.y; j++) for (int k = 0; k < MyBlocks.Size.z; k++) { MyBlocks.ClearBlockMesh(new Vector3(i,j,k)); } }*/ public void GenerateAllMeshes(MyMesh MeshData, Blocks MyBlocks) { //CreateSunlight (); MeshData.ClearMesh (); if (!IsSmoothTerrain) { // Just want to update any blocks that were changed and its surrounding ones // MyBlocks class keeps the mesh data stored in memory rather then remaking the meshes every time if (IsSubDivided) { //CreateMeshFromBlocksSubdivision (DefaultSubDivisionLevel); } else { CreateMeshFromBlocks (MyBlocks, MeshData); } for (int i = 0; i < MyBlocks.Size.x; i++) for (int j = 0; j < MyBlocks.Size.y; j++) for (int k = 0; k < MyBlocks.Size.z; k++) { if (MyBlocks.GetBlockType(new Vector3(i,j,k)) != 0) { MeshData.Add (MyBlocks.GetBlock(new Vector3(i,j,k)).GetBlockMesh()); } } CanUpdateMesh = true; } else { //CreateSmoothTerrain (); //UpdateMesh (); } }
void CreateSmoothTerrain(MyMesh TerrainMesh, MarchingCubes marchingCubes, Blocks MyBlocks) { Debug.Log ("Creating Smooth Terrain"); Vector3 BlockScale = MyBlocks.Scale; // Marching cubes is one too small! // for some reason the size has to be like this Vector3 WorldSize_ = MyBlocks.Size; int expand = 0;// WorldCore->MarchingExpand; WorldSize_.x += expand; WorldSize_.y += expand; WorldSize_.z += expand; // = 18 now out of 16 0 to 15 // I need to perform this calculation PER CUBE and not per grid // So perform calculation depending on surrounding cubes, but not whole thing //MarchingCubesData.Clear(); //for (int i = 0; i < (WorldSize_.x)*(WorldSize_.y)*(WorldSize_.z); i++) // MarchingCubesData.Add(0.0f); //marchingCubes.ClearData(MarchingCubesData); marchingCubes = new MarchingCubes(new Vector3(WorldSize_.x, WorldSize_.x, WorldSize_.x), Mathf.RoundToInt(WorldSize_.x)); marchingCubes.PolygonizeData(MyBlocks, WorldSize_); TerrainMesh.ClearMesh (); for (int i = 0; i < marchingCubes.trilist.Count; i++) { // for every triangle in list marchingCubes.trilist[i].calcnormal(true); TerrainMesh.Verticies.Add (marchingCubes.trilist[i].position[0]); TerrainMesh.Verticies.Add (marchingCubes.trilist[i].position[1]); TerrainMesh.Verticies.Add (marchingCubes.trilist[i].position[2]); TerrainMesh.Colors.Add (marchingCubes.trilist[i].colors[0]); TerrainMesh.Colors.Add (marchingCubes.trilist[i].colors[1]); TerrainMesh.Colors.Add (marchingCubes.trilist[i].colors[2]); TerrainMesh.Indicies.Add (TerrainMesh.Verticies.Count-3); TerrainMesh.Indicies.Add (TerrainMesh.Verticies.Count-2); TerrainMesh.Indicies.Add (TerrainMesh.Verticies.Count-1); } Debug.Log ("Created Smooth Terrain"); }