import * as THREE from "three";
import type { PBMClipperParameter } from "../materials/pbmMaterial";
export interface SplatData {
    numPoints: number;
    packedData: Uint32Array;
    sh1?: Float32Array;
    sh2?: Float32Array;
    sh3?: Float32Array;
    shDegree?: number;
    /** 数据是否经过抗锯齿（Mip-Splatting）训练，来自 SPZ header flags bit0 */
    antiAliased?: boolean;
}
export declare class PBMGaussianSplattingObject extends THREE.Points<THREE.BufferGeometry, THREE.ShaderMaterial> {
    transformChanged: boolean;
    selectedChanged: boolean;
    /**
     * 渲染参数（preBlurAmount / blurAmount）变化标记。
     * 与 transformChanged 分开：这类参数不影响深度排序，只需重传 ObjectParamsStore，
     * 不必触发重排序，也不必碰 transform 纹理。
     */
    renderParamsChanged: boolean;
    numPoints: number;
    maxSHDegree: number;
    usedSHDegree: number;
    initAnimationEnabled: boolean;
    gsViewLayerKey: string;
    gsClippers: readonly PBMClipperParameter[];
    /** 加载时在 worker 中预 pack 好的 GPU 数据（8 uint32/splat） */
    packedData: Uint32Array;
    /**
     * 数据是否经过抗锯齿（Mip-Splatting）训练。来自 SPZ header flags bit0。
     * 决定 preBlurAmount / blurAmount 的默认取值，即渲染端走纯 dilation
     * 还是「2D mip + opacity 补偿」路径。
     */
    readonly antiAliased: boolean;
    private _preBlurAmount;
    private _blurAmount;
    private _selected;
    private _boundingBox;
    lastMatrixWorld: THREE.Matrix4 | null;
    get sh1(): Float32Array | undefined;
    get sh2(): Float32Array | undefined;
    get sh3(): Float32Array | undefined;
    /**
     * 投影后 2D 协方差对角线上的「纯膨胀」量，单位屏幕空间方差 px²。
     * 只放大 splat、**不**调整 opacity，用于让亚像素 splat 不至于消失/闪烁
     * （即 Inria 原版 3DGS 的 dilation trick）。
     * 默认：antiAliased 数据为 0（不需要兜底），否则为 0.3。
     */
    get preBlurAmount(): number;
    set preBlurAmount(value: number);
    /**
     * 投影后 2D 协方差对角线上的「低通核」量，单位屏幕空间方差 px²。
     * 除膨胀协方差外还按 sqrt(det(Σ) / det(Σ + εI)) 补偿 opacity，使 splat 能量守恒
     * —— 这就是 Mip-Splatting 在 2D 端的抗锯齿（EWA 低通近似）。
     * 默认：antiAliased 数据为 0.3（须与训练一致），否则为 0（不启用）。
     */
    get blurAmount(): number;
    set blurAmount(value: number);
    /** 清除手动覆盖，回到由 antiAliased 推导的默认值。 */
    resetBlurAmounts(): void;
    constructor(splatData?: SplatData);
    get selected(): boolean;
    set selected(selected: boolean);
    get boundingBox(): THREE.Box3;
    dispose(): void;
    /**
     * 从 packedData 即时解码第 index 个 splat 的 3D 协方差矩阵（half-precision → float）。
     * 用于 BVH 法线拟合——只在命中点按需解码。
     * packedData texel1 布局：[4]=cov00|cov01(half2), [5]=cov02|cov11(half2), [6]=cov12|cov22(half2)。
     * 返回 6 个分量 [s00, s01, s02, s11, s12, s22]，或 null 如果数据不足。
     */
    decodeCov3D(index: number): Float32Array | null;
}
