遇到的问题,是Cesium开挖时没数据,因为Cesium.sampleTerrainMostDetailed()需要额外的细节。
我首先看了下CTB,CTB中出现的问题是写.terrain时,用的gzwrite(),这样是不行的,改用fwrite时,正常写数据。如果不用Cesium.sampleTerrainMostDetailed(),还是可以开挖的。
这里说下CTB,有.terrain->.tif和.tif->.terrain两种方式,其中.tif是float32,.terrain是int16,.terrain格式是固定的,但是.tif是可以改的,不一定非是浮点数,只是代码上写死了而已。
言归正传,问题聚焦在mostdetailed,需要额外的数据,于是参照万花筒的格式,输出了每个级别占用的块数,发现还是不行,因为生成的是高程图,于是更改为"format":"heightmap-1.0",然后OK
这里总结下四叉树数据的重采样问题,比较复杂,分为以下几步
1,给定.tif,得到级别及四至
2,根据级别,进行向上计算重采样(并不真的重采样),至0级或者1块,
3.1,如果是0级,则分块(如果>1块)
3.2,如果到1块还没有到0级时,到第N级,则将0-N级都设置为N级的数据
4,对每一级进行四叉树分块,判断每块的起始终止坐标,
5,对地球进行按级别计算每块xy方向的度数,
6,根据每块起始终止坐标和该级别每块的度数,计算出在哪块,放入四至占用块坐标数组中。
7,输出四至占用块数组
其中,关键在于第5步和第6步
非常感谢博客园乌合之众,也是我查找到的唯一的.terrain格式说明的,让我有了方向https://www.cnblogs.com/oloroso/p/11063905.html