@d5techs/3dgs-lib 1.0.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.
Files changed (42) hide show
  1. package/README.md +236 -0
  2. package/dist/3dgs-lib.cjs +12012 -0
  3. package/dist/3dgs-lib.cjs.map +1 -0
  4. package/dist/3dgs-lib.js +12012 -0
  5. package/dist/3dgs-lib.js.map +1 -0
  6. package/dist/App.d.ts +142 -0
  7. package/dist/core/BoundingBoxRenderer.d.ts +70 -0
  8. package/dist/core/Camera.d.ts +38 -0
  9. package/dist/core/OrbitControls.d.ts +101 -0
  10. package/dist/core/Renderer.d.ts +69 -0
  11. package/dist/core/ViewportGizmo.d.ts +83 -0
  12. package/dist/core/gizmo/ArcShape.d.ts +90 -0
  13. package/dist/core/gizmo/ArrowShape.d.ts +51 -0
  14. package/dist/core/gizmo/BoxLineShape.d.ts +47 -0
  15. package/dist/core/gizmo/PlaneShape.d.ts +48 -0
  16. package/dist/core/gizmo/Shape.d.ts +117 -0
  17. package/dist/core/gizmo/SphereShape.d.ts +29 -0
  18. package/dist/core/gizmo/TransformGizmoV2.d.ts +203 -0
  19. package/dist/core/gizmo/index.d.ts +14 -0
  20. package/dist/core/math/Mat4.d.ts +38 -0
  21. package/dist/core/math/Quat.d.ts +52 -0
  22. package/dist/core/math/Ray.d.ts +65 -0
  23. package/dist/core/math/Vec3.d.ts +39 -0
  24. package/dist/gs/GSSplatRenderer.d.ts +217 -0
  25. package/dist/gs/GSSplatRendererMobile.d.ts +147 -0
  26. package/dist/gs/GSSplatSorter.d.ts +105 -0
  27. package/dist/gs/GSSplatSorterMobile.d.ts +86 -0
  28. package/dist/gs/IGSSplatRenderer.d.ts +123 -0
  29. package/dist/gs/PLYLoader.d.ts +22 -0
  30. package/dist/gs/PLYLoaderMobile.d.ts +62 -0
  31. package/dist/gs/SplatLoader.d.ts +25 -0
  32. package/dist/gs/TextureCompressor.d.ts +57 -0
  33. package/dist/index.d.ts +44 -0
  34. package/dist/interaction/GizmoManager.d.ts +132 -0
  35. package/dist/loaders/GLBLoader.d.ts +67 -0
  36. package/dist/loaders/MTLParser.d.ts +65 -0
  37. package/dist/loaders/OBJLoader.d.ts +68 -0
  38. package/dist/loaders/OBJParser.d.ts +115 -0
  39. package/dist/mesh/Mesh.d.ts +52 -0
  40. package/dist/mesh/MeshRenderer.d.ts +74 -0
  41. package/dist/scene/SceneManager.d.ts +136 -0
  42. package/package.json +62 -0
