using (FileStream fs = new FileStream(outputFile, FileMode.CreateNew, FileAccess.Write)) { using (BinaryWriter writer = new BinaryWriter(fs)) { // file header : fileNum, single fileSize // Int32 writer.Write(inputFilePaths.Length); writer.Write(size); foreach (var inputFilePath in inputFilePaths) { string fixedFilePath = AssetsUtility.GetInstance().FixFilePath(inputFilePath); // get tif file info from the name, such as "n33_e110_1arc_v3" string inputFileName = Path.GetFileName(fixedFilePath); // get height data and write to file float[,] heightMap = CompressHeightData(fixedFilePath); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { writer.Write(heightMap[i, j]); } } } } }
string[] heightMapPaths = Directory.GetFiles(heightMapInputPath, "*.tif", SearchOption.AllDirectories); string inputFileName = Path.GetFileName(fixedFilePath); // read the tif file, get longitude and latitude, write to this output file Match matchLatitude = Regex.Match(tifFileInfo[0], @"^[a-zA-Z]+(\d+)$"); int latitude = int.Parse(matchLatitude.Groups[1].Value); Match matchLongitude = Regex.Match(tifFileInfo[1], @"^[a-zA-Z]+(\d+)$"); int longitude = int.Parse(matchLongitude.Groups[1].Value); writer.Write(latitude); writer.Write(longitude);
using (FileStream fs = new FileStream(fileRelativePath, FileMode.Open, FileAccess.Read)) { using (BinaryReader reader = new BinaryReader(fs)) { int fileNum = reader.ReadInt32(); int singleFileWidth = reader.ReadInt32(); Debug.Log($"header info, num of files : {fileNum}, single file size : {singleFileWidth}");
HeightDataModel heightDataModel = ScriptableObject.CreateInstance<HeightDataModel>(); heightDataModel.InitHeightModel(fileNum, singleFileWidth); DateTime dateTime = DateTime.Now; string modelName = string.Format("HeightModel_{0}files_{1}.asset", fileNum, dateTime.Ticks); heightDataModel.name = modelName; for (int i = 0; i < fileNum; i++) { int latitude = reader.ReadInt32(); int longitude = reader.ReadInt32(); float[,] heightDatas = newfloat[singleFileWidth, singleFileWidth]; // read the height data then add to the heightDataModel for (int q = 0; q < singleFileWidth; q++) { for(int p = 0; p < singleFileWidth; p++) { heightDatas[q, p] = reader.ReadSingle(); } } Debug.Log($"now add a height data n{latitude}, e{longitude}, file width {singleFileWidth}"); heightDataModel.AddHeightData(longitude, latitude, singleFileWidth, heightDatas); } string assetFullPath = AssetsUtility.GetInstance().GetCombinedPath(deserlOutputFilePath, modelName); AssetDatabase.CreateAsset(heightDataModel, assetFullPath); AssetDatabase.SaveAssets(); } }
publicclassHeightDataManager { List<HeightDataModel> heightDataModels; int srcWidth; int srcHeight; Vector3Int terrainClusterSize; int terrainClusterWidth; int terrainClusterHeight; }