js┌─────────────────────────────┐
│ Model.fromGltfAsync() │
└─────────────┬───────────────┘
▼
┌─────────────────────────────┐
│ GltfLoader.load() │◄───────┐
└─────────────┬───────────────┘ │
▼ │
┌─────────────────────────────┐ │
│ Model.update() 每帧调用 │ │
└─────────────┬───────────────┘ │
▼ │
┌─────────────────────────────┐ │
│ processLoader() │ │ 未完成时
└─────────────┬───────────────┘ │ 继续处理
▼ │
┌─────────────────────────────┐ │
│ GltfLoader.process() │────────┘
└─────────────┬───────────────┘
▼
┌─────────────────────────────┐
│ parse() 解析GLTF │
└─────────────┬───────────────┘
▼
┌─────────────────────────────┐
│ loadNodes() 加载节点 │
└─────────────┬───────────────┘
│
├─────────────────┐
▼ ▼
┌─────────────────────┐ ┌────────────────────────┐
│ loadPrimitive() │ │ loadInstances() │
│ 加载每个图元 │ │ 处理EXT_mesh_gpu_ │
└─────────┬───────────┘ │ instancing扩展 │
│ └──────────┬─────────────┘
▼ │
┌─────────────────────┐ │
│ createPrimitive- │ │
│ LoadPlan() │ │
└─────────┬───────────┘ │
│ │
▼ ▼
┌────────────────────────────────────────────────┐
│ postProcessGeometry() │
│ 处理缓冲区和准备渲染资源 │
└────────────────────┬───────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ new ModelSceneGraph() │
│ 创建模型场景图并初始化节点结构 │
└────────────────────┬───────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ buildDrawCommands() │
│ 为每个可见primitive创建绘制命令 │
└────────────────────┬───────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ ModelSceneGraph.pushDrawCommands() │
│ 构建渲染管线,包括InstancingPipelineStage │
└────────────────────┬───────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ InstancingPipelineStage.process() │
│ 处理实例化数据,创建实例缓冲区 │
│ 修改shader以支持硬件实例化 │
└────────────────────────────────────────────────┘
本文作者:幽灵
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 幽灵AI 许可协议。转载请注明出处!