@d5techs/3dgs-lib 1.0.1 → 1.1.1
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.
- package/README.md +311 -136
- package/dist/3dgs-lib.cjs +4215 -2150
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +4216 -2151
- package/dist/3dgs-lib.js.map +1 -1
- package/dist/App.d.ts +28 -7
- package/dist/core/BoundingBoxRenderer.d.ts +2 -15
- package/dist/core/OrbitControls.d.ts +21 -41
- package/dist/core/gizmo/{TransformGizmoV2.d.ts → TransformGizmo.d.ts} +2 -2
- package/dist/core/{ViewportGizmo.d.ts → gizmo/ViewportGizmo.d.ts} +2 -2
- package/dist/core/gizmo/index.d.ts +3 -2
- package/dist/core/index.d.ts +7 -0
- package/dist/gs/GSSplatRenderer.d.ts +68 -172
- package/dist/gs/GSSplatRendererMobile.d.ts +9 -6
- package/dist/gs/GSSplatSorter.d.ts +44 -37
- package/dist/gs/IGSSplatRenderer.d.ts +39 -37
- package/dist/gs/SOGLoader.d.ts +25 -0
- package/dist/index.d.ts +17 -13
- package/dist/interaction/GizmoManager.d.ts +9 -46
- package/dist/interaction/HotspotManager.d.ts +142 -0
- package/dist/loaders/GLBLoader.d.ts +3 -11
- package/dist/loaders/OBJLoader.d.ts +1 -1
- package/dist/mesh/Mesh.d.ts +8 -16
- package/dist/mesh/MeshRenderer.d.ts +30 -14
- package/dist/scene/SceneManager.d.ts +12 -6
- package/dist/scene/proxies/MeshGroupProxy.d.ts +20 -0
- package/dist/scene/proxies/SplatBoundingBoxProvider.d.ts +11 -0
- package/dist/scene/proxies/SplatTransformProxy.d.ts +17 -0
- package/dist/scene/proxies/index.d.ts +6 -0
- package/dist/types/geometry.d.ts +60 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/material.d.ts +27 -0
- package/dist/types/splat.d.ts +25 -0
- package/dist/utils/device.d.ts +17 -0
- package/dist/utils/geometry.d.ts +26 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/texture.d.ts +64 -0
- package/package.json +4 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Renderer } from "../core/Renderer";
|
|
2
2
|
import { Camera } from "../core/Camera";
|
|
3
|
-
import { Mesh
|
|
3
|
+
import { Mesh } from "./Mesh";
|
|
4
|
+
import type { BoundingBox } from "../types";
|
|
4
5
|
import { MaterialData } from "../loaders/GLBLoader";
|
|
5
6
|
/**
|
|
6
7
|
* MeshRenderer - 网格渲染器
|
|
@@ -10,12 +11,17 @@ export declare class MeshRenderer {
|
|
|
10
11
|
private renderer;
|
|
11
12
|
private camera;
|
|
12
13
|
private items;
|
|
14
|
+
private overlayItems;
|
|
13
15
|
private pipelineTextured;
|
|
14
16
|
private pipelineTexturedDoubleSided;
|
|
15
17
|
private bindGroupLayoutTextured;
|
|
16
18
|
private pipelineUntextured;
|
|
17
19
|
private pipelineUntexturedDoubleSided;
|
|
18
20
|
private bindGroupLayoutUntextured;
|
|
21
|
+
private overlayPipelineTextured;
|
|
22
|
+
private overlayPipelineTexturedDoubleSided;
|
|
23
|
+
private overlayPipelineUntextured;
|
|
24
|
+
private overlayPipelineUntexturedDoubleSided;
|
|
19
25
|
private sampler;
|
|
20
26
|
private defaultTexture;
|
|
21
27
|
private lightDir;
|
|
@@ -28,15 +34,27 @@ export declare class MeshRenderer {
|
|
|
28
34
|
*/
|
|
29
35
|
addMesh(mesh: Mesh, material?: MaterialData): void;
|
|
30
36
|
/**
|
|
31
|
-
*
|
|
37
|
+
* 移除网格(销毁 GPU 资源)
|
|
32
38
|
*/
|
|
33
39
|
removeMesh(mesh: Mesh): void;
|
|
40
|
+
/**
|
|
41
|
+
* 从渲染列表中分离网格(不销毁 GPU 资源,可重新添加)
|
|
42
|
+
*/
|
|
43
|
+
detachMesh(mesh: Mesh): void;
|
|
44
|
+
/**
|
|
45
|
+
* 添加覆盖层网格(使用带 depthBias 的管线,贴面不被 3DGS 深度遮挡)
|
|
46
|
+
*/
|
|
47
|
+
addOverlayMesh(mesh: Mesh, material?: MaterialData): void;
|
|
48
|
+
/**
|
|
49
|
+
* 从覆盖层列表中分离网格(不销毁 vertex/index buffer)
|
|
50
|
+
*/
|
|
51
|
+
detachOverlayMesh(mesh: Mesh): void;
|
|
34
52
|
/**
|
|
35
53
|
* 按索引移除网格
|
|
36
54
|
*/
|
|
37
55
|
removeMeshByIndex(index: number): boolean;
|
|
38
56
|
/**
|
|
39
|
-
*
|
|
57
|
+
* 清空所有网格(含覆盖层)
|
|
40
58
|
*/
|
|
41
59
|
clear(): void;
|
|
42
60
|
/**
|
|
@@ -52,23 +70,21 @@ export declare class MeshRenderer {
|
|
|
52
70
|
*/
|
|
53
71
|
getAmbientIntensity(): number;
|
|
54
72
|
/**
|
|
55
|
-
*
|
|
73
|
+
* 渲染所有网格(普通 + 覆盖层)
|
|
56
74
|
*/
|
|
57
75
|
render(pass: GPURenderPassEncoder): void;
|
|
76
|
+
private renderItems;
|
|
58
77
|
getMeshCount(): number;
|
|
59
78
|
getMeshByIndex(index: number): Mesh | null;
|
|
60
|
-
/**
|
|
61
|
-
* 获取指定索引网格的材质颜色
|
|
62
|
-
*/
|
|
63
79
|
getMeshColor(index: number): [number, number, number, number] | null;
|
|
64
|
-
/**
|
|
65
|
-
* 设置指定索引网格的材质颜色
|
|
66
|
-
*/
|
|
67
80
|
setMeshColor(index: number, r: number, g: number, b: number, a?: number): boolean;
|
|
68
|
-
/**
|
|
69
|
-
* 设置指定范围内所有网格的材质颜色
|
|
70
|
-
*/
|
|
71
81
|
setMeshRangeColor(startIndex: number, count: number, r: number, g: number, b: number, a?: number): number;
|
|
72
|
-
|
|
82
|
+
getOverlayMeshCount(): number;
|
|
83
|
+
getOverlayMeshByIndex(index: number): Mesh | null;
|
|
84
|
+
removeOverlayMeshByIndex(index: number): boolean;
|
|
85
|
+
getOverlayMeshColor(index: number): [number, number, number, number] | null;
|
|
86
|
+
setOverlayMeshColor(index: number, r: number, g: number, b: number, a?: number): boolean;
|
|
87
|
+
setOverlayMeshRangeColor(startIndex: number, count: number, r: number, g: number, b: number, a?: number): number;
|
|
88
|
+
getCombinedBoundingBox(): BoundingBox | null;
|
|
73
89
|
destroy(): void;
|
|
74
90
|
}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { Mesh } from "../mesh/Mesh";
|
|
10
10
|
import { MeshRenderer } from "../mesh/MeshRenderer";
|
|
11
|
-
import { IGSSplatRenderer
|
|
12
|
-
import {
|
|
11
|
+
import type { IGSSplatRenderer } from "../gs/IGSSplatRenderer";
|
|
12
|
+
import type { BoundingBox, Vec3Tuple } from "../types";
|
|
13
13
|
/**
|
|
14
14
|
* 场景对象类型
|
|
15
15
|
*/
|
|
@@ -61,6 +61,12 @@ export declare class SceneManager {
|
|
|
61
61
|
* 按索引移除 Mesh
|
|
62
62
|
*/
|
|
63
63
|
removeMeshByIndex(index: number): boolean;
|
|
64
|
+
getOverlayMeshCount(): number;
|
|
65
|
+
getOverlayMeshByIndex(index: number): Mesh | null;
|
|
66
|
+
getOverlayMeshRange(startIndex: number, count: number): Mesh[];
|
|
67
|
+
removeOverlayMeshByIndex(index: number): boolean;
|
|
68
|
+
getOverlayMeshColor(index: number): [number, number, number, number] | null;
|
|
69
|
+
setOverlayMeshRangeColor(startIndex: number, count: number, r: number, g: number, b: number, a?: number): number;
|
|
64
70
|
/**
|
|
65
71
|
* 获取 Splat 数量
|
|
66
72
|
*/
|
|
@@ -76,7 +82,7 @@ export declare class SceneManager {
|
|
|
76
82
|
/**
|
|
77
83
|
* 获取 Splat 位置
|
|
78
84
|
*/
|
|
79
|
-
getSplatPosition():
|
|
85
|
+
getSplatPosition(): Vec3Tuple | null;
|
|
80
86
|
/**
|
|
81
87
|
* 设置 Splat 旋转
|
|
82
88
|
*/
|
|
@@ -84,7 +90,7 @@ export declare class SceneManager {
|
|
|
84
90
|
/**
|
|
85
91
|
* 获取 Splat 旋转
|
|
86
92
|
*/
|
|
87
|
-
getSplatRotation():
|
|
93
|
+
getSplatRotation(): Vec3Tuple | null;
|
|
88
94
|
/**
|
|
89
95
|
* 设置 Splat 缩放
|
|
90
96
|
*/
|
|
@@ -92,7 +98,7 @@ export declare class SceneManager {
|
|
|
92
98
|
/**
|
|
93
99
|
* 获取 Splat 缩放
|
|
94
100
|
*/
|
|
95
|
-
getSplatScale():
|
|
101
|
+
getSplatScale(): Vec3Tuple | null;
|
|
96
102
|
/**
|
|
97
103
|
* 设置 SH 模式
|
|
98
104
|
*/
|
|
@@ -104,7 +110,7 @@ export declare class SceneManager {
|
|
|
104
110
|
/**
|
|
105
111
|
* 获取 Mesh 的组合 bounding box
|
|
106
112
|
*/
|
|
107
|
-
|
|
113
|
+
getBoundingBox(): BoundingBox | null;
|
|
108
114
|
/**
|
|
109
115
|
* 获取 Splat 的 bounding box
|
|
110
116
|
*/
|
|
@@ -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,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.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "可扩展的 WebGPU 3D 渲染引擎",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/3dgs-lib.cjs",
|
|
@@ -58,5 +58,8 @@
|
|
|
58
58
|
"@webgpu/types": {
|
|
59
59
|
"optional": true
|
|
60
60
|
}
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"fflate": "^0.8.2"
|
|
61
64
|
}
|
|
62
65
|
}
|