作者:为梦齐舞
本文同步更新于简书文章https://www.jianshu.com/p/b8934d5186ed
一、EllipsoidTerrainProvider介绍
EllipsoidTerrainProvider是WebGL中最简单的一种地形,当我们初始化一个三维球时,Globe默认会加载一层地形,这个默认的地形就是本文的主角EllipsoidTerrainProvider。
EllipsoidTerrainProvider其实就是地形高度全是0的地形图层,不支持水面,不支持法向量,下图中可以看到水面和法向量实现中直接返回的false
EllipsoidTerrainProvider如果没有特意指定的情况下,默认采用WGS84坐标系。实现方法是以高度图的方法进行实现的,默认网格大小16*16
二、构造EllipsoidTerrainProvider
首先我们来看下构造参数,只有两个tilingScheme和ellipsoid:
1、tilingScheme如果不进行指定的话,默认使用GeographicTilingScheme,而GeographicTilingScheme的默认参考椭球是Ellipsoid.WGS84。
2、ellipsoid,如果指定了tilingScheme,则ellipsoid无效,如果未指定任何参数,则使用WGS84椭圆体
接下来看下EllipsoidTerrainProvider的属性
1、hasVertexNormals:法向量,上面已经提过了,EllipsoidTerrainProvider不支持。
2、hasWaterMask:水纹,和hasVertexNormals一样也不支持。
3、isCreateSkirt:是否创建裙边,这个参数是为了避免Tile之间的缝隙,每一个Tile四周会围成一个栅栏,指定该栅栏的高度,保证和相邻的Tile拼接时没有间隙。
常用的参数大致就是这些。
三、实战EllipsoidTerrainProvider
1、创建的viewer时,我们可以看下已经默认自动添加了一个EllipsoidTerrainProvider
当然如果你希望代码实现一把,也是没有问题的,另外这两句代码也可以用于移除当前添加的地形,就是让它重回默认值。
var terrainProvider=new Cesium.EllipsoidTerrainProvider();
viewer.terrainProvider=terrainProvider;
2、修改EllipsoidTerrainProvider为墨卡托投影,这样如果添加的影像切片为墨卡托时,地形的TileScheme和影像的保持一致,就不再需要去转换影像的坐标进行渲染,性能会更好,代码如下:
var terrainProvider=new Cesium.EllipsoidTerrainProvider({tilingScheme:new Cesium.WebMercatorTilingScheme()});
viewer.terrainProvider=terrainProvider;
可以对比默认添加的,这里的TileScheme已经变为墨卡托了