cesium for unreal 修改插件源码,加载wmts服务

删除线格式 1.下载插件cesium=unreal插件包

git clone --recursive https://github.com/CesiumGS/cesium-unreal

需要注意的是,github仓库里extern文件夹里有外部子模块,要确保递归把子模块都下载完整,而且Cesium Native里也有嵌套的外部子模块,下载之后一定要检查下确保子模块文件夹不为空。
如果实在下载不全,在编译的时候会报错,那就手动一个一个下载了放到对应的子模块文件夹下。

2.下载WMTS代码文件

在EzioHelios作者的个人仓库cesium-native和cesium-unreal里下载这几个文件,后面适配天地图的WMTS也需要修改这几个文件:

WebMapTileServiceRasterOverlay.h

WebMapTileServiceRasterOverlay.cpp

CesiumWebMapTileServiceRasterOverlay.h

CesiumWebMapTileServiceRasterOverlay.cpp

将这四个文件分别放到以下对应的路径,注意路径一定不能错:

\CesiumForUnreal\Plugins\cesium-unreal\extern\cesium-native\Cesium3DTilesSelection\include\Cesium3DTilesSelection

\CesiumForUnreal\Plugins\cesium-unreal\extern\cesium-native\Cesium3DTilesSelection\src

\CesiumForUnreal\Plugins\cesium-unreal\Source\CesiumRuntime\Public

\CesiumForUnreal\Plugins\cesium-unreal\Source\CesiumRuntime\Private

3.编译插件
3.1首先编译和安装Cesium Native
我这里使用Cmake GUI(还有其它方式,具体操作可以参照md文档),按照如下配置之后(配置的路径要严格一致),点击“Configure”,之后点击“Generate”,等待完成,没有报错且在build文件夹生成了编译结果,就可以关闭Cmake GUI了。
在这里插入图片描述
在这里插入图片描述
编译之后会在文件夹下生成“cesium-unreal-extern.sln”,可以用VS打开。

在大纲视图中找到“Cesium3DTilesSelection”分别在“Header Files和Source Files”上右键“添加-现有项”,找到之前拷贝的WebMapTileServiceRasterOverlay的.h头文件和Cpp文件将其添加到项目里。

在大纲视图中选中“Install”右键点击“生成”,等待一段时间之后会生成完成,确保没有报错就把Cesiun-Native安装到项目里了。

默认的解决方案生成配置是“Debug”,方便查看日志,如果上一步没报错,切换成“Relaese”重新成功生成之后,然后关闭VS2022。

这时候打开“\Plugins\cesium-unreal\Source\ThirdParty”就可以看到Cesium Native安装的结果,确保在“\include\Cesium3DTilesSelection”;生成结果里有WebMapTileServiceRasterOverlay。
在这里插入图片描述
3.2.编译和启用Cesium for unreal
将“\CesiumForUnreal\Plugins\cesium-unreal\Documentation\”下的Source文件夹复制到UE项目根目录,替换原有的Source文件夹,这样打开之后就会有Cesium地图的关卡,也可以不做这一步,在UE里手动创建关卡添加Cesium对象和组件。

在UE项目的根目录中选中“CesiumForUnreal.uproject”,右键选择“Generate Visual Studio project files…”,重新生成VS工程文件。

在UE项目的根目录中打开“CesiumForUnreal.sln”,在大纲视图中找到“Games>CesiumForUnreal>Plugins>Source>CesiumRuntime”,分别在Private和Public上右键,将之前拷贝的CesiumWebMapTileServiceRasterOverlay的.h头文件和Cpp文件将其添加到项目里。

确认下解决方案平台设置为“Win64”,F5运行,等待编译结束会自动打开UE5.3.1引擎,会提示当前插件版本和UE版本不一致,点击“是”直接进入项目即可。进入之后在插件设置页面就可以在Project下看到已经加载了当前正在开发的Cesium for Unreal插件。
在这里插入图片描述
这个插件就具备了WMTS的功能,可以添加一个Cesium对象,添加WMTS组件,设置相关参数来加载WMTS图层服务。

3.3调试 Cesiun Native 代码

在VS的设置中禁用“Just my Code”。
需要把Cesium Native设置为Debug模式,重新生成并安装Cesium Native;需要把Cesium Unreal设置为Debug Editor模式。
找到并打开Cesium Native需要打断点的文件,启动调试,这样代码的断点就可以进入Cesiun Native了。

