UE5.3 C++ Ceiusm中的POI 制作3DUI 结合坐标转化
一.核心思路WidgetComponent + CesiumGloberAnchor
二.先制作POI
创建C++ Actor来制作,APOI。直接上代码
#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CesiumGlobeAnchorComponent.h"
#include "POI.generated.h"UCLASS()
class HMS3DUI_API APOI : public AActor
{GENERATED_BODY()public: // Sets default values for this actor's propertiesAPOI();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public: // Called every framevirtual void Tick(float DeltaTime) override;UFUNCTION(BlueprintCallable)void MoveToLLA(double Longtitude,double Latitude,double Altidude);UFUNCTION(BlueprintCallable)FVector GetLLA();// WidgetComponentUPROPERTY(BlueprintReadWrite,EditAnywhere, Category = WidgetComponent)class UWidgetComponent* WidgetComponent;
private:UPROPERTY(BlueprintReadOnly, EditAnywhere, meta = (AllowPrivateAccess = "true"))UCesiumGlobeAnchorComponent* globeAnchor;//地球组件
};
然后在CPP里,实现组件。并设置为3DUI,这里用的屏幕尺寸的。
// Sets default values
APOI::APOI()
{// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;WidgetComponent = CreateDefaultSubobject<UWidgetComponent>(TEXT("WidgetComponent"));WidgetComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);// 设置控件蓝图//UClass* Widget = LoadClass<UUserWidget>(NULL, TEXT("/Script/UMGEditor.WidgetBlueprint'/HMS3DUI/POI.POI_C'"));static ConstructorHelpers::FClassFinder<UUserWidget>WidgetClass(TEXT("/Script/UMGEditor.WidgetBlueprint'/HMS3DUI/POI.POI_C'"));WidgetComponent->SetWidgetClass(WidgetClass.Class);//设置渲染方式,是渲染到屏幕还是世界中WidgetComponent->SetWidgetSpace(EWidgetSpace::Screen);//设置绘制大小WidgetComponent->SetDrawSize(FVector2D(1280, 720));globeAnchor = CreateDefaultSubobject<UCesiumGlobeAnchorComponent>(TEXT("CesiumGlobe"));
}
两个函数,无论时显示UI现在的地方,还是UI输入去其它地方都能实现,坐标的转换。
void APOI::MoveToLLA(double Longtitude, double Latitude, double Altidude)
{globeAnchor->MoveToLongitudeLatitudeHeight(FVector(Longtitude, Latitude, Altidude));
}FVector APOI::GetLLA()
{FVector tmp = globeAnchor->GetLongitudeLatitudeHeight();if (globeAnchor){return tmp;}return FVector(0,0,0);
}
简单做个UI,这个UI把锚点放到屏幕中心。就能实现3DUI刚好在那个点上。

通过UIManager, Spawn和管理3DUI.
void AHMSUIManager::Spawn3DUI(double Longtitude, double Latitude, double Altidude)
{/*UClass* MyTmpClass = LoadClass<AActor>(this, TEXT("/Script/Engine.Blueprint'/HMS3DUI/BP_POI.BP_POI_C'"));if (MyTmpClass){AActor* SpawnActor = GetWorld()->SpawnActor<AActor>(MyTmpClass, FVector::ZeroVector, FRotator::ZeroRotator);}*/UClass* MyTmpClass = LoadClass<APOI>(this, TEXT("/Script/Engine.Blueprint'/HMS3DUI/BP_POI.BP_POI_C'"));APOI* poi = GetWorld()->SpawnActor<APOI>(MyTmpClass);poi->MoveToLLA(Longtitude, Latitude, Altidude);
}
简单的通过UI,传值调用。

这里当时卡住了,我继承了C++类来进一步写POI的写如UI的TEXT。获得WidgetComponet并GetWidget 转换为 POI这个Widget。这样就可以实现Actor拿到它想显示的UI,并赋值修改这个UI。

而且涉及经纬度,ToText需要设置小数点后的位数 7。

自动在对应经纬产出物体,显示经纬高

三. 延申功能,在鼠标射线中,点击的地方生成3DUI。
之所以用蓝图,因为快。C++也能写只是,要多加一些库。

核心


