Cesium For Unreal:解决因地形数据不全造成的缺块问题

问题描述:

在UE中使用CesiumForUnreal插件,利用url加载地形数据时,如果地形数据不全,则会出现缺块问题。

在这里插入图片描述
在这里插入图片描述

解决思路:

修改Cesium For Unreal插件代码,如果当前层没有数据则加载上一层,如果上一层也没有,则继续向上索引,直至有数据。

解决步骤:

将引擎中的插件代码复制到项目的Plugins目录下

引擎插件目录:…\UE_5.2\Engine\Plugins\Marketplace

注:建议删除引擎目录下的原插件,否则在打包时可能会出现问题

修改Cesium3DTileset.cpp里的ACesium3DTileset::showTilesToRender函数

for (Cesium3DTilesSelection::Tile* pTile : tiles) { 
//添加如下代码,加载状态为Failed时,就是没有请求到数据,因此向上寻找父结点
    while (pTile->getState() == Cesium3DTilesSelection::TileLoadState::Failed)
    {
        pTile = pTile->getParent();
    }

    if (pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) {
      continue;
    }
    ....
}

修改后重新编译测试,问题已解决。即使视角拉到地面,也不会发生缺块不渲染的现象。
在这里插入图片描述

后记:

与此同时也带来了一个新的问题,在Cesium For Unreal里地形和影像的层级是绑定的,因此影像的显示层级受限于地形的层级,如上图所示,即使我拥有很高精度的影像,在拉到地面时仍然不会显示出来。
此部分的逻辑在CesiumRasterOverlay.cppUCesiumRasterOverlay::AddToTileset函数里:

  if (pOverlay) {
    this->_pOverlay = pOverlay.release();
    pTileset->getOverlays().add(this->_pOverlay);
    this->OnAdd(pTileset, this->_pOverlay);
  }

只可惜这部分内部的处理被封装在了插件的三方库里,不太好修改,目前先暂时放下,日后有时间再进行进一步探索。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值