CesiumJs和SuperMap Desktop结合的三维显示的优化

        前段时间要做一个三维相关的项目,侧重三维场景的展示以及数据查询,对三维场景中的空间分析并没有涉及,而且甲方不想花几十万买套三维平台进行二次开发,只能借助开源的。所有针对需求,筛选了现有的三维引擎或三维平台,OSG太过底层,babylonjs、threejs适用于数据量小的小场景,webglearth简单实用,但是demo较少、更新慢,openwebglobe加载不流畅、效果不怎么好,cesiumjs是以js编写的webGL三维地图渲染引擎,有较多的demo,详细的api文档,有测试平台,比较丰富的展示特性和扩展,所以最后就选定cesiumjs了。

          按照网上的环境搭建流程,将cesiumjs的运行环境搭建了起来,通过Sketchup建立了三维模型,并搭建了三维场景。然后就是将三维模型加载到Cesium中, 目前Cesium只支持gltf和bgltf格式,可以通过dae格式转换过去。将三维模型全加进去后,问题出现了,缺少三维场景显示的优化算法,三维场景转不起来。通过查找资料,发现cesiumjs支持3D Tiles数据集,3DTiles数据集以分块、分级渲染,将大数据量三维数据以分块,分层的形式组织起来,可以大量减轻浏览器和GPU的负担,将瓦片的位置信息写到了数据中的.b3dm和对应的json文件中,json文件是3dtiles数据集的元数据, boundingVolume节点是用来表示三维模型的范围,它是以wgs84直角坐标的方式存储的,它不明文存储数据的地理位置,但是可以从wgs84直角坐标中反解出经纬度坐标。refine节点有两个属性,add/replace属性,其意义是在加载这个节点数据时,时在上级数据的基础上add还是replace。

       怎么将模型数据转换成3Dtiles呢?目前 缺少免费好用的生成工具,并没有形成一个成熟的解决方案,第三方推出的CesiumLab工具提供了生成3Dtiles的功能,但是要用完整功能是需要收费的。那到底有没有免费、好用的转换工具呢?

        SuperMap iClient 3D for WebGL 是基于CesiumJS扩展的一套三维引擎API,重要的是 它推出了三维切片缓存(S3M)图层,支持根节点过滤、裁剪,提高加载性能。还有它加入了剖面分析、视域分析、淹没分析、通视分析等功能。

CesiumJs和SuperMap Desktop结合的三维显示的优化_第1张图片

                                                                                           分析功能

       SuperMap iClient 3D for WebGL Api库是免费的,但是需要SuperMap DeskTop、Iserver的支持,SuperMap DeskTop用于数据转换、缓存文件生成,Iserver用于发布三维服务。SuperMap DeskTop因为只是处理数据,可以申请试用版或下载那啥版(你懂的);因为不做基于服务端的空间分析,只是用来显示三维场景,Iserver可以用webserver代替(我是用的Apache)发布S3M服务。步骤如下:

  1. 建立三维模型,搭建三维场景,将模型转换为dae、3ds、obj、fbx常用格式。
  2. 打开SuperMap DeskTop,建立数据源,导入三维模型的数据集。
  3. 在加入的数据集上右键点击,生成场景缓存,设置生成Lod的层级和瓦片大小,成功后会生成Osgb格式的缓存。
  4. 在倾斜摄影模块中,将OSGB缓存文件转成s3m格式的文件。s3m文件由scp和s3m实体文件夹组成,scp定义了数据的范围、缓存格式、缓存实体文件的路径等。s3m则是分层、分块的三维缓存文件。

   怎么将s3m文件加到Cesium中呢?需要去官网下载SuperMap iClient 3D for WebGL Api。通过scene 的“addS3MTilesLayerBySc”方法加载s3m服务,示例如下:

  var promise = scene.addS3MTilesLayerByScp("/Data/model/changjing/changjing.scp", {

                name: changjing

            }); 

    最后将自己的三维场景服务通过上面的方法加载进系统,因为全部场景不适合公开,截取了部分场景如下(三维场景还在修改)。

CesiumJs和SuperMap Desktop结合的三维显示的优化_第2张图片

你可能感兴趣的:(系统开发案例)