Unity使用等高线数据生成山体
等高线数据通过QGIS导出
{ "type": "Feature", "properties": { "fid": 3042, "ID": 3041, "ELEV": 220.0 }, "geometry": { "type": "LineString", "coordinates": [ [ 116.14026623630302, 40.045426917886395 ], [ 116.140266236144541, 40.045426917569436 ], [ 116.140266236038883, 40.045426917886395 ], [ 116.140266236144541, 40.045426917992046 ], [ 116.14026623630302, 40.045426917886395 ] ] } },
这是一行的数据,包括了经纬度,和等高线的高度。
算法部分主要用了 Geometry Algorithms 这个插件,插件可以平面挖洞,用来生成带湖的地形。生成带有约束的点云mesh,可以用来计算地形。插件支持多线程计算,所以可以在程序运行中,实时生成地形
一、UV
因为生成出来的Mesh UV是没有的,所以自己需要在一定规则下给每个点一个UV值,我的做法是把所有点的XZ用一个矩形完美包住,矩形左下角为0,0 右上角为 1,1
这样做可以让贴图根据尺寸等比平铺
二、地形数据
等高线数据如果很稀疏,可能计算出的效果有问题,因为距离太远,点与点就不会生成连线和Mesh了
地形数据可以通过QGIS或者ArcGIS 导出一个Json文本数据,然后在Unity中将经纬度转为坐标点,然后Y轴高度就是等高线的高度。