cesium126,230316,根据经纬度动态生成物体:主要使用了角色的 tag 属性,地球锚点也是有 tag 属性的

(103)上一节学习了在城市上给出标签,展示城市的名字。这一节学习动态的展示名字标签。又引入了关于 UE 的新的知识点。
作为父子组件,父组件是具有锚点的,且是可移动的。因为要动态生成标签,而不再是作为锚点父组件的子组件,所以动态标签也要有这样的特点。

在这里插入图片描述

在这里插入图片描述

++ 填写锚点里的 tag

在这里插入图片描述

(104)修改 BP_label 蓝图

在这里插入图片描述

++

在这里插入图片描述

(105)老师的程序里有主 UI 界面蓝图,生成按钮,来开关标签,为了简化,改为键盘按钮控制得了附加 UIBP 蓝图的定义

在这里插入图片描述

(106)在主关卡蓝图用键盘开关标签

在这里插入图片描述

++ 按键1,生成标签

在这里插入图片描述

(107)运行效果

在这里插入图片描述

(108)

谢谢

### Cesium for Unreal 中经纬度转换为世界坐标的实现方式 在 Cesium for Unreal 中,将经纬度转换为世界坐标是一个常见的需求。以下是实现该功能的具方法和相关说明: #### 1. 使用 UCesiumGlobeAnchorComponent 在 Cesium for Unreal 中,`UCesiumGlobeAnchorComponent` 是一个关键组件,它提供了许多与地理坐标相关的功能。通过调用其 `MoveToLongitudeLatitudeHeight` 函数,可以将目标移动到指定的经纬度和高度位置[^3]。 - **函数签名**: ```cpp void UCesiumGlobeAnchorComponent::MoveToLongitudeLatitudeHeight( double LongitudeRadians, double LatitudeRadians, double HeightMeters); ``` - **参数说明**: - `LongitudeRadians`:经度值(以弧度为单位)。 - `LatitudeRadians`:纬度值(以弧度为单位)。 - `HeightMeters`:海拔高度(以米为单位)。 此函数会将组件的拥有者(Owner)移动到指定的经纬度和高度,并自动计算对应的世界坐标。 #### 2. 将经纬度转换为弧度 Cesium 中的经纬度通常以弧度为单位进行计算。因此,在调用上述函数之前,需要将输入的经纬度从角度转换为弧度[^1]。 - **转换公式**: ```cpp double DegreesToRadians(double degrees) { return degrees * (PI / 180.0); } ``` - **代码示例**: ```cpp double LongitudeDegrees = 120.0; // 示例经度值 double LatitudeDegrees = 30.0; // 示例纬度值 double HeightMeters = 100.0; // 示例高度值 double LongitudeRadians = DegreesToRadians(LongitudeDegrees); double LatitudeRadians = DegreesToRadians(LatitudeDegrees); UCesiumGlobeAnchorComponent* GlobeAnchor = ...; // 获取 GlobeAnchor 组件 GlobeAnchor->MoveToLongitudeLatitudeHeight(LongitudeRadians, LatitudeRadians, HeightMeters); ``` #### 3. 获取世界坐标 调用 `MoveToLongitudeLatitudeHeight` 后,组件的拥有者会被放置在指定的地理坐标上。此时,可以通过以下方式获取对应的世界坐标: - **使用 Actor 的 Transform 属性**: ```cpp FVector WorldPosition = GlobeAnchor->GetComponentLocation(); ``` - **解释**: `GetComponentLocation()` 返回的是组件在世界空间中的位置,即经过转换后的世界坐标[^3]。 #### 4. 自定义转换逻辑 如果需要手动实现经纬度到世界坐标的转换,可以参考 Cesium 的内部实现逻辑。具步骤如下: - **创建 Cartographic 对象**: ```cpp CesiumGeospatial::Cartographic cartographic( LongitudeRadians, LatitudeRadians, HeightMeters); ``` - **转换为 Cartesian3 坐标**: ```cpp CesiumGeospatial::Ellipsoid ellipsoid = CesiumGeospatial::Ellipsoid::WGS84(); glm::dvec3 cartesian = ellipsoid.cartographicToCartesian(cartographic); ``` - **解释**: 上述代码中,`cartographicToCartesian` 方法将地理坐标(弧度表示)转换为三维笛卡尔坐标系下的。 #### 5. 注意事项 - 确保输入的经纬度值正确无误,并且已经转换为弧度制。 - 如果涉及到高精度计算,建议使用 Cesium 提供的椭球模型(如 WGS84),以保证结果的准确性[^1]。 --- ### 示例代码 以下是一个完整的代码示例,展示如何在 Cesium for Unreal 中将经纬度转换为世界坐标: ```cpp #include "CesiumGlobeAnchorComponent.h" #include <cmath> double DegreesToRadians(double degrees) { return degrees * (M_PI / 180.0); } void ConvertGeoToCartesian(UCesiumGlobeAnchorComponent* GlobeAnchor, double LongitudeDegrees, double LatitudeDegrees, double HeightMeters) { double LongitudeRadians = DegreesToRadians(LongitudeDegrees); double LatitudeRadians = DegreesToRadians(LatitudeDegrees); GlobeAnchor->MoveToLongitudeLatitudeHeight(LongitudeRadians, LatitudeRadians, HeightMeters); FVector WorldPosition = GlobeAnchor->GetComponentLocation(); UE_LOG(LogTemp, Warning, TEXT("World Position: %s"), *WorldPosition.ToString()); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值