2026-03-27 14:40:29 +08:00
|
|
|
|
# SceneViewPanel
|
|
|
|
|
|
|
|
|
|
|
|
**命名空间**: `XCEngine::Editor`
|
|
|
|
|
|
|
|
|
|
|
|
**类型**: `class`
|
|
|
|
|
|
|
|
|
|
|
|
**源文件**: `editor/src/panels/SceneViewPanel.h`
|
|
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
**描述**: Scene 视口面板。它持有 Scene View 当前的工具模式、pivot 模式、空间模式、导航状态和三类 transform gizmo,并把 UI chrome、交互解析、导航输入与 viewport 宿主服务串成一条完整的编辑器视口链路。
|
2026-03-27 14:40:29 +08:00
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
`SceneViewPanel` 是当前 Scene View 的编排层,不直接持有 render target,也不直接构建底层 overlay pass。
|
2026-03-27 14:40:29 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
它当前主要把下面这些 helper 串起来:
|
2026-03-27 14:40:29 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
- [ViewportPanelContent](../ViewportPanelContent/ViewportPanelContent.md)
|
|
|
|
|
|
请求 Scene viewport 纹理,并提供 hovered / focused / clicked 等面板表面状态。
|
|
|
|
|
|
- [SceneViewportChrome](../../Viewport/SceneViewportChrome/SceneViewportChrome.md)
|
|
|
|
|
|
处理顶部 toolbar、左侧工具按钮 overlay、工具快捷键折叠,以及工具切换前的 gizmo 取消逻辑。
|
|
|
|
|
|
- [SceneViewportEditorModes](../../Viewport/SceneViewportEditorModes/SceneViewportEditorModes.md)
|
|
|
|
|
|
提供 `tool / pivot / transform-space` 三组模式枚举。
|
|
|
|
|
|
- [SceneViewportInteractionFrame](../../Viewport/SceneViewportInteractionFrame/SceneViewportInteractionFrame.md)
|
|
|
|
|
|
把面板状态翻译成 `SceneViewportToolState`、`SceneViewportFrameGeometry`、`SceneViewportInteractionFrameState`、focus 决策与 presentation request。
|
|
|
|
|
|
- [SceneViewportNavigation](../../Viewport/SceneViewportNavigation/SceneViewportNavigation.md)
|
|
|
|
|
|
管理 look/pan 拖拽状态、工具快捷键、capture flags,以及 `SceneViewportInput` 组装。
|
|
|
|
|
|
- [SceneViewportTransformGizmoCoordinator](../../Viewport/SceneViewportTransformGizmoCoordinator/SceneViewportTransformGizmoCoordinator.md)
|
|
|
|
|
|
刷新并提交 gizmo overlay state,并驱动 begin / frame / end 生命周期命令。
|
|
|
|
|
|
- [SceneViewportInteractionResolver](../../Viewport/SceneViewportInteractionResolver/SceneViewportInteractionResolver.md)
|
|
|
|
|
|
统一 HUD 命中、overlay handle 命中和 scene pick 入口。
|
|
|
|
|
|
- [SceneViewportInteractionActions](../../Viewport/SceneViewportInteractionActions/SceneViewportInteractionActions.md)
|
|
|
|
|
|
把命中结果折叠成 hover / click action,并分发 orientation 对齐与 scene picking。
|
|
|
|
|
|
- [IViewportHostService](../../Viewport/IViewportHostService/IViewportHostService.md)
|
|
|
|
|
|
提供 Scene / Game 视口宿主服务、Scene View overlay 查询以及 editor camera 输入桥接。
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
## 公开类型与方法
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
| 成员 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| [SceneViewportToolMode](../../Viewport/SceneViewportEditorModes/SceneViewportToolMode.md) | Scene View 当前工具模式。 |
|
|
|
|
|
|
| [SceneViewportPivotMode](../../Viewport/SceneViewportEditorModes/SceneViewportPivotMode.md) | `Pivot / Center` 两种 pivot 模式。 |
|
|
|
|
|
|
| [SceneViewportTransformSpaceMode](../../Viewport/SceneViewportEditorModes/SceneViewportTransformSpaceMode.md) | `Global / Local` 两种变换空间模式。 |
|
|
|
|
|
|
| [SceneViewPanel()](Constructor.md) | 构造面板实例。 |
|
|
|
|
|
|
| [Render](Render.md) | 渲染面板,并推进一整帧 Scene View 交互链。 |
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
## 当前成员语义
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
- `m_toolMode` 默认是 `SceneViewportToolMode::Move`,当前由 `SceneViewportChrome` 负责切换。
|
|
|
|
|
|
- `m_pivotMode` 默认是 `SceneViewportPivotMode::Pivot`,`m_transformSpaceMode` 默认是 `SceneViewportTransformSpaceMode::Global`。
|
|
|
|
|
|
- `m_navigationState` 记录 look drag、pan drag,以及当前 pan drag 使用的鼠标按键。
|
|
|
|
|
|
- `m_moveGizmo / m_rotateGizmo / m_scaleGizmo` 作为面板长生命周期成员跨帧保存交互状态,而不是每帧临时构造。
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
## 当前边界
|
2026-04-04 00:41:13 +08:00
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
|
- `SceneViewPanel` 负责“交互编排”,不是 Scene / Game 视口的底层宿主。
|
|
|
|
|
|
- object-id picking、overlay frame data 缓存、render target 生命周期和 editor camera 状态都在 `ViewportHostService` 一侧。
|
|
|
|
|
|
- 它只服务于 Scene View,不参与 Game View 的运行时输入桥接。
|
2026-03-27 14:40:29 +08:00
|
|
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
2026-04-04 00:41:13 +08:00
|
|
|
|
- [Render](Render.md)
|
|
|
|
|
|
- [Viewport](../../Viewport/Viewport.md)
|
|
|
|
|
|
- [ViewportPanelContent](../ViewportPanelContent/ViewportPanelContent.md)
|
2026-04-08 16:07:03 +08:00
|
|
|
|
- [SceneViewportChrome](../../Viewport/SceneViewportChrome/SceneViewportChrome.md)
|
|
|
|
|
|
- [SceneViewportInteractionFrame](../../Viewport/SceneViewportInteractionFrame/SceneViewportInteractionFrame.md)
|
|
|
|
|
|
- [SceneViewportNavigation](../../Viewport/SceneViewportNavigation/SceneViewportNavigation.md)
|
|
|
|
|
|
- [SceneViewportTransformGizmoCoordinator](../../Viewport/SceneViewportTransformGizmoCoordinator/SceneViewportTransformGizmoCoordinator.md)
|