Files
planet/docs/ue5_mvp_fused_plan.md
linkong 1e6f4b338b feat: add UE5 LED display client — backend API, C++ source, stereo framework
Backend:
- Add /api/v1/ue/* endpoints (compute-points, cables, landing-points, satellites, status)
  returning flat JSON optimised for UE5 C++ parsing

UE5 client (ue_client/):
- PlanetDataManager: HTTP fetch + local mock JSON loader, spawns ComputePointActors
- ComputePointActor / InteractiveObjectBase: hover/select state, material switching
- GlobeInteractionComponent: drag-to-rotate via CesiumGeoreference origin shift, inertia, zoom
- StereoRenderingManager: runtime SbS/TbB stereo toggle, IPD control (format TBD)
- MotionCaptureInterface: protocol-agnostic gesture/rotate/zoom delegate interface (impl TBD)
- PlanetPlayerController: unified mouse + motion-capture input routing
- PlanetGameMode, Build.cs, Config, mock data

Docs:
- ue5_mvp_fused_plan.md updated to v3.0 for LED display context
- ue_client_setup_guide.md: step-by-step editor setup guide
- ue_todo.md: pending items blocked on vendor answers (stereo format + mocap protocol)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 18:39:05 +08:00

153 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 智能星球 UE5 客户端实施方案LED 大屏版)
> 版本v3.0
> 日期2026-04-14
> 背景更新:目标从"普通桌面地球"升级为"5m 被动偏振 3D LED 大屏 + 动捕交互演示系统"
---
## 一、真实场景描述
```
领导进入展示间
5.12m × 2.88m 被动偏振 3D LED 大屏开机
UE5 实时渲染的 3D 地球从屏幕"飞出"
(配合被动 3D 眼镜,数据点有真实景深)
演示者做手势(无穿戴动捕摄像头捕捉)
→ 地球旋转、缩放
→ 指向数据点 → 高亮
→ 确认手势 → 信息卡弹出(漂浮在屏幕前方)
鼠标/触控作为备用输入
```
---
## 二、系统架构
```
┌─────────────────────────────────────────────────┐
│ RTX 5090 渲染工作站 │
│ │
│ Planet 后端FastAPI
│ ↕ /api/v1/ue/* │
│ UE5 主程序(本项目) │
│ ├── Cesium 地球 │
│ ├── 超算数据点 │
│ ├── 其他可交互物件 │
│ └── 立体渲染输出 (Side-by-Side / Top-Bottom) │
│ │
└─────────────┬───────────────────────────────────┘
│ HDMI/DP 视频信号
视频处理器(随屏配套)
│ LED 驱动信号(行偏振)
5.12m × 2.88m 被动偏振 3D LED 大屏
观众戴无源 3D 眼镜≤18g无需充电
动捕摄像头×2
↓ 手势识别(无穿戴)
动捕中间件 ─→ UE5Live Link / OSC待确认
```
---
## 三、一期交付目标6 项)
1. ✅ 地球在 3D 大屏上正确显示,有景深效果
2. ✅ 超算数据点散布在地球上,可悬停高亮
3. ✅ 点击/手势确认 → 弹出数据点信息卡
4. ✅ 鼠标拖拽/手势 → 地球旋转(带惯性)
5. ✅ 滚轮/手势 → 缩放
6. ⏳ 立体渲染格式配置(等视频处理器格式答复)
7. ⏳ 动捕手势接入(等中间件协议答复)
---
## 四、已完成的代码
### 后端(`backend/app/api/v1/ue_data.py`
| 接口 | 说明 |
|------|------|
| `GET /api/v1/ue/status` | 健康检查 |
| `GET /api/v1/ue/compute-points` | 超算数据(平铺 JSON|
| `GET /api/v1/ue/landing-points` | 海缆登陆点 |
| `GET /api/v1/ue/cables` | 海缆几何 |
| `GET /api/v1/ue/satellites` | 卫星 TLE |
### UE5 C++ 源码(`ue_client/Source/PlanetClient/`
| 文件 | 功能 |
|------|------|
| `PlanetDataTypes.h` | 数据结构FComputePoint 等)|
| `PlanetDataManager.h/.cpp` | HTTP 拉取 + 本地 mock 数据 + 生成 Actor |
| `ComputePointActor.h/.cpp` | 单个超算点 Actor三态材质 |
| `InteractiveObjectBase.h/.cpp` | 所有可交互物件的基类 |
| `GlobeInteractionComponent.h/.cpp` | 地球旋转/缩放,带惯性 |
| `StereoRenderingManager.h/.cpp` | 立体渲染框架,运行时切换模式 |
| `MotionCaptureInterface.h` | 动捕接口定义,协议无关 |
| `PlanetPlayerController.h/.cpp` | 统一处理鼠标 + 动捕输入 |
| `PlanetGameMode.h/.cpp` | 场景入口,自动初始化管理器 |
| `PlanetClient.Build.cs` | 模块依赖(含 TODO 注释)|
### 数据和配置
| 文件 | 说明 |
|------|------|
| `Content/Data/mock_compute_points.json` | 10 个真实超算的 mock 数据 |
| `Config/DefaultGame.ini` | GameMode 配置 |
| `Config/DefaultEngine.ini` | 渲染设置 |
| `Config/DefaultInput.ini` | 键鼠输入绑定 |
---
## 五、你需要在编辑器里做的操作
> 完整步骤见 `docs/ue_client_setup_guide.md`
**最小操作清单Phase A 本地演示):**
1. 安装 UE5.3 + Cesium for Unreal 插件
2. 打开 `ue_client/PlanetClient.uproject`,等待编译
3. 创建空关卡 `EarthMap`,通过 Cesium 菜单添加地球
4. 拖入 CesiumDynamicPawn设置 Auto Possess Player 0
5. World Settings → GameMode → PlanetGameMode
6. 创建 `BP_ComputePointActor`(父类 `AComputePointActor`),配置球体网格 + 三色材质
7. 创建 `BP_PlanetDataManager`,拖入场景,绑定 `ComputePointClass`
8. Play → 看到 10 个橙色球体,可悬停 + 点击
---
## 六、TODO 项(等供应商答复)
> 详细对照表见 `docs/ue_todo.md`
### TODO-1立体渲染格式
- **等待**:视频处理器接受什么 3D 输入格式SbS / TbB / 行交错)
- **代码位置**`StereoRenderingManager.cpp`
- **工作量**0.5 天
### TODO-2动捕协议
- **等待**:中间件使用 Live Link / OSC / 私有 SDK
- **代码位置**`MotionCaptureInterface.h``PlanetPlayerController.cpp`
- **工作量**Live Link=2hOSC=1天私有SDK=1-3天
---
## 七、后续阶段规划
| 阶段 | 内容 | 状态 |
|------|------|------|
| Phase A | 本地 mock 数据,鼠标交互,单目 2D | ✅ 代码就绪 |
| Phase B | 接入真实后端 `/api/v1/ue/*` | ✅ 代码就绪 |
| Phase C | 立体 3D 输出 | ⏳ 等格式确认 |
| Phase D | 动捕手势交互 | ⏳ 等协议确认 |
| Phase E | 海缆 Spline 渲染 | 待开发 |
| Phase F | 其他可交互物件(基类已就绪) | 待定义 |