@d5techs/3dgs-lib 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,8 @@
1
+ import type { BoundingBox, Vec3Tuple } from "../types";
1
2
  /**
2
- * Bounding Box 结构(与 GSSplatRenderer 共享接口)
3
+ * Mesh 包围盒类型别名(保持向后兼容)
3
4
  */
4
- export interface MeshBoundingBox {
5
- min: [number, number, number];
6
- max: [number, number, number];
7
- center: [number, number, number];
8
- radius: number;
9
- }
5
+ export type MeshBoundingBox = BoundingBox;
10
6
  /**
11
7
  * Mesh - 网格数据结构
12
8
  * 存储 GPUBuffer + 变换属性
@@ -41,11 +37,11 @@ export declare class Mesh {
41
37
  */
42
38
  getWorldBoundingBox(): MeshBoundingBox | null;
43
39
  setPosition(x: number, y: number, z: number): void;
44
- getPosition(): [number, number, number];
40
+ getPosition(): Vec3Tuple;
45
41
  setRotation(rx: number, ry: number, rz: number): void;
46
- getRotation(): [number, number, number];
42
+ getRotation(): Vec3Tuple;
47
43
  setScale(sx: number, sy: number, sz: number): void;
48
- getScale(): [number, number, number];
44
+ getScale(): Vec3Tuple;
49
45
  updateModelMatrix(): void;
50
46
  resetTransform(): void;
51
47
  destroy(): void;
@@ -6,10 +6,10 @@
6
6
  * - Splat 点云
7
7
  * - 场景查询(bounding box 等)
8
8
  */
9
- import { Mesh } from "../mesh/Mesh";
9
+ import { Mesh, MeshBoundingBox } from "../mesh/Mesh";
10
10
  import { MeshRenderer } from "../mesh/MeshRenderer";
11
- import { IGSSplatRenderer, BoundingBox } from "../gs/IGSSplatRenderer";
12
- import { MeshBoundingBox } from "../mesh/Mesh";
11
+ import type { IGSSplatRenderer } from "../gs/IGSSplatRenderer";
12
+ import type { BoundingBox, Vec3Tuple } from "../types";
13
13
  /**
14
14
  * 场景对象类型
15
15
  */
