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>
98 lines
3.7 KiB
C++
98 lines
3.7 KiB
C++
#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);
|
||
};
|