Exemplo n.º 1
0
	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");
	}