@d5techs/3dgs-lib 1.1.0 → 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.
@@ -1,8 +1,4 @@
1
1
  import type { BoundingBox, Vec3Tuple } from "../types";
2
- /**
3
- * Mesh 包围盒类型别名(保持向后兼容)
4
- */
5
- export type MeshBoundingBox = BoundingBox;
6
2
  /**
7
3
  * Mesh - 网格数据结构
8
4
  * 存储 GPUBuffer + 变换属性
@@ -19,7 +15,7 @@ export declare class Mesh {
19
15
  rotation: Float32Array;
20
16
  scale: Float32Array;
21
17
  private localBoundingBox;
22
- constructor(vertexBuffer: GPUBuffer, vertexCount: number, indexBuffer?: GPUBuffer | null, indexCount?: number, boundingBox?: MeshBoundingBox);
18
+ constructor(vertexBuffer: GPUBuffer, vertexCount: number, indexBuffer?: GPUBuffer | null, indexCount?: number, boundingBox?: BoundingBox);
23
19
  /**
24
20
  * 获取顶点 stride(字节数)
25
21
  */
@@ -27,15 +23,15 @@ export declare class Mesh {
27
23
  /**
28
24
  * 设置本地 bounding box
29
25
  */
30
- setBoundingBox(bbox: MeshBoundingBox): void;
26
+ setBoundingBox(bbox: BoundingBox): void;
31
27
  /**
32
28
  * 获取本地 bounding box
33
29
  */
34
- getLocalBoundingBox(): MeshBoundingBox | null;
30
+ getLocalBoundingBox(): BoundingBox | null;
35
31
  /**
36
32
  * 获取世界空间的 bounding box(考虑完整变换:缩放、旋转、平移)
37
33
  */
38
- getWorldBoundingBox(): MeshBoundingBox | null;
34
+ getWorldBoundingBox(): BoundingBox | null;
39
35
  setPosition(x: number, y: number, z: number): void;
40
36
  getPosition(): Vec3Tuple;
41
37
  setRotation(rx: number, ry: number, rz: number): void;
@@ -1,6 +1,7 @@
1
1
  import { Renderer } from "../core/Renderer";
2
2
  import { Camera } from "../core/Camera";
3
- import { Mesh, MeshBoundingBox } from "./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
- getCombinedBoundingBox(): MeshBoundingBox | null;
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
  }
@@ -6,7 +6,7 @@
6
6
  * - Splat 点云
7
7
  * - 场景查询(bounding box 等)
8
8
  */
9
- import { Mesh, MeshBoundingBox } from "../mesh/Mesh";
9
+ import { Mesh } from "../mesh/Mesh";
10
10
  import { MeshRenderer } from "../mesh/MeshRenderer";
11
11
  import type { IGSSplatRenderer } from "../gs/IGSSplatRenderer";
12
12
  import type { BoundingBox, Vec3Tuple } from "../types";
@@ -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
  */
@@ -104,7 +110,7 @@ export declare class SceneManager {
104
110
  /**
105
111
  * 获取 Mesh 的组合 bounding box
106
112
  */
107
- getMeshBoundingBox(): MeshBoundingBox | null;
113
+ getBoundingBox(): BoundingBox | null;
108
114
  /**
109
115
  * 获取 Splat 的 bounding box
110
116
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d5techs/3dgs-lib",
3
- "version": "1.1.0",
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
  }