//Load a tile's heightmap (here uses the sin function) private void LoadTileHeightmap2(MapTile TileToLoad) { //return; //We don't use the debug sinus code if (TileToLoad != null) { //TimeSpan Start1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime; MTV3D65.CONST_TV_LANDSCAPE_PRECISION precision = TileToLoad.Landscape.GetPrecision(); int Vertices = (256 / GlobalVars.getTVPrecisionDivider(precision)) * TileToLoad.Landscape.GetLandWidth(); float[] Height_Array = new float[(Vertices + 1) * (Vertices + 1)]; for (int j = 0; j <= Vertices; j++) { for (int i = 0; i <= Vertices; i++) { if ((TileToLoad.TilePosition.TileX == -1) && (TileToLoad.TilePosition.TileZ == 0) && (j == Vertices - 1) && (i == Vertices - 1)) { Debug.WriteLine("debug"); } int realx = i + TileToLoad.TilePosition.TileX * Vertices; int realz = j + TileToLoad.TilePosition.TileZ * Vertices; //Sinus-like thing... Yeah, it's useless but it looks good (well, for a demo... okay, I'm not that inspired I think !) Height_Array[j * (Vertices + 1) + i] = (float)(Math.Sin(Math.Sqrt(Math.Pow(realx, 2) + Math.Pow(realz, 2)) / 25) * 100); } } TileToLoad.Landscape.SetHeightArray(0, 0, Vertices + 1, Vertices + 1, Height_Array); //This is 100 TIMES FASTER than setting every point one by one! (which is not that surprising) //double Total1 = (System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime - Start1).TotalMilliseconds; //TimeSpan Start2 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime; /*for (int i = TileToLoad.TilePosition.TileX * 256 * MapTile.TileSize; i <= TileToLoad.TilePosition.TileX * 256 * MapTile.TileSize + 256 * MapTile.TileSize; i += 2) * { * for (int j = TileToLoad.TilePosition.TileZ * 256 * MapTile.TileSize; j <= TileToLoad.TilePosition.TileZ * 256 * MapTile.TileSize + 256 * MapTile.TileSize; j = j + 1) * { * TileToLoad.Landscape.SetHeight(i, j, (float)Math.Sin(Math.Sqrt(i * i + j * j) / 25) * 10); * } * }*/ //double Total2 = (System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime - Start2).TotalMilliseconds; //Debug.WriteLine("Method 1 : " + Total1 + "ms; Method 2 : " + Total2 + "ms"); //Method 1 : 31,2002ms; Method 2 : 3120,02ms //TileToLoad.Landscape.FlushHeightChanges(); } }
//Load a tile's heightmap (here uses the sin function) private void LoadTileHeightmap2(MapTile TileToLoad) { //return; //We don't use the debug sinus code if (TileToLoad != null) { //TimeSpan Start1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime; MTV3D65.CONST_TV_LANDSCAPE_PRECISION precision = TileToLoad.Landscape.GetPrecision(); int Vertices = (256 / GlobalVars.getTVPrecisionDivider(precision)) * TileToLoad.Landscape.GetLandWidth(); float[] Height_Array = new float[Vertices * Vertices]; for (int i = 0; i < Vertices; i++) { for (int j = 0; j < Vertices; j++) { Height_Array[i * Vertices + j] = (float)Math.Sin(Math.Sqrt(Math.Pow(i * 2, 2) + Math.Pow(j * 2, 2)) / 25) * 10; } } TileToLoad.Landscape.SetHeightArray(0, 0, Vertices, Vertices, Height_Array); //double Total1 = (System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime - Start1).TotalMilliseconds; //TimeSpan Start2 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime; /*for (int i = TileToLoad.TilePosition.TileX * 256 * MapTile.TileSize; i <= TileToLoad.TilePosition.TileX * 256 * MapTile.TileSize + 256 * MapTile.TileSize; i += 2) * { * for (int j = TileToLoad.TilePosition.TileZ * 256 * MapTile.TileSize; j <= TileToLoad.TilePosition.TileZ * 256 * MapTile.TileSize + 256 * MapTile.TileSize; j = j + 1) * { * TileToLoad.Landscape.SetHeight(i, j, (float)Math.Sin(Math.Sqrt(i * i + j * j) / 25) * 10); * } * }*/ //double Total2 = (System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime - Start2).TotalMilliseconds; //Debug.WriteLine("Method 1 " + Total1 + "ms; Method 2 " + Total2 + "ms"); //Method 1 31,2002ms; Method 2 3120,02ms TileToLoad.Landscape.FlushHeightChanges(); } }