Хм, решил развить тему.
Как раз сейчас пишу импортилку проекта SRTM-X.
Торрент:
http://rutracker.org/forum/viewtopic.php?t=4205188Проект:
http://www.dlr.de.
Итак, чтение файла:
Используется csharp
float[,] FloatData = new float[901, 901];
Stream s = new FileStream(filePath, FileMode.Open);
BinaryReader r = new BinaryReader(s);
byte[] record;
byte[] bUHL = r.ReadBytes(80);
byte[] bDSI = r.ReadBytes(648);
byte[] bACC = r.ReadBytes(2700);
for(int i = 0; i < 901; i++){
byte[] bRC = r.ReadBytes(1); //170
Debug.Log(bRC[0]);
byte[] bDBC = r.ReadBytes(3);
byte[] bLoC = r.ReadBytes(2);
byte[] bLaC = r.ReadBytes(2);
for(int j = 0; j < 901; j++){
record = r.ReadBytes(2);
FloatData[i,j] = (float)((int)(record[0] << 8) + (int)record[1]);
if(FloatData[i,j] == 0xFFFF){
FloatData[i,j] = 0f;
}else{
FloatData[i,j] /= 10000;
}
}
byte[] bLaC bSUM = r.ReadBytes(4);
}
TerrainData.SetHeights(0, 0, FloatData);
r.Close();
s.Close();
Так, данные у нас есть.
Данные говорят нам следующую информацию: квадрат территории, размеченной высотами в метрах каждые 25 метров.
То есть, перед нами ни что иное как готовый хайтмап.
Теперь пишем:
Используется csharp
TerrainData data = new TerrainData();
data.size = new Vector3(901, 9000, 901);
data.heightmapResolution = 901;
GameObject terrainObj = Terrain.CreateTerrainGameObject(data);
Terrain terrain = terrainObj.GetComponent<Terrain>();
TerrainCollider collider = terrainObj.GetComponent<TerrainCollider>();
collider.terrainData = data;
terrain.terrainData = data;
terrain.heightmapPixelError = 0;
this.Load(); //считываем хайтмапы в TerrainData
Смотрим и любуемся слепком выбранной территории.
Но!
Меня терзают смутные сомнения, что масштаб не выдержан, ибо:
1) Число 10000, на которое мы делим полученные высоты из файла я подбирал методом научного тыка из соображений красивости;
2) Полученный террейн у нас имеет размеры Vector3(28832, 9000, 28832) и data.heightmapResolution = 1025;
3) Наблюдается, что хайтмапРезолюшн действительно равен 1025, так как террейн заполнен высотами не полностью и имеет два края нулевых высот как раз размером чуть больше 100 юнитов.
А надо террейн размером 22525x22525 юнитов (например, отскалить его по осям X и Z 901*25) с трушными высотами.
Прошу помощи в этом вопросе!