Cesium中瓦片的可见性判断
瓦片可见性判断是根据“地图切片时切片的精度”和“调度时瓦片与相机之间计算出来的精度”比较来判断的。
1、Cesium 地图某级精度
关于地图某级别的精度值是多少,在Cesium中的相关计算是
某级别精度 = 地球的短半轴周长 / ( 地图某一级别瓦片数量 * 瓦片的分辨率) ;
2、相机与瓦片之间动态精度计算
3、原理分析
sseDenominator代表的是相机视锥近裁剪与相机能看见的视口高度之间的比例;
设hs,ds为相机视角近裁剪处的比值hs/ds = 2*tan(fovy*0.5); s代表屏幕空间。
设A = height / distance*sseDenominator代表着相机在瓦片处的视锥高度范围;
设screenSpaceError = geometricError * A
= geometricError * height/(distance*sseDenominator);
如果设置了maximumScreenSpaceError = 16;
如果screenSpaceError = geometricError * A > maximumScreenSpaceError ;其中A代表了1米的几何在屏幕上占的像素数量,16代表了,1米的几何在屏幕上投影为16个像素,此处猜测最大屏幕误差为16,也就是说相机到达最精细的一级瓦片时1米大小的模型在屏幕上的投影大小。
screenSpaceError = geometricError * A > maximumScreenSpaceError,如果相机不是在最精细的一级瓦片处应该怎么办呢,就是要降低A的大小,同时提高geometricError的大小,也就是相机在远处像近处移动时,A会变大,同时geometricError会变小,当geometricError * A的乘机达到均衡geometricError * A > maximumScreenSpaceError时当前级别可见。
在考虑一下瓦片级别之间切换的情况,瓦片的面积一般会变小,按照常规的理解面积的大小与geometricError之间应该存在某种关系,
不妨设geometricError = S * X;其中S为面积,X不知道代表什么。
那么S * X * A > maximumScreenSpaceError;的过程代表1米几何体在屏幕上投影出16像素的范围;A在相机运动过程中是实时确定的,S面积是实时确定的,此处可以想象成1米的瓦片放大了S倍后变成了S大小的瓦片,针对比较大的瓦片geometricError相应也会比较大,因为大块的瓦片距离相机比较远就可以看清。不妨假设X为1米的大小的瓦片,S为将1米的瓦片放大了S倍。
在比较粗的一级向比较细的一级过度的时候,均衡每个细分瓦片的内存占用大小是比较合理的考量,所以细分后的子瓦片面积大小一般不痛,导致了几何误差一般也不同。
总结:瓦片在相机中投影成16像素的大小决定了,最终的显示,瓦片的面积大小决定了几何误差,瓦片占用内存的大小决定了子瓦片面积的大小。