@@ -76,7 +76,7 @@ export declare class SceneManager {
76
76
  /**
77
77
  * 获取 Splat 位置
78
78
  */
79
- getSplatPosition(): [number, number, number] | null;
79
+ getSplatPosition(): Vec3Tuple | null;
80
80
  /**
81
81
  * 设置 Splat 旋转
82
82
  */
@@ -84,7 +84,7 @@ export declare class SceneManager {
84
84
  /**
85
85
  * 获取 Splat 旋转
86
86
  */
87
- getSplatRotation(): [number, number, number] | null;
87
+ getSplatRotation(): Vec3Tuple | null;
88
88
  /**
89
89
  * 设置 Splat 缩放
90
90
  */
@@ -92,7 +92,7 @@ export declare class SceneManager {
92
92
  /**
93
93
  * 获取 Splat 缩放
94
94
  */
95
- getSplatScale(): [number, number, number] | null;
95
+ getSplatScale(): Vec3Tuple | null;
96
96
  /**
97
97
  * 设置 SH 模式
98
98
  */
@@ -0,0 +1,20 @@
1
+ /**
2
+ * MeshGroupProxy - 多 Mesh 组变换代理对象
3
+ * 让 TransformGizmo 可以同时操作多个 Mesh
4
+ */
5
+ import type { TransformableObject, SimpleBoundingBox, Vec3Tuple } from '../../types';
6
+ import type { Mesh } from '../../mesh/Mesh';
7
+ export declare class MeshGroupProxy implements TransformableObject {
8
+ position: Vec3Tuple;
9
+ rotation: Vec3Tuple;
10
+ scale: Vec3Tuple;
11
+ private meshes;
12
+ constructor(meshes: Mesh[]);
13
+ setPosition(x: number, y: number, z: number): void;
14
+ setRotation(x: number, y: number, z: number): void;
15
+ setScale(x: number, y: number, z: number): void;
16
+ /**
17
+ * 获取组合包围盒
18
+ */
19
+ getBoundingBox(): SimpleBoundingBox | null;
20
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SplatBoundingBoxProvider - PLY/Splat 包围盒提供者
3
+ * 动态获取 PLY 的包围盒(考虑变换)
4
+ */
5
+ import type { BoundingBoxProvider, SimpleBoundingBox } from '../../types';
6
+ import type { IGSSplatRenderer } from '../../gs/IGSSplatRenderer';
7
+ export declare class SplatBoundingBoxProvider implements BoundingBoxProvider {
8
+ private renderer;
9
+ constructor(renderer: IGSSplatRenderer);
10
+ getBoundingBox(): SimpleBoundingBox | null;
11
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SplatTransformProxy - PLY/Splat 变换代理对象
3
+ * 实现 TransformableObject 接口,让 TransformGizmo 可以操作 PLY 模型
4
+ */
5
+ import type { TransformableObject, Vec3Tuple } from '../../types';
6
+ import type { IGSSplatRenderer } from '../../gs/IGSSplatRenderer';
7
+ export declare class SplatTransformProxy implements TransformableObject {
8
+ position: Vec3Tuple;
9
+ rotation: Vec3Tuple;
10
+ scale: Vec3Tuple;
11
+ private renderer;
12
+ private center;
13
+ constructor(renderer: IGSSplatRenderer, center: Vec3Tuple);
14
+ setPosition(x: number, y: number, z: number): void;
15
+ setRotation(x: number, y: number, z: number): void;
16
+ setScale(x: number, y: number, z: number): void;
17
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 场景代理类统一导出
3
+ */
4
+ export { SplatTransformProxy } from './SplatTransformProxy';
5
+ export { MeshGroupProxy } from './MeshGroupProxy';
6
+ export { SplatBoundingBoxProvider } from './SplatBoundingBoxProvider';
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 统一的几何类型定义
3
+ */
4
+ /**
5
+ * 3D 向量类型(元组形式)
6
+ */
7
+ export type Vec3Tuple = [number, number, number];
8
+ /**
9
+ * 4D 向量类型(元组形式)
10
+ */
11
+ export type Vec4Tuple = [number, number, number, number];
12
+ /**
13
+ * 包围盒接口 - 统一定义
14
+ * 用于 Mesh、Splat、场景等所有 3D 对象
15
+ */
16
+ export interface BoundingBox {
17
+ /** 最小点坐标 */
18
+ min: Vec3Tuple;
19
+ /** 最大点坐标 */
20
+ max: Vec3Tuple;
21
+ /** 中心点坐标 */
22
+ center: Vec3Tuple;
23
+ /** 包围球半径 */
24
+ radius: number;
25
+ }
26
+ /**
27
+ * 简化的包围盒(仅 min/max)
28
+ * 用于 BoundingBoxRenderer 等只需要边界的场景
29
+ */
30
+ export interface SimpleBoundingBox {
31
+ min: Vec3Tuple;
32
+ max: Vec3Tuple;
33
+ }
34
+ /**
35
+ * 变换属性接口
36
+ */
37
+ export interface Transform {
38
+ position: Vec3Tuple;
39
+ rotation: Vec3Tuple;
40
+ scale: Vec3Tuple;
41
+ }
42
+ /**
43
+ * 可变换对象接口
44
+ * 用于 Gizmo 操作的目标对象
45
+ */
46
+ export interface TransformableObject {
47
+ position: Vec3Tuple;
48
+ rotation: Vec3Tuple;
49
+ scale: Vec3Tuple;
50
+ setPosition(x: number, y: number, z: number): void;
51
+ setRotation(x: number, y: number, z: number): void;
52
+ setScale(x: number, y: number, z: number): void;
53
+ }
54
+ /**
55
+ * 包围盒提供者接口
56
+ * 用于动态获取包围盒(考虑变换)
57
+ */
58
+ export interface BoundingBoxProvider {
59
+ getBoundingBox(): SimpleBoundingBox | null;
60
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 类型定义统一导出
3
+ */
4
+ export type { Vec3Tuple, Vec4Tuple, BoundingBox, SimpleBoundingBox, Transform, TransformableObject, BoundingBoxProvider, } from './geometry';
5
+ export type { MaterialData } from './material';
6
+ export { DEFAULT_MATERIAL, DEFAULT_OBJ_MATERIAL } from './material';
7
+ export { SHMode } from './splat';
8
+ export type { RendererCapabilities } from './splat';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 统一的材质类型定义
3
+ */
4
+ /**
5
+ * 材质数据接口
6
+ * 用于 GLB/OBJ 等模型的材质
7
+ */
8
+ export interface MaterialData {
9
+ /** 基础颜色因子 [r, g, b, a] */
10
+ baseColorFactor: [number, number, number, number];
11
+ /** 基础颜色纹理 */
12
+ baseColorTexture: GPUTexture | null;
13
+ /** 金属度因子 */
14
+ metallicFactor: number;
15
+ /** 粗糙度因子 */
16
+ roughnessFactor: number;
17
+ /** 是否双面渲染 */
18
+ doubleSided: boolean;
19
+ }
20
+ /**
21
+ * 默认材质
22
+ */
23
+ export declare const DEFAULT_MATERIAL: Readonly<MaterialData>;
24
+ /**
25
+ * OBJ 默认材质(双面渲染)
26
+ */
27
+ export declare const DEFAULT_OBJ_MATERIAL: Readonly<MaterialData>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 3D Gaussian Splatting 相关类型定义
3
+ */
4
+ /**
5
+ * SH 模式枚举 - 球谐函数级别
6
+ */
7
+ export declare enum SHMode {
8
+ L0 = 0,// 仅 DC 颜色(最快)
9
+ L1 = 1,// DC + L1 SH
10
+ L2 = 2,// DC + L1 + L2 SH
11
+ L3 = 3
12
+ }
13
+ /**
14
+ * 渲染器能力描述
15
+ */
16
+ export interface RendererCapabilities {
17
+ /** 支持的最高 SH 模式 */
18
+ maxSHMode: SHMode;
19
+ /** 是否支持原始 SplatCPU 数据 */
20
+ supportsRawData: boolean;
21
+ /** 是否为移动端优化版本 */
22
+ isMobileOptimized: boolean;
23
+ /** 最大支持的 splat 数量(0 表示无限制) */
24
+ maxSplatCount: number;
25
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 设备检测工具函数
3
+ */
4
+ /**
5
+ * 检测是否为移动设备
6
+ * 综合考虑 UA、触摸支持、屏幕尺寸
7
+ */
8
+ export declare function isMobileDevice(): boolean;
9
+ /**
10
+ * 获取推荐的设备像素比
11
+ * 移动端限制 DPI 以避免性能问题
12
+ */
13
+ export declare function getRecommendedDPR(): number;
14
+ /**
15
+ * 检测 WebGPU 支持
16
+ */
17
+ export declare function isWebGPUSupported(): boolean;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 几何计算工具函数
3
+ */
4
+ import type { BoundingBox, Vec3Tuple } from '../types';
5
+ /**
6
+ * 从顶点位置数组计算包围盒
7
+ * @param positions 顶点位置数组 [x0, y0, z0, x1, y1, z1, ...]
8
+ * @returns 包围盒信息
9
+ */
10
+ export declare function computeBoundingBox(positions: ArrayLike<number>): BoundingBox;
11
+ /**
12
+ * 合并多个包围盒
13
+ * @param boxes 包围盒数组
14
+ * @returns 合并后的包围盒,如果输入为空则返回 null
15
+ */
16
+ export declare function mergeBoundingBoxes(boxes: BoundingBox[]): BoundingBox | null;
17
+ /**
18
+ * 从 min/max 计算完整的包围盒信息
19
+ */
20
+ export declare function createBoundingBoxFromMinMax(min: Vec3Tuple, max: Vec3Tuple): BoundingBox;
21
+ /**
22
+ * 变换包围盒的 8 个角点并计算新的 AABB
23
+ * @param bbox 原始包围盒
24
+ * @param modelMatrix 4x4 变换矩阵(列主序)
25
+ */
26
+ export declare function transformBoundingBox(bbox: BoundingBox, modelMatrix: Float32Array): BoundingBox;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 工具函数统一导出
3
+ */
4
+ export { isMobileDevice, getRecommendedDPR, isWebGPUSupported, } from './device';
5
+ export { computeBoundingBox, mergeBoundingBoxes, createBoundingBoxFromMinMax, transformBoundingBox, } from './geometry';
6
+ export { loadTextureFromURL, loadTextureFromBlob, loadTextureFromBuffer, createTextureFromImageBitmap, TextureCache, } from './texture';
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 纹理加载工具函数
3
+ */
4
+ /**
5
+ * 从 URL 加载纹理
6
+ * @param device GPU 设备
7
+ * @param url 纹理 URL
8
+ * @returns GPU 纹理或 null(加载失败时)
9
+ */
10
+ export declare function loadTextureFromURL(device: GPUDevice, url: string): Promise<GPUTexture | null>;
11
+ /**
12
+ * 从 Blob 加载纹理
13
+ * @param device GPU 设备
14
+ * @param blob 图片 Blob
15
+ * @returns GPU 纹理或 null(加载失败时)
16
+ */
17
+ export declare function loadTextureFromBlob(device: GPUDevice, blob: Blob): Promise<GPUTexture | null>;
18
+ /**
19
+ * 从 ArrayBuffer 加载纹理
20
+ * @param device GPU 设备
21
+ * @param buffer 图片数据
22
+ * @param mimeType MIME 类型
23
+ * @returns GPU 纹理或 null(加载失败时)
24
+ */
25
+ export declare function loadTextureFromBuffer(device: GPUDevice, buffer: ArrayBuffer | Uint8Array, mimeType?: string): Promise<GPUTexture | null>;
26
+ /**
27
+ * 从 ImageBitmap 创建 GPU 纹理
28
+ * @param device GPU 设备
29
+ * @param imageBitmap ImageBitmap 对象
30
+ * @returns GPU 纹理
31
+ */
32
+ export declare function createTextureFromImageBitmap(device: GPUDevice, imageBitmap: ImageBitmap): GPUTexture;
33
+ /**
34
+ * 纹理缓存管理器
35
+ */
36
+ export declare class TextureCache {
37
+ private cache;
38
+ private device;
39
+ constructor(device: GPUDevice);
40
+ /**
41
+ * 获取或加载纹理
42
+ */
43
+ getOrLoad(url: string): Promise<GPUTexture | null>;
44
+ /**
45
+ * 检查缓存中是否存在
46
+ */
47
+ has(url: string): boolean;
48
+ /**
49
+ * 从缓存获取
50
+ */
51
+ get(url: string): GPUTexture | undefined;
52
+ /**
53
+ * 添加到缓存
54
+ */
55
+ set(url: string, texture: GPUTexture): void;
56
+ /**
57
+ * 清空缓存
58
+ */
59
+ clear(): void;
60
+ /**
61
+ * 销毁所有纹理并清空缓存
62
+ */
63
+ destroy(): void;
64
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d5techs/3dgs-lib",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "可扩展的 WebGPU 3D 渲染引擎",
5
5
  "type": "module",
6
6
  "main": "./dist/3dgs-lib.cjs",