@realsee/five
Version:
Realsee Renderer SDK
36 lines (35 loc) • 1.85 kB
TypeScript
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;
}