Manager 模块
Manager 模块是当前应用架构的骨干。它将功能组织到专注的 Manager 类中,而不是单一的单体应用中。这种 基于 Manager 的架构 提供了清晰的关注点分离、改进的可测试性和更好的可扩展性。
概览
本模块提供的关键 Manager:
- ModelManager – 存储模型元数据、可见性,并提供统一的模型接口。
- FileLoader – 加载并解析多种高斯格式(PLY, SPZ, KSplat, SPLAT, SOG, Compressed PLY)和 FBX。
- GaussianLoader – 高级便捷服务,包装 FileLoader 和 ONNXManager 以创建 GaussianModel 实例。
- ONNXManager – 加载 ONNX 模型并协调 GPU 端推理。
- FBXLoaderManager – 用于 FBX 网格文件的专用加载器。
- CameraManager – 管理视图/投影状态和控制器切换(Orbit/FPS)。
- AnimationManager – 通过节流和性能跟踪更新动态模型(ONNX 驱动或其他)。
- RenderLoop – 拥有渲染/更新循环、帧调度和 FPS 跟踪。
架构原则
- 单一职责 – 每个 Manager 专注于一个功能领域。
- 依赖注入 – Manager 通过构造函数接收协作对象以获得可测试性。
- 接口分离 – 清晰的契约保持低耦合。
- 开/闭 – Manager 易于扩展而无需修改现有代码。
- Manager 协调 – App 类编排 Manager,但不拥有它们的逻辑。
- 格式无关 – FileLoader 使用 IO 模块的
defaultLoader进行统一格式处理。
用法
基础
const modelManager = new ModelManager(10_000);
const cameraManager = new CameraManager();
const animationManager = new AnimationManager(modelManager);
const renderLoop = new RenderLoop(modelManager, animationManager, cameraManager);
// 设置加载回调
const loadingCallbacks = {
onProgress: (show, text, pct) => console.log(`Loading: ${pct}%`),
onError: (msg) => console.error(msg),
};
const fileLoader = new FileLoader(modelManager, loadingCallbacks);
const onnxManager = new ONNXManager(modelManager);
const gaussianLoader = new GaussianLoader(fileLoader, onnxManager);
const app = new App();
await app.init();
高级 - 直接访问 Manager
const app = new App();
await app.init();
// 直接访问 Manager 以进行高级操作
const modelManager = app.getModelManager();
const fileLoader = app.getFileLoader();
const onnxManager = app.getONNXManager();
const cameraManager = app.getCameraManager();
const animationManager = app.getAnimationManager();
const renderLoop = app.getRenderLoop();
// 使用 GaussianLoader 进行高级模型创建
const gaussianLoader = new GaussianLoader(fileLoader, onnxManager);
const model = await gaussianLoader.createFromGaussian(renderer, 'model.spz');
加载不同格式
// 通过 FileLoader 加载高斯格式
await fileLoader.loadFile(file, device); // 自动检测格式
await fileLoader.loadSample('model.spz', device, 'gaussian');
// 通过 GaussianLoader 加载 (创建 GaussianModel)
const model = await gaussianLoader.createFromSPZ(renderer, 'model.spz');
const model2 = await gaussianLoader.createFromKSplat(renderer, 'model.ksplat');
const model3 = await gaussianLoader.createFromONNX(renderer, 'model.onnx', camMat, projMat);
相关文档
- Architecture – 解释 Manager 编排、依赖注入和生命周期。
- API Reference – 每个 Manager 的方法表面以及共享接口。
- App 模块 – 展示 Managers 如何在运行时外壳内组合。