docs: rebuild Rendering API content

This commit is contained in:
2026-03-26 21:32:43 +08:00
parent f6286d432c
commit 5c8042775c
81 changed files with 2350 additions and 27 deletions

View File

@@ -0,0 +1,67 @@
# RenderSceneExtractor
**命名空间**: `XCEngine::Rendering`
**类型**: `class + struct`
**头文件**: `XCEngine/Rendering/RenderSceneExtractor.h`
**描述**: 从 `Scene` 中挑选相机并收集可渲染 mesh 对象,输出渲染层使用的 `RenderSceneData`
## 概述
`RenderSceneExtractor` 是当前渲染架构里最接近“scene extraction”阶段的对象。
它的职责不是绘制,而是把面向 gameplay / scene graph 的对象整理成渲染层更容易消费的数据:
- 一台要使用的相机
- 一份拍平后的 [RenderCameraData](../RenderCameraData/RenderCameraData.md)
- 一组 [VisibleRenderObject](../VisibleRenderObject/VisibleRenderObject.md)
这和商业引擎里把 scene traversal、visibility building、render packet generation 放在真正 draw submission 之前的设计是一致的。
## `RenderSceneData`
| 字段 | 类型 | 说明 |
|------|------|------|
| `camera` | `Components::CameraComponent*` | 选中的相机。 |
| `cameraData` | `RenderCameraData` | 渲染阶段使用的拍平相机数据。 |
| `visibleObjects` | `std::vector<VisibleRenderObject>` | 当前提取到的可见对象列表。 |
`RenderSceneData::HasCamera()` 当前只是检查 `camera != nullptr`
## 当前提取规则
相机选择当前按以下顺序执行:
1. 如果 `overrideCamera` 可用,直接使用它。
2. 否则从场景里找出 `IsPrimary()` 的可用相机,取 `depth` 最大者。
3. 如果仍没有,则退回到第一个可用相机。
对象提取当前只要求:
- `GameObject` 处于 `IsActiveInHierarchy()`
- 同时有 `MeshFilterComponent``MeshRendererComponent`
- 两个组件都启用
- `MeshFilterComponent` 提供的 mesh 非空且 `IsValid()`
## 当前实现限制
- 当前没有 frustum culling。
- 当前没有 render layer 过滤。
- 当前没有透明/不透明分类、排序或 batching。
- 当前不会读取 `castShadows` / `receiveShadows`
- 当前把“visible”理解为“满足基本组件条件且在激活层级中”而不是严格意义上的屏幕可见。
## 公开方法
| 方法 | 说明 |
|------|------|
| [Extract](Extract.md) | 从场景中提取渲染数据。 |
## 相关文档
- [当前模块](../Rendering.md)
- [RenderCameraData](../RenderCameraData/RenderCameraData.md)
- [VisibleRenderObject](../VisibleRenderObject/VisibleRenderObject.md)
- [SceneRenderer](../SceneRenderer/SceneRenderer.md)