相关文章:
UE5.3 C++ Ceiusm中的POI 制作3DUI 结合坐标转化
一.核心思路WidgetComponent CesiumGloberAnchor 二.先制作POI 创建C Actor来制作,APOI。直接上代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CesiumGlobeAnchorComponent.h" #includ…...
一起学Git【第六节:查看版本差异】
git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…...
numpy np.newaxis介绍
np.newaxis 是 NumPy 中用于增加数组维度的关键字。它的作用是为数组插入一个新的维度,从而改变数组的形状(shape)。 基本用法 np.newaxis 等价于 None,可以作为索引使用,用于在指定位置增加一个维度。增加的维度的大…...
小程序配置文件 —— 16 项目配置文件和配置 sass
目录 项目配置文件配置 sass 项目配置文件 在创建项目的时候,每个项目的根目录生成两个 config.json 文件(project.config.json 和 project.private.config.json ),用于保存开发者在工具上做的个性化配置,例如和编译有…...
【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄
介绍 本人机器学习小白,通过语言大模型百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以…...
概率统计与随机过程--作业5
一、推导题 二、计算题 1、某单位为了研究太阳镜销售和广告费用之间的关系,搜集了以下数据,使用回归分析方法得到线性回归模型: 广告费用(万元)x 2 5 6 7 22 25 28 30 22 18 销售量(个…...
“802.11g”,“802.11n”,“802.11ac”,“802.11ax”
802.11g、802.11n、802.11ac、802.11ax都是IEEE制定的无线局域网(WLAN)标准,它们各自具有不同的特点和性能。以下是对这四个标准的详细介绍: 1. 802.11g 定义:802.11g是IEEE制定的一种无线局域网标准,它提…...
Kubernetes 常用的网络插件
上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件,它是一个插件接口,允许用户选择和配置网络插件来管理 Pod 的网络。CN…...
Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试
在使用 Retrofit 和 RxJava 时,可以通过多种方式实现多次请求,比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式: 1. 串行请求(依赖关系) 一个请求的结果作为另一个请求的输入,可以用 flat…...
2025年度好用便签推荐,电脑桌面便签app分享
在快节奏的现代生活中,高效的时间管理和任务规划变得尤为重要。一款好用的便签软件不仅能帮助我们记录灵感、待办事项,还能极大地提升我们的工作效率。 在众多电脑桌面便签中,好用便签以其出色的桌面便签功能脱颖而出,备受用户青…...
【论文解读】Arbitrary-steps Image Super-resolution via Diffusion Inversion
级别:arXiv Computer Vision and Pattern Recognition(2024)作者:Zongsheng Yue,Kang Liao,Chen Change Loy时间:2024论文链接:Arbitrary-steps Image Super-resolution via Diffusion Inversion摘要 技术概述:该技术基于扩散反转,通过设计部分噪声预测策略来构建扩散…...
kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源
目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作ÿ…...
被裁20240927 --- 嵌入式硬件开发 STM32篇
人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 ?什么是 DMA ?什么是晶振 ?什么是片内外设?软件协议、硬件协议、数据协议、通讯协议、通信协议u…...
留学生交流互动系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...
C/C++ 数据结构与算法【图】 图+邻接矩阵+邻接表+DFS+BFS+最小生成树+最短路径+拓扑排序详细解析【日常学习,考研必备】带图+详细代码
一、图的定义 1)无向图,有向图,完全图 2)稀疏图,稠密图,网,邻接,关联 3)度 4)路径 5)连通图 6)权与网 7)子图 8࿰…...
Linux实验报告7-文件管理
目录 一:实验目的 二:实验内容 (1)查看/etc/inittab文件的权限属性,并指出该文件的所有者以及文件所属组群。 (2)新建文件test,设置文件权限为r--r-----。 (3)新建文件test2,设系统中有用户study和用户组studygr…...
RJ45网口模块设计
1、以太网概述及RJ45实物 2、常用网口信号介绍 3、RJ45网口布局布线要点分析 4、总结 1、变压器下面需要进行挖空处理,以免底下的铜引入干扰,(将多边形挖空区域的所在层设置为Multi-Layer多层) 2、为了更直观的看一个类中线的长…...
电子电器架构 --- 智能座舱HUD技术革新
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源&…...
嵌入式开发中的机器人表情绘制
机器人的表情有两种,一种是贴图,一钟是调用图形API自绘。 贴图效果相对比较好,在存储空间大的情况下是可以采用的。 自绘比较麻烦,但在资源和空缺少的情况下,也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...
orm01
静态文件处理 静态文件:如:图片、音频、视频、css、js等静态文件的相关配置也在 项目名/项目名/settings.py 文件中进行配置 - 配置静态文件的访问路径STATIC_URL- 功能:通过哪个 url 地址找静态文件- 默认配置:STATIC_URL /sta…...
C++轻量级HTTP库cpp-httplib:从嵌入式设备到企业服务的全场景解决方案
C轻量级HTTP库cpp-httplib:从嵌入式设备到企业服务的全场景解决方案 【免费下载链接】cpp-httplib A C header-only HTTP/HTTPS server and client library 项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib 在现代C开发中,构建网络…...
反激电源设计避坑:空载炸管、RCD吸收烧电阻?聊聊DCM模式下那些容易忽略的细节
反激电源实战陷阱解析:从空载炸管到RCD失效的深度拆解 实验室里弥漫着焦糊味,示波器上那条本该稳定的波形突然飙升——这可能是每个电源工程师都经历过的噩梦时刻。反激拓扑看似简单,但当你的设计从仿真进入实测阶段,各种"幽…...
告别本地编译卡顿:用CLion+Docker容器实现丝滑的Linux远程C++开发(保姆级教程)
告别本地编译卡顿:用CLionDocker容器实现丝滑的Linux远程C开发(保姆级教程) 在Windows或Mac上开发Linux C项目时,你是否经历过这些困扰:本地交叉编译环境配置复杂、编译速度缓慢、依赖冲突频发,或是开发环境…...
Rk3566 yolov5部署(一)Ubuntu系统镜像烧录与串口调试实战
1. 准备工作:硬件与软件清单 在开始RK3566开发板的Ubuntu系统镜像烧录之前,我们需要准备好必要的硬件和软件工具。我刚开始接触这块开发板时,就因为漏掉了几个小配件耽误了一整天时间,所以特别提醒大家要仔细检查以下清单。 硬件部…...
告别数据丢失!GD32串口DMA双缓冲+内存对齐配置避坑指南
GD32串口DMA双缓冲与内存对齐实战:工业级数据零丢失方案 在工业自动化、高速数据采集等场景中,串口通信的稳定性和效率直接关系到整个系统的可靠性。当波特率提升到921600甚至更高时,传统的轮询或中断方式往往难以应对持续的数据流࿰…...
Gemma-3-12B-IT WebUI部署:支持HTTPS反向代理与Nginx负载均衡配置
Gemma-3-12B-IT WebUI部署:支持HTTPS反向代理与Nginx负载均衡配置 1. 项目概述 如果你正在寻找一个性能强大、易于部署,并且能通过Web界面直接对话的开源大模型,那么Gemma-3-12B-IT绝对值得关注。这个由Google开发的120亿参数模型ÿ…...
Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案
Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案 【免费下载链接】html2pdf OFFICIAL PROJECT | HTML to PDF converter written in PHP 项目地址: https://gitcode.com/gh_mirrors/ht/html2pdf 在当今企业数字化转型浪潮中…...
手把手教你用Whistle给SSE/流式接口做Mock:从复制URL到完整响应的保姆级配置
从零构建SSE接口Mock环境:Whistle流式数据模拟实战指南 当你在开发一个实时聊天应用或AI对话界面时,Server-Sent Events (SSE)技术能提供持续的数据流,但测试环境的搭建往往令人头疼。想象一下,你的前端代码需要处理/api/chat这样…...
精准匹配歌词:Foobar2000歌词插件配置完全指南
精准匹配歌词:Foobar2000歌词插件配置完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 3分钟完成版本适配检测 如何确定你的Foobar20…...
2026考公全攻略:在校生如何选岗、如何备考、如何上岸一次讲清
很多在校生最近都在问:现在开始准备公务员考试,还来得及吗先说结论:来得及,但前提是你要走对路径这几年考公环境已经发生明显变化报考人数持续增加岗位信息越来越透明单纯刷题已经不再有效考公正在从拼努力,变成拼策略…...
