Files
planet/ue_client/Source/PlanetClient/StereoRenderingManager.h
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

98 lines
3.7 KiB
C++
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.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "StereoRenderingManager.generated.h"
/**
* 立体渲染输出格式
*
* TODO等待视频处理器供应商回复:
* 确认视频处理器接受哪种格式后,在 DefaultStereoMode 里选择对应值。
* - 如果是诺瓦星云/Brompton 处理器,通常接受 SideBySide
* - Frame Sequential 需要 120Hz+ 输出,本项目屏幕不需要,基本不选
*/
UENUM(BlueprintType)
enum class EStereoOutputMode : uint8
{
Off UMETA(DisplayName="关闭(普通 2D 输出)"),
SideBySide UMETA(DisplayName="左右并排 Side-by-Side"), // 最常见,优先尝试
TopBottom UMETA(DisplayName="上下叠加 Top-Bottom"), // 备选
FrameSequential UMETA(DisplayName="帧序列(需 120Hz"), // 本项目暂不用
};
/**
* AStereoRenderingManager
*
* 放一个在场景里(或在 GameMode 里 SpawnActor控制立体渲染的开关和参数。
* 运行时可以通过 Blueprint 或控制台随时切换模式,方便现场调试。
*
* TODO等待供应商回复后填写:
* 1. 确认视频处理器输入格式 → 修改 DefaultStereoMode
* 2. 确认屏幕分辨率 → 修改渲染分辨率(目前按 5120x1440 SbS 估算)
* 3. 调整 IPDCm 到适合大屏幕观看距离的值(推荐 3-6cm距离越远 IPD 越小)
*/
UCLASS(BlueprintType, Blueprintable)
class PLANETCLIENT_API AStereoRenderingManager : public AActor
{
GENERATED_BODY()
public:
AStereoRenderingManager();
// -----------------------------------------------------------------------
// 可在 Details 面板调整
// -----------------------------------------------------------------------
// TODO: 等供应商回复后改为正确格式
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Planet|Stereo")
EStereoOutputMode DefaultStereoMode = EStereoOutputMode::SideBySide;
// 瞳距cm。大屏幕 + 远距离观看建议 3.0-5.0cm
// TODO: 根据实际屏幕尺寸和观看距离校准
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Planet|Stereo",
meta=(ClampMin="1.0", ClampMax="10.0"))
float IPDCm = 6.5f;
// 是否在 BeginPlay 时自动启用立体渲染
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Planet|Stereo")
bool bAutoEnableOnPlay = false; // 默认 false等确认格式后改为 true
// -----------------------------------------------------------------------
// Blueprint 可调用的运行时 API
// -----------------------------------------------------------------------
// 开启立体渲染
UFUNCTION(BlueprintCallable, Category="Planet|Stereo")
void EnableStereo(EStereoOutputMode Mode);
// 关闭立体渲染,切回普通 2D
UFUNCTION(BlueprintCallable, Category="Planet|Stereo")
void DisableStereo();
// 切换(当前开 → 关,当前关 → 用 DefaultStereoMode 开)
UFUNCTION(BlueprintCallable, Category="Planet|Stereo")
void ToggleStereo();
// 调整 IPD运行时微调景深效果
UFUNCTION(BlueprintCallable, Category="Planet|Stereo")
void SetIPD(float NewIPDCm);
UFUNCTION(BlueprintPure, Category="Planet|Stereo")
bool IsStereoActive() const { return bStereoActive; }
UFUNCTION(BlueprintPure, Category="Planet|Stereo")
EStereoOutputMode GetCurrentMode() const { return CurrentMode; }
protected:
virtual void BeginPlay() override;
private:
bool bStereoActive = false;
EStereoOutputMode CurrentMode = EStereoOutputMode::Off;
// 执行实际的控制台命令
void ExecConsoleCommand(const FString& Cmd);
static FString ModeToString(EStereoOutputMode Mode);
};