import * as THREE from 'three'; import type { PBMGaussianSplattingObject } from '../model/objects/pbmGaussianSplattingObject'; /** * 每对象渲染参数的 GPU 存储,与 TransformStore 并列,共用同一套 transformIndex。 * * texel 0: [preBlurAmount, blurAmount, reserved, reserved] * * 为什么不并入 TransformStore: * - TransformStore 的职责是每对象变换矩阵,其内容随 matrixWorld 变化被每帧检查/重传; * - 这里的值来自数据本身(SPZ antiAlias flag),加载后就不再变,只有业务方手动覆盖 * preBlurAmount / blurAmount 时才需要更新。两者生命周期不同,混在一张纹理里会 * 让「改个 blur 参数」被迫走 transform 的重传路径。 * * 注意槽位是易变的:transformIndex 就是对象在当前布局中的序号,对象增删(如 3d-tile * 流式加载)都会重新分配并重新烘进 SplatAssembler 的大纹理。因此 sync() 必须紧随 * TransformStore.sync() 调用,并直接复用它分配出的索引,避免两套索引各自推导而错位。 */ export declare class ObjectParamsStore { texture: THREE.DataTexture | null; readonly width = 1; private data; private indexMap; private count; get objectCount(): number; /** * 按 TransformStore 已分配的索引写入每对象参数并重建纹理。 * @param resolveIndex 返回对象的 transformIndex(须与 TransformStore 一致) */ sync(objects: readonly PBMGaussianSplattingObject[], resolveIndex: (object: PBMGaussianSplattingObject) => number | undefined): void; /** 单对象渲染参数变化(手动覆盖 blur 参数),就地更新 + 标记整张重传。 */ updateOne(object: PBMGaussianSplattingObject): void; private write; private rebuildTexture; dispose(): void; }