2026-03-26 21:32:43 +08:00
|
|
|
# RenderSceneExtractor::Extract
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
RenderSceneData Extract(
|
|
|
|
|
const Components::Scene& scene,
|
|
|
|
|
Components::CameraComponent* overrideCamera,
|
|
|
|
|
uint32_t viewportWidth,
|
|
|
|
|
uint32_t viewportHeight) const;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 行为说明
|
|
|
|
|
|
|
|
|
|
当前实现会:
|
|
|
|
|
|
2026-04-03 14:03:28 +08:00
|
|
|
1. 调用 [SelectCamera](SelectCamera.md) 解析实际使用的相机。
|
|
|
|
|
2. 如果没有可用相机,直接返回空的 `RenderSceneData`。
|
|
|
|
|
3. 基于选中的相机和 viewport 尺寸生成 `RenderCameraData`。
|
|
|
|
|
4. 从场景所有 root game object 开始递归收集 `visibleItems`。
|
|
|
|
|
5. 对 `visibleItems` 做稳定排序。
|
|
|
|
|
6. 提取主方向光到 `lighting`。
|
2026-03-26 21:32:43 +08:00
|
|
|
|
|
|
|
|
## 参数
|
|
|
|
|
|
|
|
|
|
- `scene` - 要提取的场景。
|
2026-04-03 14:03:28 +08:00
|
|
|
- `overrideCamera` - 可选的 override 相机;可用时具有最高优先级。
|
|
|
|
|
- `viewportWidth` - 当前 viewport 宽度。
|
|
|
|
|
- `viewportHeight` - 当前 viewport 高度。
|
2026-03-26 21:32:43 +08:00
|
|
|
|
|
|
|
|
## 返回值
|
|
|
|
|
|
|
|
|
|
- 一份 `RenderSceneData`。
|
2026-04-03 14:03:28 +08:00
|
|
|
- 若没有可用相机,返回值中的 `camera` 为空,`visibleItems` 也为空。
|
2026-03-26 21:32:43 +08:00
|
|
|
|
2026-04-03 14:03:28 +08:00
|
|
|
## 当前实现细节
|
2026-03-26 21:32:43 +08:00
|
|
|
|
2026-04-03 14:03:28 +08:00
|
|
|
- 当前会使用选中相机的 `GetCullingMask()` 过滤对象层。
|
|
|
|
|
- `visibleItems` 是当前真正的输出字段,不是旧文档里的 `visibleObjects`。
|
|
|
|
|
- 排序时会按 `renderQueue` 和透明/非透明距离方向处理。
|
2026-03-26 21:32:43 +08:00
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
2026-04-03 14:03:28 +08:00
|
|
|
- [RenderSceneExtractor](RenderSceneExtractor.md)
|
|
|
|
|
- [ExtractForCamera](ExtractForCamera.md)
|
|
|
|
|
- [SelectCamera](SelectCamera.md)
|