editor camera: dedicated Scene-view camera decoupled from camera entities

EditorCamera (UE FEditorViewportClient semantics) owned by SceneRenderer:
own TransformComponent + reused Camera controller. BuildFrame dispatches
render source by display mode — editor form always renders from the
editor camera (usable in empty scenes), game form renders from the
scene's primary camera entity. AlignTo copies an entity pose into the
editor camera ("Align Viewport to Camera" button in Inspector). F focus
and viewport gizmo now follow the same dispatch. main.cpp stripped of
dangling sandbox camera/spinner state; onSceneLoaded hook removed.
This commit is contained in:
2026-10-03 15:52:28 +08:00
parent e2a9c21e68
commit fae6614e70
12 changed files with 192 additions and 229 deletions
+4 -3
View File
@@ -12,6 +12,7 @@
#include <Engine/ECS/Scene.h>
#include <Engine/Assets/AssetManager.h>
#include <Engine/Renderer/Renderer.h>
#include <Engine/Renderer/EditorCamera.h>
#include <Engine/Renderer/SceneTypes.h> // kDisplayViewport / kDisplayDirect
#include <functional>
@@ -37,12 +38,12 @@ struct EditorContext {
Engine::ECS::Scene *scene = nullptr;
Engine::Assets::AssetManager *assets = nullptr;
Engine::Application *app = nullptr;
// 编辑器相机(Scene view 专用,归 Renderer 持有——与场景相机实体
// 无关;面板经此做 F 焦点/Gizmo 视图/对齐跳转)
Engine::EditorCamera *editorCamera = nullptr;
std::function<int()> getEnvIndex; // 当前环境表下标
std::function<void(int)> setEnvIndex;
// 场景加载成功后由 SandboxApp 重解析悬空句柄(registry 清场重建后
// 应用层持有的 EntityHandle 全部悬空,见 Scene::Clear 注释)
std::function<void()> onSceneLoaded;
};
#endif //HELLOVULKAN_EDITORCONTEXT_H