地形渲染之地形切换用户体验优化

地形渲染之地形切换用户体验优化

地形切换存在闪烁问题,如从平面地形切换到3D地形球面会重新构建出现空球的闪烁问题,如下如所示。
在这里插入图片描述

为什么在切换过程中会导致球面瓦片没有渲染?

在GlobeSurfaceTileProvider的terrainProvider更改的时候,假设初始化球时,没有设置地形,那么默认的terrainProvider是EllipsoidTerrainProvider,即简单的平面地形。然后通过交互的方式添加地形,添加地形代码如下:
下面展示一些 内联代码片

         viewer.terrainLayers.addTerrainProvider(
            new Cesium.CesiumTerrainProvider({
   
              url: "../data/terrain/",
            })
          )

此时的terrainProvider的ready是false,在源代码中有一句注释
“Nothing to do until the provider is ready”
这就导致地形数据源发生变化的时候,有那么1-2秒的时间球是没有渲染的。因为根本就没有需要渲染的地形瓦片绘制指令。

如果想要优化此不友好的体验效果,应该如何优化?

解决方案:
在每一次释放所有瓦片的时候,先判断当前的terrainProvider的ready值是否为true,是则保持原来的执行流程;否就拷贝另存上一帧渲染的所有的瓦片。
然后在渲染的时候,同样判断terrainProvider的ready值是否为true,是则保持原来的执行流程;否就渲染拷贝的瓦片。
详细代码实现如下:
在QuadtreePrimitive.js文件中
第一步:在构造方法中添加如下四个属性

  //上一帧0级瓦片
  this._levelZeroTilesOld = [];
  //存储上一帧渲染的瓦片
  this._tilesToRenderOld = [];
  //是否释放所有备份瓦片
  this._freeAllBakTiles = false;
  //0级瓦片是否准备
  this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值