package/dist/App.d.ts ADDED
@@ -0,0 +1,142 @@
1
+ /**
2
+ * App - 统一调度入口
3
+ *
4
+ * 重构后的职责:
5
+ * - 初始化和协调各子系统
6
+ * - 渲染循环管理
7
+ * - 模型加载(委托给加载器)
8
+ * - 对外提供简洁的 API
9
+ *
10
+ * 场景管理委托给 SceneManager
11
+ * Gizmo 交互委托给 GizmoManager
12
+ */
13
+ import { Renderer } from "./core/Renderer";
14
+ import { Camera } from "./core/Camera";
15
+ import { OrbitControls } from "./core/OrbitControls";
16
+ import { MeshRenderer } from "./mesh/MeshRenderer";
17
+ import { Mesh } from "./mesh/Mesh";
18
+ import { GSSplatRenderer } from "./gs/GSSplatRenderer";
19
+ import { GSSplatRendererMobile } from "./gs/GSSplatRendererMobile";
20
+ import { BoundingBox } from "./gs/IGSSplatRenderer";
21
+ import { SplatTransformProxy, MeshGroupProxy, SplatBoundingBoxProvider } from "./interaction/GizmoManager";
22
+ import { TransformableObject, GizmoMode } from "./core/gizmo/TransformGizmoV2";
23
+ import { BoundingBoxProvider } from "./core/BoundingBoxRenderer";
24
+ export { SplatTransformProxy, MeshGroupProxy, SplatBoundingBoxProvider };
25
+ /**
26
+ * 统一进度回调类型
27
+ * @param progress 进度值 0-100
28
+ * @param stage 当前阶段: 'download' | 'parse' | 'upload'
29
+ */
30
+ export type ProgressCallback = (progress: number, stage: 'download' | 'parse' | 'upload') => void;
31
+ /**
32
+ * App - 统一调度入口
33
+ */
34
+ export declare class App {
35
+ private canvas;
36
+ private renderer;
37
+ private camera;
38
+ private controls;
39
+ private meshRenderer;
40
+ private glbLoader;
41
+ private objLoader;
42
+ private sceneManager;
43
+ private gizmoManager;
44
+ private isRunning;
45
+ private animationId;
46
+ private useMobileRenderer;
47
+ private boundOnResize;
48
+ constructor(canvas: HTMLCanvasElement);
49
+ /**
50
+ * 初始化应用
51
+ */
52
+ init(): Promise<void>;
53
+ /**
54
+ * 加载 GLB 文件
55
+ */
56
+ addGLB(url: string): Promise<number>;
57
+ /**
58
+ * 加载 OBJ 文件
59
+ */
60
+ addOBJ(url: string): Promise<Mesh[]>;
61
+ /**
62
+ * 加载 PLY 文件 (3D Gaussian Splatting)
63
+ */
64
+ addPLY(urlOrBuffer: string | ArrayBuffer, onProgress?: ProgressCallback, isLocalFile?: boolean): Promise<number>;
65
+ /**
66
+ * 加载 Splat 文件
67
+ */
68
+ addSplat(urlOrBuffer: string | ArrayBuffer, onProgress?: ProgressCallback, isLocalFile?: boolean): Promise<number>;
69
+ /**
70
+ * 添加测试立方体
71
+ */
72
+ addTestCube(): void;
73
+ /**
74
+ * 添加测试球体
75
+ */
76
+ addTestSphere(): void;
77
+ /**
78
+ * 开始渲染循环
79
+ */
80
+ start(): void;
81
+ /**
82
+ * 停止渲染循环
83
+ */
84
+ stop(): void;
85
+ private animate;
86
+ private render;
87
+ private onResize;
88
+ getMeshCount(): number;
89
+ getMeshByIndex(index: number): Mesh | null;
90
+ getMeshRange(startIndex: number, count: number): Mesh[];
91
+ clearMeshes(): void;
92
+ removeMeshByIndex(index: number): boolean;
93
+ getSplatCount(): number;
94
+ clearSplats(): void;
95
+ setSplatPosition(x: number, y: number, z: number): void;
96
+ getSplatPosition(): [number, number, number] | null;
97
+ setSplatRotation(x: number, y: number, z: number): void;
98
+ getSplatRotation(): [number, number, number] | null;
99
+ setSplatScale(x: number, y: number, z: number): void;
100
+ getSplatScale(): [number, number, number] | null;
101
+ setSHMode(mode: 0 | 1 | 2 | 3): void;
102
+ getSHMode(): number;
103
+ getSplatBoundingBox(): BoundingBox | null;
104
+ getMeshRangeBoundingBox(startIndex: number, count: number): BoundingBox | null;
105
+ getMeshColor(index: number): [number, number, number, number] | null;
106
+ setMeshColor(index: number, r: number, g: number, b: number, a?: number): boolean;
107
+ setMeshRangeColor(startIndex: number, count: number, r: number, g: number, b: number, a?: number): number;
108
+ frameCurrentModel(animate?: boolean): boolean;
109
+ getTransformGizmo(): import(".").TransformGizmoV2;
110
+ getViewportGizmo(): import(".").ViewportGizmo;
111
+ getBoundingBoxRenderer(): import(".").BoundingBoxRenderer;
112
+ setGizmoMode(mode: GizmoMode): void;
113
+ setGizmoTarget(object: TransformableObject | null): void;
114
+ setSelectionBoundingBox(box: BoundingBox | null): void;
115
+ setSelectionBoundingBoxProvider(provider: BoundingBoxProvider | null): void;
116
+ clearSelectionBoundingBox(): void;
117
+ /**
118
+ * 创建 Mesh 组的变换代理
119
+ */
120
+ createMeshGroupProxy(startIndex: number, count: number): MeshGroupProxy | null;
121
+ /**
122
+ * 获取 Splat 的变换代理
123
+ */
124
+ getSplatTransformProxy(): SplatTransformProxy | null;
125
+ /**
126
+ * 创建 Splat 包围盒提供者
127
+ */
128
+ createSplatBoundingBoxProvider(): SplatBoundingBoxProvider | null;
129
+ getRenderer(): Renderer;
130
+ getCamera(): Camera;
131
+ getControls(): OrbitControls;
132
+ getMeshRenderer(): MeshRenderer;
133
+ getGSRenderer(): GSSplatRenderer | undefined;
134
+ getGSRendererMobile(): GSSplatRendererMobile | undefined;
135
+ isUsingMobileRenderer(): boolean;
136
+ private fetchWithProgress;
137
+ private parsePLYBuffer;
138
+ /**
139
+ * 销毁应用及所有资源
140
+ */
141
+ destroy(): void;
142
+ }
@@ -0,0 +1,70 @@
1
+ import { Renderer } from "./Renderer";
2
+ import { Camera } from "./Camera";
3
+ /**
4
+ * BoundingBox 数据结构
5
+ */
6
+ export interface BoundingBox {
7
+ min: [number, number, number];
8
+ max: [number, number, number];
9
+ }
10
+ /**
11
+ * BoundingBoxProvider - 包围盒数据提供者接口
12
+ * 实现此接口的对象可以动态提供包围盒数据
13
+ */
14
+ export interface BoundingBoxProvider {
15
+ getBoundingBox(): BoundingBox | null;
16
+ }
17
+ /**
18
+ * BoundingBoxRenderer - 包围盒线框渲染器
19
+ * 用于显示选中对象的包围盒,支持动态跟随
20
+ */
21
+ export declare class BoundingBoxRenderer {
22
+ private renderer;
23
+ private camera;
24
+ private pipeline;
25
+ private uniformBuffer;
26
+ private bindGroup;
27
+ private vertexBuffer;
28
+ private provider;
29
+ private staticBoundingBox;
30
+ private lineColor;
31
+ private cornerRatio;
32
+ constructor(renderer: Renderer, camera: Camera);
33
+ /**
34
+ * 创建渲染管线
35
+ */
36
+ private createPipeline;
37
+ /**
38
+ * 创建顶点缓冲区(预分配)
39
+ */
40
+ private createVertexBuffer;
41
+ /**
42
+ * 设置包围盒数据提供者(动态模式)
43
+ * 每帧会从 provider 获取最新的包围盒数据
44
+ */
45
+ setProvider(provider: BoundingBoxProvider | null): void;
46
+ /**
47
+ * 设置静态包围盒(不会自动更新)
48
+ */
49
+ setBoundingBox(box: BoundingBox | null): void;
50
+ /**
51
+ * 清除包围盒
52
+ */
53
+ clear(): void;
54
+ /**
55
+ * 设置线条颜色
56
+ */
57
+ setLineColor(r: number, g: number, b: number): void;
58
+ /**
59
+ * 生成顶点数据
60
+ */
61
+ private generateVertices;
62
+ /**
63
+ * 渲染包围盒
64
+ */
65
+ render(pass: GPURenderPassEncoder): void;
66
+ /**
67
+ * 销毁资源
68
+ */
69
+ destroy(): void;
70
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Camera - 相机矩阵计算
3
+ * 只负责视图矩阵和投影矩阵
4
+ */
5
+ export declare class Camera {
6
+ position: Float32Array;
7
+ target: Float32Array;
8
+ up: Float32Array;
9
+ fov: number;
10
+ aspect: number;
11
+ near: number;
12
+ far: number;
13
+ viewMatrix: Float32Array;
14
+ projectionMatrix: Float32Array;
15
+ viewProjectionMatrix: Float32Array;
16
+ constructor();
17
+ /**
18
+ * 设置宽高比
19
+ */
20
+ setAspect(aspect: number): void;
21
+ /**
22
+ * 更新视图和投影矩阵
23
+ */
24
+ updateMatrix(): void;
25
+ /**
26
+ * 计算视图矩阵 (lookAt)
27
+ */
28
+ private updateViewMatrix;
29
+ /**
30
+ * 计算投影矩阵 (透视投影)
31
+ */
32
+ private updateProjectionMatrix;
33
+ private subtract;
34
+ private cross;
35
+ private dot;
36
+ private normalize;
37
+ private multiplyMatrices;
38
+ }
@@ -0,0 +1,101 @@
1
+ import { Camera } from "./Camera";
2
+ /**
3
+ * OrbitControls - 轨道控制器
4
+ * 只负责鼠标/触摸输入控制相机
5
+ */
6
+ export declare class OrbitControls {
7
+ private camera;
8
+ private canvas;
9
+ distance: number;
10
+ theta: number;
11
+ phi: number;
12
+ minDistance: number;
13
+ maxDistance: number;
14
+ minPhi: number;
15
+ maxPhi: number;
16
+ rotateSpeed: number;
17
+ zoomSpeed: number;
18
+ panSpeed: number;
19
+ touchZoomSpeed: number;
20
+ touchPanSpeed: number;
21
+ private isDragging;
22
+ private lastX;
23
+ private lastY;
24
+ private touchMode;
25
+ private lastTouchDistance;
26
+ private lastTouchCenter;
27
+ enabled: boolean;
28
+ private boundOnMouseDown;
29
+ private boundOnMouseMove;
30
+ private boundOnMouseUp;
31
+ private boundOnWheel;
32
+ private boundOnTouchStart;
33
+ private boundOnTouchMove;
34
+ private boundOnTouchEnd;
35
+ private boundOnContextMenu;
36
+ constructor(camera: Camera, canvas: HTMLCanvasElement);
37
+ /**
38
+ * 设置事件监听
39
+ */
40
+ private setupEventListeners;
41
+ /**
42
+ * 移除事件监听
43
+ */
44
+ private removeEventListeners;
45
+ /**
46
+ * 销毁控制器
47
+ */
48
+ destroy(): void;
49
+ private onMouseDown;
50
+ private onMouseMove;
51
+ private onMouseUp;
52
+ private onWheel;
53
+ private onTouchStart;
54
+ private onTouchMove;
55
+ private onTouchEnd;
56
+ /**
57
+ * 计算双指之间的距离
58
+ */
59
+ private getTouchDistance;
60
+ /**
61
+ * 计算双指的中心点
62
+ */
63
+ private getTouchCenter;
64
+ /**
65
+ * 根据球坐标更新相机位置
66
+ */
67
+ update(): void;
68
+ /**
69
+ * 切换到标准视图
70
+ * @param axis 轴 'X' | 'Y' | 'Z'
71
+ * @param positive 是否正向
72
+ * @param animate 是否动画过渡
73
+ */
74
+ setViewAxis(axis: string, positive: boolean, animate?: boolean): void;
75
+ /**
76
+ * 动画过渡到目标视图
77
+ */
78
+ private animateToView;
79
+ /**
80
+ * 设置相机目标点(控制器旋转中心)
81
+ * @param x X 坐标
82
+ * @param y Y 坐标
83
+ * @param z Z 坐标
84
+ */
85
+ setTarget(x: number, y: number, z: number): void;
86
+ /**
87
+ * 获取当前目标点
88
+ */
89
+ getTarget(): [number, number, number];
90
+ /**
91
+ * 根据模型参数自动调整相机位置和参数
92
+ * @param center 模型中心点
93
+ * @param radius 模型包围球半径
94
+ * @param animate 是否使用动画过渡
95
+ */
96
+ frameModel(center: [number, number, number], radius: number, animate?: boolean): void;
97
+ /**
98
+ * 动画过渡到目标帧(包含目标点和距离)
99
+ */
100
+ private animateToFrame;
101
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Renderer - WebGPU 初始化 + 帧提交
3
+ * 只负责 WebGPU 设备管理和渲染通道
4
+ */
5
+ export declare class Renderer {
6
+ private canvas;
7
+ private _device;
8
+ private _context;
9
+ private _format;
10
+ private _depthTexture;
11
+ private _depthTextureView;
12
+ private commandEncoder;
13
+ private renderPassEncoder;
14
+ private resizeObserver;
15
+ private _clearColor;
16
+ constructor(canvas: HTMLCanvasElement);
17
+ /**
18
+ * 设置背景颜色
19
+ */
20
+ setClearColor(r: number, g: number, b: number, a?: number): void;
21
+ /**
22
+ * 通过十六进制设置背景颜色
23
+ */
24
+ setClearColorHex(hex: string): void;
25
+ /**
26
+ * 获取背景颜色(十六进制)
27
+ */
28
+ getClearColorHex(): string;
29
+ get device(): GPUDevice;
30
+ get context(): GPUCanvasContext;
31
+ get format(): GPUTextureFormat;
32
+ get depthFormat(): GPUTextureFormat;
33
+ /**
34
+ * 获取渲染宽度(像素)
35
+ */
36
+ get width(): number;
37
+ /**
38
+ * 获取渲染高度(像素)
39
+ */
40
+ get height(): number;
41
+ /**
42
+ * 初始化 WebGPU
43
+ */
44
+ init(): Promise<void>;
45
+ /**
46
+ * 创建深度纹理
47
+ */
48
+ private createDepthTexture;
49
+ /**
50
+ * 设置 resize 监听
51
+ */
52
+ private setupResizeObserver;
53
+ /**
54
+ * 销毁渲染器资源
55
+ */
56
+ destroy(): void;
57
+ /**
58
+ * 开始帧 - 创建命令编码器和渲染通道
59
+ */
60
+ beginFrame(): GPURenderPassEncoder;
61
+ /**
62
+ * 结束帧 - 提交命令
63
+ */
64
+ endFrame(): void;
65
+ /**
66
+ * 获取 canvas 宽高比
67
+ */
68
+ getAspectRatio(): number;
69
+ }
@@ -0,0 +1,83 @@
1
+ import { Camera } from "./Camera";
2
+ import { Renderer } from "./Renderer";
3
+ /**
4
+ * ViewportGizmo - 视口坐标轴指示器
5
+ * 在画布右上角显示当前相机朝向
6
+ */
7
+ export declare class ViewportGizmo {
8
+ private renderer;
9
+ private camera;
10
+ private canvas;
11
+ private pipeline;
12
+ private uniformBuffer;
13
+ private bindGroup;
14
+ private vertexBuffer;
15
+ private indexBuffer;
16
+ private vertexCount;
17
+ private indexCount;
18
+ private size;
19
+ private margin;
20
+ private projMatrix;
21
+ private viewMatrix;
22
+ private axes;
23
+ private onAxisClick?;
24
+ constructor(renderer: Renderer, camera: Camera, canvas: HTMLCanvasElement);
25
+ /**
26
+ * 设置轴点击回调
27
+ */
28
+ setOnAxisClick(callback: (axis: string, positive: boolean) => void): void;
29
+ /**
30
+ * 创建渲染管线
31
+ */
32
+ private createPipeline;
33
+ /**
34
+ * 创建 Gizmo 几何体(三个轴 + 箭头)
35
+ */
36
+ private createGeometry;
37
+ /**
38
+ * 创建圆柱体几何
39
+ */
40
+ private createCylinder;
41
+ /**
42
+ * 创建圆锥几何
43
+ */
44
+ private createCone;
45
+ /**
46
+ * 创建球体几何
47
+ */
48
+ private createSphere;
49
+ /**
50
+ * 创建 uniform buffer
51
+ */
52
+ private createUniformBuffer;
53
+ /**
54
+ * 设置正交投影矩阵
55
+ */
56
+ private setupOrthoProjection;
57
+ /**
58
+ * 更新 Gizmo 视图矩阵(从相机提取旋转部分)
59
+ */
60
+ private updateViewMatrix;
61
+ /**
62
+ * 渲染 Gizmo
63
+ */
64
+ render(pass: GPURenderPassEncoder): void;
65
+ /**
66
+ * 处理点击事件,检测是否点击了某个轴
67
+ */
68
+ handleClick(clientX: number, clientY: number): boolean;
69
+ /**
70
+ * 检测点击了哪个轴
71
+ */
72
+ private detectClickedAxis;
73
+ private cross;
74
+ private normalize;
75
+ /**
76
+ * 设置 Gizmo 大小
77
+ */
78
+ setSize(size: number): void;
79
+ /**
80
+ * 设置边距
81
+ */
82
+ setMargin(margin: number): void;
83
+ }
@@ -0,0 +1,90 @@
1
+ import { Vec3 } from "../math/Vec3";
2
+ import { Mat4 } from "../math/Mat4";
3
+ import { Shape, ShapeConfig } from "./Shape";
4
+ /**
5
+ * ArcShapeConfig - 圆弧形状配置
6
+ */
7
+ export interface ArcShapeConfig extends ShapeConfig {
8
+ tubeRadius?: number;
9
+ ringRadius?: number;
10
+ sectorAngle?: number;
11
+ tolerance?: number;
12
+ }
13
+ /**
14
+ * ArcDisplayMode - 圆弧显示模式
15
+ */
16
+ export type ArcDisplayMode = 'sector' | 'ring' | 'none';
17
+ /**
18
+ * ArcShape - 圆弧形状(用于旋转 Gizmo)
19
+ * 参考 PlayCanvas 引擎的 ArcShape 实现
20
+ *
21
+ * 圆环默认在 XZ 平面上(绕 Y 轴),通过 rotation 旋转到正确的轴
22
+ */
23
+ export declare class ArcShape extends Shape {
24
+ private _tubeRadius;
25
+ private _ringRadius;
26
+ private _sectorAngle;
27
+ private _tolerance;
28
+ private _displayMode;
29
+ private _sectorVertexBuffer;
30
+ private _sectorIndexBuffer;
31
+ private _sectorIndexCount;
32
+ private _ringVertexBuffer;
33
+ private _ringIndexBuffer;
34
+ private _ringIndexCount;
35
+ private _dynamicRotation;
36
+ constructor(config: ArcShapeConfig);
37
+ get tubeRadius(): number;
38
+ set tubeRadius(value: number);
39
+ get ringRadius(): number;
40
+ set ringRadius(value: number);
41
+ get sectorAngle(): number;
42
+ set sectorAngle(value: number);
43
+ get tolerance(): number;
44
+ set tolerance(value: number);
45
+ get displayMode(): ArcDisplayMode;
46
+ /**
47
+ * 设置动态旋转(用于面向相机)
48
+ */
49
+ setDynamicRotation(rotation: Vec3): void;
50
+ /**
51
+ * 获取局部变换矩阵(包含动态旋转)
52
+ */
53
+ getLocalTransform(): Mat4;
54
+ /**
55
+ * 更新碰撞数据
56
+ */
57
+ private _updateTriData;
58
+ /**
59
+ * 切换显示模式
60
+ */
61
+ show(mode: ArcDisplayMode): void;
62
+ /**
63
+ * 创建圆环几何体
64
+ */
65
+ private createTorusGeometry;
66
+ /**
67
+ * 创建渲染用的 GPU 几何体(同时创建 sector 和 ring 两种)
68
+ */
69
+ createGeometry(device: GPUDevice): void;
70
+ /**
71
+ * 创建圆环网格数据
72
+ */
73
+ private _createTorusMeshData;
74
+ /**
75
+ * 获取顶点缓冲区(根据显示模式)
76
+ */
77
+ getVertexBuffer(): GPUBuffer | null;
78
+ /**
79
+ * 获取索引缓冲区(根据显示模式)
80
+ */
81
+ getIndexBuffer(): GPUBuffer | null;
82
+ /**
83
+ * 获取索引数量(根据显示模式)
84
+ */
85
+ getIndexCount(): number;
86
+ /**
87
+ * 销毁 GPU 资源
88
+ */
89
+ destroy(): void;
90
+ }
@@ -0,0 +1,51 @@
1
+ import { Shape, ShapeConfig } from "./Shape";
2
+ /**
3
+ * ArrowShapeConfig - 箭头形状配置
4
+ */
5
+ export interface ArrowShapeConfig extends ShapeConfig {
6
+ gap?: number;
7
+ lineThickness?: number;
8
+ lineLength?: number;
9
+ arrowThickness?: number;
10
+ arrowLength?: number;
11
+ tolerance?: number;
12
+ }
13
+ /**
14
+ * ArrowShape - 箭头形状(用于平移 Gizmo)
15
+ * 参考 PlayCanvas 引擎的 ArrowShape 实现
16
+ */
17
+ export declare class ArrowShape extends Shape {
18
+ private _gap;
19
+ private _lineThickness;
20
+ private _lineLength;
21
+ private _arrowThickness;
22
+ private _arrowLength;
23
+ private _tolerance;
24
+ constructor(config: ArrowShapeConfig);
25
+ get gap(): number;
26
+ set gap(value: number);
27
+ get lineThickness(): number;
28
+ set lineThickness(value: number);
29
+ get lineLength(): number;
30
+ set lineLength(value: number);
31
+ get arrowThickness(): number;
32
+ set arrowThickness(value: number);
33
+ get arrowLength(): number;
34
+ set arrowLength(value: number);
35
+ /**
36
+ * 更新碰撞数据
37
+ */
38
+ private _updateTriData;
39
+ /**
40
+ * 创建单位锥体几何体(底面半径1,高度1,底面在y=0,顶点在y=1)
41
+ */
42
+ private createConeGeometry;
43
+ /**
44
+ * 创建单位圆柱几何体(半径1,高度1,中心在原点)
45
+ */
46
+ private createCylinderGeometry;
47
+ /**
48
+ * 创建渲染用的 GPU 几何体
49
+ */
50
+ createGeometry(device: GPUDevice): void;
51
+ }
@@ -0,0 +1,47 @@
1
+ import { Shape, ShapeConfig } from "./Shape";
2
+ /**
3
+ * BoxLineShapeConfig - 方块线形状配置(用于缩放 Gizmo)
4
+ */
5
+ export interface BoxLineShapeConfig extends ShapeConfig {
6
+ gap?: number;
7
+ lineThickness?: number;
8
+ lineLength?: number;
9
+ boxSize?: number;
10
+ tolerance?: number;
11
+ }
12
+ /**
13
+ * BoxLineShape - 方块线形状(用于缩放 Gizmo)
14
+ * 参考 PlayCanvas 引擎的 BoxLineShape 实现
15
+ */
16
+ export declare class BoxLineShape extends Shape {
17
+ private _gap;
18
+ private _lineThickness;
19
+ private _lineLength;
20
+ private _boxSize;
21
+ private _tolerance;
22
+ constructor(config: BoxLineShapeConfig);
23
+ get gap(): number;
24
+ set gap(value: number);
25
+ get lineThickness(): number;
26
+ set lineThickness(value: number);
27
+ get lineLength(): number;
28
+ set lineLength(value: number);
29
+ get boxSize(): number;
30
+ set boxSize(value: number);
31
+ /**
32
+ * 更新碰撞数据
33
+ */
34
+ private _updateTriData;
35
+ /**
36
+ * 创建单位方块几何体(边长1,中心在原点)
37
+ */
38
+ private createBoxGeometry;
39
+ /**
40
+ * 创建单位圆柱几何体
41
+ */
42
+ private createCylinderGeometry;
43
+ /**
44
+ * 创建渲染用的 GPU 几何体
45
+ */
46
+ createGeometry(device: GPUDevice): void;
47
+ }