Manager API 参考
本文档汇总了所有 Manager 类的公共 API。
ModelManager
维护每个已加载的模型,并提供用于模型存储、跟踪和查询的统一接口。
constructor(maxModels: number = 10000)
关键方法
模型管理:
addModel(model: Omit<ModelEntry, 'id'>): ModelEntry– 添加一个模型并生成唯一 ID。如果达到容量限制则抛出错误。removeModel(id: string): boolean– 通过 ID 移除模型。clearAllModels(): void– 移除所有模型。
模型查询:
getModels(): ModelInfo[]– 返回简化的元数据(便于 UI/React 渲染安全使用)。getFullModels(): ModelEntry[]– 返回包含完整 pointCloud 引用的所有模型条目。getModelWithPointCloud(modelType: 'ply' | 'onnx' | 'fbx', id?: string): ModelEntry | null– 获取特定的模型条目。getModelsByType(modelType: 'ply' | 'onnx' | 'fbx'): ModelEntry[]– 按类型获取模型。getVisibleModels(): ModelEntry[]– 仅获取可见模型。getDynamicModels(): ModelEntry[]– 仅获取动态模型。findModelByName(name: string): ModelEntry | null– 通过名称查找模型(首个匹配项)。
统计信息:
getModelCount(): number– 获取模型总数。getRemainingCapacity(): number– 获取剩余模型容量。getTotalPoints(): number– 获取所有模型的总点数。getTotalVisiblePoints(): number– 获取总可见点数。isAtCapacity(): boolean– 检查是否达到模型上限。
可见性:
setModelVisibility(id: string, visible: boolean): boolean– 设置模型可见性。
变换:
旧版方法(不推荐): 这些方法通过分别设置位置、旋转、缩放来操作变换,内部会组合成变换矩阵。它们是为了向后兼容而保留的早期 API。
setModelPosition(id: string, x: number, y: number, z: number): boolean– 设置模型位置(旧版,通过 TRS 组合创建变换矩阵)。getModelPosition(id: string): [number, number, number] | null– 获取模型位置(从变换矩阵中提取)。setModelRotation(id: string, x: number, y: number, z: number): boolean– 设置模型旋转(旧版,受限,仅支持欧拉角)。getModelRotation(id: string): [number, number, number] | null– 获取模型旋转(旧版,受限,从矩阵提取欧拉角可能不准确)。setModelScale(id: string, scale: number | [number, number, number]): boolean– 设置模型缩放(旧版,受限)。getModelScale(id: string): [number, number, number] | null– 获取模型缩放(旧版,受限,从矩阵提取缩放可能不准确)。
推荐方法: 直接操作变换矩阵,这是更现代、更灵活、更准确的方式。
setModelTransform(id: string, transform: Float32Array | number[]): boolean– 直接设置完整的 4×4 变换矩阵(推荐)。getModelTransform(id: string): Float32Array | null– 获取完整的 4×4 变换矩阵(推荐)。
名称管理:
hasModelWithName(name: string): boolean– 检查模型名称是否存在。generateUniqueName(baseName: string): string– 基于基础名称生成唯一名称。
FileLoader
加载并解析多种高斯格式(PLY, SPZ, KSplat, SPLAT, SOG, Compressed PLY)和 FBX 文件。
constructor(modelManager: ModelManager, callbacks: LoadingCallbacks)
关键方法
加载:
loadFile(file: File, device: GPUDevice): Promise<ModelEntry | null>– 从 File 对象加载。自动检测格式(Gaussian 或 FBX)。loadSample(filename: string, device: GPUDevice, expectedType?: string): Promise<ModelEntry | null>– 从 URL 加载。支持所有高斯格式。
格式检测:
isFileTypeSupported(filename: string): boolean– 检查文件格式是否受支持。getSupportedExtensions(): string[]– 返回所有受支持的文件扩展名。getFileType(filename: string): string | null– 从文件名检测文件类型。getGaussianFormat(filename: string): string | null– 获取特定的高斯格式(ply, spz, ksplat 等)。
支持的格式:
- Gaussian:
.ply,.spz,.ksplat,.splat,.sog,.compressed.ply - Mesh:
.fbx - 注意: ONNX 文件应通过
ONNXManager加载,而不是FileLoader。
ONNXManager
加载 ONNX 模型并管理动态点云的 GPU 端推理。
constructor(modelManager: ModelManager)
关键方法
加载:
loadONNXModel(device: GPUDevice, modelPath: string, cameraMatrix: Float32Array, projectionMatrix: Float32Array, name?: string, options?: ONNXLoadOptions): Promise<ModelEntry>– 加载 ONNX 模型并创建 DynamicPointCloud。loadONNXFromFile(device: GPUDevice, file: File, cameraMatrix?: Float32Array | null, projectionMatrix?: Float32Array | null): Promise<ModelEntry>– 从 File 对象加载 ONNX。
管理:
disposeModel(modelId: string): void– 清理 GPU 缓冲区和 ORT 会话。dispose(): void– 销毁所有 ONNX 模型。
相机更新:
updateCameraMatrices(modelName: string, cameraMatrix: Float32Array, projectionMatrix: Float32Array): Promise<void>– 更新用于 ONNX 推理的相机矩阵。
查询:
hasONNXModels(): boolean– 检查是否加载了任何 ONNX 模型。getONNXModels(): ModelEntry[]– 返回所有 ONNX 模型条目。getGenerator(id: string): ONNXGenerator | undefined– 通过模型 ID 获取 ONNXGenerator。getPointCloud(id: string): DynamicPointCloud | undefined– 通过模型 ID 获取 DynamicPointCloud。
性能:
getONNXPerformanceStats(): { modelCount: number; totalGenerators: number; totalPointClouds: number }– 返回性能统计信息。
CameraManager
初始化并更新活动相机/控制器。
constructor()
关键方法
initCamera(canvas: HTMLCanvasElement): voidswitchController(type: 'orbit' | 'fps'): voidupdate(deltaTime: number): voidresize(canvas: HTMLCanvasElement): voidresetCamera(): voidgetCameraMatrix(): mat4getProjectionMatrix(): mat4getController(): CameraControllersetupCameraForPointCloud(pointCloud: PointCloud): voidsetOrbitCenter(center: vec3): voidgetDebugInfo(): anygetControllerType(): ControllerTypegetCamera(): PerspectiveCamera | nullgetPosition(): vec3getRotation(): quatsetPosition(position: vec3): voidsetRotation(rotation: quat): voidgetViewMatrix(): mat4getViewProjectionMatrix(): mat4getFrustumPlanes(): Float32ArrayisControllerType(type: ControllerType): boolean
AnimationManager
每帧更新动态模型。
constructor(modelManager: ModelManager)
关键方法
updateDynamicPointClouds(view: mat4, proj: mat4, time: number): voidcontrolDynamicAnimation(action: 'start' | 'pause' | 'resume' | 'stop', speed?: number): voidsetDynamicAnimationTime(time: number): voidgetDynamicPerformanceStats(): Array<{ modelName: string; stats: any }>getDebugInfo(): anygetAnimationStats(): AnimationStatssetDebugLogging(enabled: boolean): voidgetLastUpdateTime(): numbergetUpdateCount(): numbergetTotalUpdateTime(): numbergetAverageUpdateTime(): numberforceUpdate(): void
RenderLoop
拥有渲染/更新循环、帧调度和性能跟踪。
constructor(modelManager: ModelManager, animationManager: AnimationManager, cameraManager: CameraManager)
关键方法
生命周期:
init(gpu: WebGPUContext, renderer: GaussianRenderer, canvas: HTMLCanvasElement): void– 使用 GPU 上下文和渲染器进行初始化。start(): void– 启动渲染循环。stop(): void– 停止渲染循环。isRunning(): boolean– 检查循环是否正在运行。
渲染状态:
setGaussianScale(scale: number): void– 设置全局高斯缩放。getGaussianScale(): number– 获取当前高斯缩放。setBackgroundColor(color: [number, number, number, number]): void– 设置背景颜色。getBackgroundColor(): [number, number, number, number]– 获取当前背景颜色。
回调:
setCallbacks(callbacks: FPSCallbacks): void– 设置 FPS 和点数更新回调。
状态 & 性能:
getState(): AppState– 获取当前渲染状态。getPerformanceInfo(): object– 返回性能信息。getFPS(): number– 获取当前 FPS。getFrameCount(): number– 获取总帧数。getLastFrameTime(): number– 获取上一帧时间(毫秒)。getAverageFrameTime(): number– 获取平均帧时间。setTargetFPS(fps: number): void– 设置目标 FPS(用于节流)。getTargetFPS(): number– 获取目标 FPS。getDebugInfo(): any– 返回调试信息。
GaussianLoader
高级便捷服务,结合了 FileLoader 和 ONNXManager 来构建 GaussianModel 实例。简化了与 Three.js 集成时的模型加载。
constructor(fileLoader: FileLoader, onnxManager: ONNXManager)
GaussianLoadOptions
关键方法
特定格式创建:
createFromPLY(renderer, modelPath, options?): Promise<GaussianModel>– 从 PLY 文件创建。createFromSPZ(renderer, modelPath, options?): Promise<GaussianModel>– 从 SPZ 文件创建。createFromKSplat(renderer, modelPath, options?): Promise<GaussianModel>– 从 KSplat 文件创建。createFromSplat(renderer, modelPath, options?): Promise<GaussianModel>– 从 SPLAT 文件创建。createFromSOG(renderer, modelPath, options?): Promise<GaussianModel>– 从 SOG 文件创建。createFromGaussian(renderer, modelPath, options?, formatHint?): Promise<GaussianModel>– 从任何高斯格式创建(自动检测)。
ONNX 创建:
createFromONNX(renderer, modelPath, cameraMatrix, projectionMatrix, options?): Promise<GaussianModel>– 从 ONNX 模型创建。
自动检测:
createFromFile(renderer, modelPath, cameraMatrices?, options?, fileType?): Promise<GaussianModel>– 自动检测格式并创建模型。
实用工具:
createFromEntry(entry: ModelEntry): GaussianModel– 从现有的 ModelEntry 创建。isFormatSupported(filename: string): boolean– 检查格式是否受支持。getSupportedFormats(): string[]– 获取所有支持的格式。detectFormat(filename: string): string | null– 从文件名检测格式。
FBXLoaderManager
加载 FBX 文件并将其注册到 ModelManager。
constructor(modelManager: ModelManager, callbacks?: FBXLoaderCallbacks)
interface FBXLoaderCallbacks {
onProgress?: (progress: number, message: string) => void;
onError?: (error: string) => void;
onSuccess?: (model: ModelEntry) => void;
}
关键方法
loadFromFile(file, options?): Promise<ModelEntry>loadFromUrl(url, options?): Promise<ModelEntry>dispose(): void
注意: FBX + WebGPU 兼容性有限;推荐使用 GLTF/GLB。
支持类型 (Supporting types)
interface ModelInfo {
id: string;
name: string;
visible: boolean;
pointCount: number;
isDynamic: boolean;
modelType: 'ply' | 'onnx' | 'fbx';
colorMode?: 'sh' | 'rgb';
colorChannels?: number;
}
interface LoadingCallbacks {
onProgress: (show: boolean, text?: string, pct?: number) => void;
onError: (msg: string) => void;
}
interface ONNXLoadOptions {
staticInference?: boolean;
debugLogging?: boolean;
}
interface FPSCallbacks {
onFPSUpdate: (fps: number) => void;
onPointCountUpdate: (count: number) => void;
}
interface AppState {
background: [number, number, number, number];
gaussianScale: number;
animationId: number;
lastTime: number;
frames: number;
fpsAccumStart: number;
}
interface AnimationStats {
updateCount: number;
totalUpdateTime: number;
averageUpdateTime: number;
totalDynamicModels: number;
activeDynamicModels: number;
}
type ControllerType = 'orbit' | 'fps';
interface LoadProgress {
stage: string;
progress: number;
message?: string;
}