3.4定制天地图WMTS参数
如果要添加天地图,还需要对Cesium Native和Cesium Unreal的代码做定制化调整,调整之后重新编译打包:

由于天地图还有额外的tk参数,所以要加载天地图的WMTS还需要修改源码,让其可以设置token参数。

由于天地图瓦片是从1开始的,所以要加个zoomOffSet的参数。

由于天地图瓦片要在服务端请求要设置特定的http request header,所以需要在代码里添加http header。

3.5打包插件
所有问题调试完毕,可以正常加载WMTS服务之后,将Cesium Native的解决方案生成配置为“Realese”后重新生成并安装,将CesiumForUnreal的解决方案生成配置“Shipping”重新生成。

打开CesiumForUnreal UE项目,打包插件到目标位置就可以了。

4.添加WMTS服务
4.1插件使用
插件的使用也很简单,新建一个UE项目,在项目根目录创建Plugins文件夹,将插件放到这个文件夹中,重启UE程序会自动加载这个插件。

添加一个3dtile图层,在其细节面板中“Cesium”选项下设置“ Ion Access ID”为1(使用Cesium在线地形),然后在其右上角点击“添加”按钮添加2个“CesiumWebMapTileServiceRasterOverlay”组件用来当作天地图的影像和标注图层,设置如下参数:
影像 :
在这里插入图片描述
注记:在这里插入图片描述在这里插入图片描述

最终效果
在这里插入图片描述

### 在Unreal Engine中使用Cesium插件加载高德地图数据 #### 安装和配置Cesium for Unreal 为了在Unreal Engine项目中集成并利用Cesium来显示来自高德的地图影像,需先完成Cesium for Unreal的安装。 可以通过Epic Games Launcher中的Twinmotion部分找到Cesium for Unreal插件,并按照提示进行安装。也可以访问官方GitHub仓库获取最新版本源码编译安装[^1]。 #### 配置高德地图服务 由于Cesium默认支持多种在线地理信息服务提供商(如Bing Maps, ArcGIS Online),而直接对接中国本土服务商如高德地图则需要额外设置: 1. **申请API Key** 访问高德开放平台注册账号并创建应用以获得合法使用的密钥。 2. **自定义图层URL模板** 构建符合Cesium预期格式的Tile Map Service(TMS)或Web Map Tile Service(WMTS)请求链接字符串。对于高德而言,通常形式如下: ``` https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z} ``` 3. **实现ImageryProvider类** 编写继承于`Cesium::CustomUrlTemplateImageryProvider`的具体子类,在其中重载虚函数指定上述定制化参数。 ```cpp #include "Cesium/CustomUrlTemplateImageryProvider.h" class AGaodeMapProvider : public CustomUrlTemplateImageryProvider { public: AGaodeMapProvider(const FString& apiKey) : CustomUrlTemplateImageryProvider( TEXT("https://webrd0{x}.is.autonavi.com/appmaptile?" "lang=zh_cn&size=1&scale=1&style=7&x={X}&y={Y}&z={Z}"), /*minLevel=*/0, /*maxLevel=*/19, /*tilingScheme=*/std::make_shared<CesiumGeospatial::WebMercatorTilingScheme>(), /*rectangle=*/Rectangle::MAX_VALUE, /*apiKey=*/apiKey) {} }; ``` 4. **实例化与挂接至场景视图** 最后一步是在UE编辑器内或者蓝图脚本里新建该提供者的实体对象并将之绑定到当前世界的可视化组件上。 ```blueprint // 假设已在C++侧暴露了AGaodeMapProvider给Blueprints GaodeMapProvider = NewObject<AGaodeMapProvider>(this,TEXT("MyGaodeLayer")); if(GaodeMapProvider){ GaodeMapProvider->SetupPlayerInputComponent(PlayerController); UWorld* world = GetWorld(); if(world && CesiumEditorUtils::IsCesiumForUnrealEnabled()){ ACesium3DTileset* tileSet = ACesium3DTileset::AddNew(this,FVector(0.f)); tileSet->SetImageryProvider(GaodeMapProvider); } } ``` 通过以上步骤即可实现在基于Unreal Engine的游戏或其他虚拟环境中调用高德地图作为底图资源展示的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值