当前位置: 首页 > news >正文

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来制作&#xff0c;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 中用于增加数组维度的关键字。它的作用是为数组插入一个新的维度&#xff0c;从而改变数组的形状&#xff08;shape&#xff09;。 基本用法 np.newaxis 等价于 None&#xff0c;可以作为索引使用&#xff0c;用于在指定位置增加一个维度。增加的维度的大…...

小程序配置文件 —— 16 项目配置文件和配置 sass

目录 项目配置文件配置 sass 项目配置文件 在创建项目的时候&#xff0c;每个项目的根目录生成两个 config.json 文件&#xff08;project.config.json 和 project.private.config.json &#xff09;&#xff0c;用于保存开发者在工具上做的个性化配置&#xff0c;例如和编译有…...

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白&#xff0c;通过语言大模型百度进行搜索&#xff0c;磕磕绊绊的实现了初步效果&#xff0c;能有一些锁头效果&#xff0c;但识别速度不是非常快&#xff0c;且没有做敌友区分&#xff0c;效果不是非常的理想&#xff0c;但在4399小游戏中爽一下还是可以…...

概率统计与随机过程--作业5

一、推导题 二、计算题 1、某单位为了研究太阳镜销售和广告费用之间的关系&#xff0c;搜集了以下数据&#xff0c;使用回归分析方法得到线性回归模型&#xff1a; 广告费用&#xff08;万元&#xff09;x 2 5 6 7 22 25 28 30 22 18 销售量&#xff08;个&#xf…...

“802.11g”,“802.11n”,“802.11ac”,“802.11ax”

802.11g、802.11n、802.11ac、802.11ax都是IEEE制定的无线局域网&#xff08;WLAN&#xff09;标准&#xff0c;它们各自具有不同的特点和性能。以下是对这四个标准的详细介绍&#xff1a; 1. 802.11g 定义&#xff1a;802.11g是IEEE制定的一种无线局域网标准&#xff0c;它提…...

Kubernetes 常用的网络插件

上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件&#xff0c;它是一个插件接口&#xff0c;允许用户选择和配置网络插件来管理 Pod 的网络。CN…...

Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试

在使用 Retrofit 和 RxJava 时&#xff0c;可以通过多种方式实现多次请求&#xff0c;比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式&#xff1a; 1. 串行请求&#xff08;依赖关系&#xff09; 一个请求的结果作为另一个请求的输入&#xff0c;可以用 flat…...

2025年度好用便签推荐,电脑桌面便签app分享

在快节奏的现代生活中&#xff0c;高效的时间管理和任务规划变得尤为重要。一款好用的便签软件不仅能帮助我们记录灵感、待办事项&#xff0c;还能极大地提升我们的工作效率。 在众多电脑桌面便签中&#xff0c;好用便签以其出色的桌面便签功能脱颖而出&#xff0c;备受用户青…...

【论文解读】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、背景 按照项目验收要求&#xff0c;需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理&#xff0c;所以我们自定义预览接口&#xff08;进行解密操作&#xff…...

被裁20240927 --- 嵌入式硬件开发 STM32篇

人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 &#xff1f;什么是 DMA &#xff1f;什么是晶振 &#xff1f;什么是片内外设&#xff1f;软件协议、硬件协议、数据协议、通讯协议、通信协议u…...

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

C/C++ 数据结构与算法【图】 图+邻接矩阵+邻接表+DFS+BFS+最小生成树+最短路径+拓扑排序详细解析【日常学习,考研必备】带图+详细代码

一、图的定义 1&#xff09;无向图&#xff0c;有向图&#xff0c;完全图 2&#xff09;稀疏图&#xff0c;稠密图&#xff0c;网&#xff0c;邻接&#xff0c;关联 3&#xff09;度 4&#xff09;路径 5&#xff09;连通图 6&#xff09;权与网 7&#xff09;子图 8&#xff0…...

Linux实验报告7-文件管理

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 (1)查看/etc/inittab文件的权限属性&#xff0c;并指出该文件的所有者以及文件所属组群。 (2)新建文件test&#xff0c;设置文件权限为r--r-----。 (3)新建文件test2&#xff0c;设系统中有用户study和用户组studygr…...

RJ45网口模块设计

1、以太网概述及RJ45实物 2、常用网口信号介绍 3、RJ45网口布局布线要点分析 4、总结 1、变压器下面需要进行挖空处理&#xff0c;以免底下的铜引入干扰&#xff0c;&#xff08;将多边形挖空区域的所在层设置为Multi-Layer多层&#xff09; 2、为了更直观的看一个类中线的长…...

电子电器架构 --- 智能座舱HUD技术革新

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…...

嵌入式开发中的机器人表情绘制

机器人的表情有两种&#xff0c;一种是贴图&#xff0c;一钟是调用图形API自绘。 贴图效果相对比较好&#xff0c;在存储空间大的情况下是可以采用的。 自绘比较麻烦&#xff0c;但在资源和空缺少的情况下&#xff0c;也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...

orm01

静态文件处理 静态文件&#xff1a;如&#xff1a;图片、音频、视频、css、js等静态文件的相关配置也在 项目名/项目名/settings.py 文件中进行配置 - 配置静态文件的访问路径STATIC_URL- 功能&#xff1a;通过哪个 url 地址找静态文件- 默认配置&#xff1a;STATIC_URL /sta…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...