@chocozhang/three-model-render 1.0.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/LICENSE +21 -0
- package/README.md +609 -0
- package/dist/camera/index.d.ts +133 -0
- package/dist/camera/index.js +291 -0
- package/dist/camera/index.js.map +1 -0
- package/dist/camera/index.mjs +265 -0
- package/dist/camera/index.mjs.map +1 -0
- package/dist/core/index.d.ts +102 -0
- package/dist/core/index.js +455 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +432 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/effect/index.d.ts +214 -0
- package/dist/effect/index.js +749 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/index.mjs +728 -0
- package/dist/effect/index.mjs.map +1 -0
- package/dist/index.d.ts +852 -0
- package/dist/index.js +3268 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3223 -0
- package/dist/index.mjs.map +1 -0
- package/dist/interaction/index.d.ts +160 -0
- package/dist/interaction/index.js +661 -0
- package/dist/interaction/index.js.map +1 -0
- package/dist/interaction/index.mjs +637 -0
- package/dist/interaction/index.mjs.map +1 -0
- package/dist/loader/index.d.ts +175 -0
- package/dist/loader/index.js +786 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.mjs +758 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/setup/index.d.ts +47 -0
- package/dist/setup/index.js +199 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/index.mjs +178 -0
- package/dist/setup/index.mjs.map +1 -0
- package/dist/ui/index.d.ts +36 -0
- package/dist/ui/index.js +292 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +271 -0
- package/dist/ui/index.mjs.map +1 -0
- package/package.json +98 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass';
|
|
3
|
+
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
|
|
4
|
+
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
|
5
|
+
|
|
6
|
+
interface LabelOptions$1 {
|
|
7
|
+
fontSize?: string;
|
|
8
|
+
color?: string;
|
|
9
|
+
background?: string;
|
|
10
|
+
padding?: string;
|
|
11
|
+
borderRadius?: string;
|
|
12
|
+
updateInterval?: number;
|
|
13
|
+
enableCache?: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface LabelManager$1 {
|
|
16
|
+
pause: () => void;
|
|
17
|
+
resume: () => void;
|
|
18
|
+
dispose: () => void;
|
|
19
|
+
isRunning: () => boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 给子模型添加头顶标签(支持 Mesh 和 Group)- 优化版
|
|
23
|
+
*
|
|
24
|
+
* ✨ 性能优化:
|
|
25
|
+
* - 缓存包围盒,避免每帧重复计算
|
|
26
|
+
* - 支持暂停/恢复更新
|
|
27
|
+
* - 可配置更新间隔,降低 CPU 占用
|
|
28
|
+
* - 只在可见时更新,隐藏时自动暂停
|
|
29
|
+
*
|
|
30
|
+
* @param camera THREE.Camera - 场景摄像机
|
|
31
|
+
* @param renderer THREE.WebGLRenderer - 渲染器,用于屏幕尺寸
|
|
32
|
+
* @param parentModel THREE.Object3D - FBX 根节点或 Group
|
|
33
|
+
* @param modelLabelsMap Record<string,string> - 模型 name → 标签文字 映射表
|
|
34
|
+
* @param options LabelOptions - 可选标签样式配置
|
|
35
|
+
* @returns LabelManager - 包含 pause/resume/dispose 的管理接口
|
|
36
|
+
*/
|
|
37
|
+
declare function addChildModelLabels(camera: THREE.Camera, renderer: THREE.WebGLRenderer, parentModel: THREE.Object3D, modelLabelsMap: Record<string, string>, options?: LabelOptions$1): LabelManager$1;
|
|
38
|
+
|
|
39
|
+
type HoverBreathOptions = {
|
|
40
|
+
camera: THREE.Camera;
|
|
41
|
+
scene: THREE.Scene;
|
|
42
|
+
renderer: THREE.WebGLRenderer;
|
|
43
|
+
outlinePass: OutlinePass;
|
|
44
|
+
highlightNames?: string[] | null;
|
|
45
|
+
minStrength?: number;
|
|
46
|
+
maxStrength?: number;
|
|
47
|
+
speed?: number;
|
|
48
|
+
throttleDelay?: number;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 创建单例高亮器 —— 推荐在 mounted 时创建一次
|
|
52
|
+
* 返回 { updateHighlightNames, dispose, getHoveredName } 接口
|
|
53
|
+
*
|
|
54
|
+
* ✨ 性能优化:
|
|
55
|
+
* - 无 hover 对象时自动暂停动画
|
|
56
|
+
* - mousemove 节流处理,避免过度计算
|
|
57
|
+
* - 使用 passive 事件监听器提升滚动性能
|
|
58
|
+
*/
|
|
59
|
+
declare function enableHoverBreath(opts: HoverBreathOptions): {
|
|
60
|
+
updateHighlightNames: (names: string[] | null) => void;
|
|
61
|
+
dispose: () => void;
|
|
62
|
+
refreshSelection: () => void;
|
|
63
|
+
getHoveredName: () => string | null;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 后期处理配置选项
|
|
68
|
+
*/
|
|
69
|
+
interface PostProcessingOptions {
|
|
70
|
+
edgeStrength?: number;
|
|
71
|
+
edgeGlow?: number;
|
|
72
|
+
edgeThickness?: number;
|
|
73
|
+
visibleEdgeColor?: string;
|
|
74
|
+
hiddenEdgeColor?: string;
|
|
75
|
+
resolutionScale?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 后期处理管理接口
|
|
79
|
+
*/
|
|
80
|
+
interface PostProcessingManager {
|
|
81
|
+
composer: EffectComposer;
|
|
82
|
+
outlinePass: OutlinePass;
|
|
83
|
+
resize: (width?: number, height?: number) => void;
|
|
84
|
+
dispose: () => void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 初始化描边相关信息(包含 OutlinePass)- 优化版
|
|
88
|
+
*
|
|
89
|
+
* ✨ 功能增强:
|
|
90
|
+
* - 支持窗口 resize 自动更新
|
|
91
|
+
* - 可配置分辨率缩放提升性能
|
|
92
|
+
* - 完善的资源释放管理
|
|
93
|
+
*
|
|
94
|
+
* @param renderer THREE.WebGLRenderer
|
|
95
|
+
* @param scene THREE.Scene
|
|
96
|
+
* @param camera THREE.Camera
|
|
97
|
+
* @param options PostProcessingOptions - 可选配置
|
|
98
|
+
* @returns PostProcessingManager - 包含 composer/outlinePass/resize/dispose 的管理接口
|
|
99
|
+
*/
|
|
100
|
+
declare function initPostProcessing(renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, options?: PostProcessingOptions): PostProcessingManager;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 点击处理器配置选项
|
|
104
|
+
*/
|
|
105
|
+
interface ClickHandlerOptions {
|
|
106
|
+
clickThreshold?: number;
|
|
107
|
+
debounceDelay?: number;
|
|
108
|
+
raycasterParams?: {
|
|
109
|
+
near?: number;
|
|
110
|
+
far?: number;
|
|
111
|
+
pointsPrecision?: number;
|
|
112
|
+
};
|
|
113
|
+
enableDynamicThickness?: boolean;
|
|
114
|
+
minThickness?: number;
|
|
115
|
+
maxThickness?: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 创建模型点击高亮工具(OutlinePass 版)- 优化版
|
|
119
|
+
*
|
|
120
|
+
* ✨ 功能增强:
|
|
121
|
+
* - 使用 AbortController 统一管理事件生命周期
|
|
122
|
+
* - 支持防抖处理避免频繁触发
|
|
123
|
+
* - 可自定义 Raycaster 参数
|
|
124
|
+
* - 根据相机距离动态调整描边厚度
|
|
125
|
+
*
|
|
126
|
+
* @param camera 相机
|
|
127
|
+
* @param scene 场景
|
|
128
|
+
* @param renderer 渲染器
|
|
129
|
+
* @param outlinePass 已初始化的 OutlinePass
|
|
130
|
+
* @param onClick 点击回调
|
|
131
|
+
* @param options 可选配置
|
|
132
|
+
* @returns dispose 函数,用于清理事件和资源
|
|
133
|
+
*/
|
|
134
|
+
declare function createModelClickHandler(camera: THREE.Camera, scene: THREE.Scene, renderer: THREE.WebGLRenderer, outlinePass: OutlinePass, onClick: (object: THREE.Object3D | null, info?: {
|
|
135
|
+
name?: string;
|
|
136
|
+
position?: THREE.Vector3;
|
|
137
|
+
uuid?: string;
|
|
138
|
+
}) => void, options?: ClickHandlerOptions): () => void;
|
|
139
|
+
|
|
140
|
+
type FilterFn = (obj: THREE.Object3D) => boolean;
|
|
141
|
+
/**
|
|
142
|
+
* ArrowGuide - 优化版
|
|
143
|
+
* 箭头引导效果工具,支持高亮模型并淡化其他对象
|
|
144
|
+
*
|
|
145
|
+
* ✨ 优化内容:
|
|
146
|
+
* - 使用 WeakMap 自动回收材质,避免内存泄漏
|
|
147
|
+
* - 使用 AbortController 管理事件生命周期
|
|
148
|
+
* - 添加材质复用机制,减少重复创建
|
|
149
|
+
* - 改进 dispose 逻辑,确保完全释放资源
|
|
150
|
+
* - 添加错误处理和边界检查
|
|
151
|
+
*/
|
|
152
|
+
declare class ArrowGuide {
|
|
153
|
+
private renderer;
|
|
154
|
+
private camera;
|
|
155
|
+
private scene;
|
|
156
|
+
private lxMesh;
|
|
157
|
+
private flowActive;
|
|
158
|
+
private modelBrightArr;
|
|
159
|
+
private pointerDownPos;
|
|
160
|
+
private clickThreshold;
|
|
161
|
+
private raycaster;
|
|
162
|
+
private mouse;
|
|
163
|
+
private originalMaterials;
|
|
164
|
+
private fadedMaterials;
|
|
165
|
+
private abortController;
|
|
166
|
+
private ignoreRaycastNames;
|
|
167
|
+
private fadeOpacity;
|
|
168
|
+
private fadeBrightness;
|
|
169
|
+
constructor(renderer: THREE.WebGLRenderer, camera: THREE.Camera, scene: THREE.Scene, options?: {
|
|
170
|
+
clickThreshold?: number;
|
|
171
|
+
ignoreRaycastNames?: string[];
|
|
172
|
+
fadeOpacity?: number;
|
|
173
|
+
fadeBrightness?: number;
|
|
174
|
+
});
|
|
175
|
+
private cacheOriginalMaterial;
|
|
176
|
+
private makeFadedClone;
|
|
177
|
+
private createFadedMaterialFrom;
|
|
178
|
+
/**
|
|
179
|
+
* 设置箭头 Mesh
|
|
180
|
+
*/
|
|
181
|
+
setArrowMesh(mesh: THREE.Mesh): void;
|
|
182
|
+
/**
|
|
183
|
+
* 高亮指定模型
|
|
184
|
+
*/
|
|
185
|
+
highlight(models: THREE.Object3D[]): void;
|
|
186
|
+
private applyHighlight;
|
|
187
|
+
restore(): void;
|
|
188
|
+
/**
|
|
189
|
+
* 动画更新(每帧调用)
|
|
190
|
+
*/
|
|
191
|
+
animate(): void;
|
|
192
|
+
/**
|
|
193
|
+
* 初始化事件监听器
|
|
194
|
+
*/
|
|
195
|
+
private initEvents;
|
|
196
|
+
/**
|
|
197
|
+
* 释放所有资源
|
|
198
|
+
*/
|
|
199
|
+
dispose(): void;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
interface LiquidFillerOptions {
|
|
203
|
+
color?: number;
|
|
204
|
+
opacity?: number;
|
|
205
|
+
speed?: number;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* LiquidFillerGroup - 优化版
|
|
209
|
+
* 支持单模型或多模型液位动画、独立颜色控制
|
|
210
|
+
*
|
|
211
|
+
* ✨ 优化内容:
|
|
212
|
+
* - 使用 renderer.domElement 替代 window 事件
|
|
213
|
+
* - 使用 AbortController 管理事件生命周期
|
|
214
|
+
* - 添加错误处理和边界检查
|
|
215
|
+
* - 优化动画管理,避免内存泄漏
|
|
216
|
+
* - 完善资源释放逻辑
|
|
217
|
+
*/
|
|
218
|
+
declare class LiquidFillerGroup {
|
|
219
|
+
private items;
|
|
220
|
+
private scene;
|
|
221
|
+
private camera;
|
|
222
|
+
private renderer;
|
|
223
|
+
private raycaster;
|
|
224
|
+
private pointerDownPos;
|
|
225
|
+
private clickThreshold;
|
|
226
|
+
private abortController;
|
|
227
|
+
/**
|
|
228
|
+
* 构造函数
|
|
229
|
+
* @param models 单个或多个 THREE.Object3D
|
|
230
|
+
* @param scene 场景
|
|
231
|
+
* @param camera 相机
|
|
232
|
+
* @param renderer 渲染器
|
|
233
|
+
* @param defaultOptions 默认液体选项
|
|
234
|
+
* @param clickThreshold 点击阈值,单位像素
|
|
235
|
+
*/
|
|
236
|
+
constructor(models: THREE.Object3D | THREE.Object3D[], scene: THREE.Scene, camera: THREE.Camera, renderer: THREE.WebGLRenderer, defaultOptions?: LiquidFillerOptions, clickThreshold?: number);
|
|
237
|
+
/** pointerdown 记录位置 */
|
|
238
|
+
private handlePointerDown;
|
|
239
|
+
/** pointerup 判断点击空白,恢复原始材质 */
|
|
240
|
+
private handlePointerUp;
|
|
241
|
+
/**
|
|
242
|
+
* 设置液位
|
|
243
|
+
* @param models 单个模型或模型数组
|
|
244
|
+
* @param percent 液位百分比 0~1
|
|
245
|
+
*/
|
|
246
|
+
fillTo(models: THREE.Object3D | THREE.Object3D[], percent: number): void;
|
|
247
|
+
/** 设置多个模型液位,percentList 与 items 顺序对应 */
|
|
248
|
+
fillToAll(percentList: number[]): void;
|
|
249
|
+
/** 恢复单个模型原始材质并移除液体 */
|
|
250
|
+
restore(model: THREE.Object3D): void;
|
|
251
|
+
/** 恢复所有模型 */
|
|
252
|
+
restoreAll(): void;
|
|
253
|
+
/** 销毁方法,释放事件和资源 */
|
|
254
|
+
dispose(): void;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
interface FollowOptions {
|
|
258
|
+
duration?: number;
|
|
259
|
+
padding?: number;
|
|
260
|
+
minDistance?: number;
|
|
261
|
+
maxDistance?: number;
|
|
262
|
+
controls?: {
|
|
263
|
+
target?: THREE.Vector3;
|
|
264
|
+
update?: () => void;
|
|
265
|
+
} | null;
|
|
266
|
+
azimuth?: number;
|
|
267
|
+
elevation?: number;
|
|
268
|
+
easing?: 'linear' | 'easeInOut' | 'easeOut' | 'easeIn';
|
|
269
|
+
onProgress?: (progress: number) => void;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* 推荐角度枚举,便于快速选取常见视角
|
|
273
|
+
*/
|
|
274
|
+
declare const FOLLOW_ANGLES: {
|
|
275
|
+
/** 等距斜视(默认视角)- 适合建筑、机械设备展示 */
|
|
276
|
+
readonly ISOMETRIC: {
|
|
277
|
+
readonly azimuth: number;
|
|
278
|
+
readonly elevation: number;
|
|
279
|
+
};
|
|
280
|
+
/** 正前视角 - 适合正面展示、UI 对齐 */
|
|
281
|
+
readonly FRONT: {
|
|
282
|
+
readonly azimuth: 0;
|
|
283
|
+
readonly elevation: 0;
|
|
284
|
+
};
|
|
285
|
+
/** 右侧视角 - 适合机械剖面、侧视检查 */
|
|
286
|
+
readonly RIGHT: {
|
|
287
|
+
readonly azimuth: number;
|
|
288
|
+
readonly elevation: 0;
|
|
289
|
+
};
|
|
290
|
+
/** 左侧视角 */
|
|
291
|
+
readonly LEFT: {
|
|
292
|
+
readonly azimuth: number;
|
|
293
|
+
readonly elevation: 0;
|
|
294
|
+
};
|
|
295
|
+
/** 后视角 */
|
|
296
|
+
readonly BACK: {
|
|
297
|
+
readonly azimuth: number;
|
|
298
|
+
readonly elevation: 0;
|
|
299
|
+
};
|
|
300
|
+
/** 顶视图 - 适合地图、平面布局展示 */
|
|
301
|
+
readonly TOP: {
|
|
302
|
+
readonly azimuth: 0;
|
|
303
|
+
readonly elevation: number;
|
|
304
|
+
};
|
|
305
|
+
/** 低角度俯视 - 适合车辆、人物等近地物体 */
|
|
306
|
+
readonly LOW_ANGLE: {
|
|
307
|
+
readonly azimuth: number;
|
|
308
|
+
readonly elevation: number;
|
|
309
|
+
};
|
|
310
|
+
/** 高角度俯视 - 适合鸟瞰、全景浏览 */
|
|
311
|
+
readonly HIGH_ANGLE: {
|
|
312
|
+
readonly azimuth: number;
|
|
313
|
+
readonly elevation: number;
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
/**
|
|
317
|
+
* 自动将相机移到目标的斜上角位置,并保证目标在可视范围内(平滑过渡)- 优化版
|
|
318
|
+
*
|
|
319
|
+
* ✨ 优化内容:
|
|
320
|
+
* - 支持多种缓动函数
|
|
321
|
+
* - 添加进度回调
|
|
322
|
+
* - 支持取消动画
|
|
323
|
+
* - WeakMap 跟踪防止泄漏
|
|
324
|
+
* - 完善错误处理
|
|
325
|
+
*/
|
|
326
|
+
declare function followModels(camera: THREE.Camera, targets: THREE.Object3D | THREE.Object3D[] | null | undefined, options?: FollowOptions): Promise<void>;
|
|
327
|
+
/**
|
|
328
|
+
* ✨ 取消相机的跟随动画
|
|
329
|
+
*/
|
|
330
|
+
declare function cancelFollow(camera: THREE.Camera): void;
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* 视角类型
|
|
334
|
+
*/
|
|
335
|
+
type ViewPosition = 'front' | 'back' | 'left' | 'right' | 'top' | 'bottom' | 'iso';
|
|
336
|
+
/**
|
|
337
|
+
* 视角配置选项
|
|
338
|
+
*/
|
|
339
|
+
interface SetViewOptions {
|
|
340
|
+
distanceFactor?: number;
|
|
341
|
+
duration?: number;
|
|
342
|
+
easing?: 'linear' | 'easeInOut' | 'easeOut' | 'easeIn';
|
|
343
|
+
onProgress?: (progress: number) => void;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 平滑切换相机到模型的最佳视角 - 优化版
|
|
347
|
+
*
|
|
348
|
+
* ✨ 优化内容:
|
|
349
|
+
* - 复用 followModels 逻辑,避免代码重复
|
|
350
|
+
* - 支持更多视角
|
|
351
|
+
* - 配置选项增强
|
|
352
|
+
* - 返回 Promise 支持链式调用
|
|
353
|
+
* - 支持取消动画
|
|
354
|
+
*
|
|
355
|
+
* @param camera THREE.PerspectiveCamera 相机实例
|
|
356
|
+
* @param controls OrbitControls 控制器实例
|
|
357
|
+
* @param targetObj THREE.Object3D 模型对象
|
|
358
|
+
* @param position 视角位置
|
|
359
|
+
* @param options 配置选项
|
|
360
|
+
* @returns Promise<void>
|
|
361
|
+
*/
|
|
362
|
+
declare function setView(camera: THREE.PerspectiveCamera, controls: OrbitControls, targetObj: THREE.Object3D, position?: ViewPosition, options?: SetViewOptions): Promise<void>;
|
|
363
|
+
/**
|
|
364
|
+
* ✨ 取消视角切换动画
|
|
365
|
+
*/
|
|
366
|
+
declare function cancelSetView(camera: THREE.PerspectiveCamera): void;
|
|
367
|
+
/**
|
|
368
|
+
* ✨ 预设视角快捷方法
|
|
369
|
+
*/
|
|
370
|
+
declare const ViewPresets: {
|
|
371
|
+
/**
|
|
372
|
+
* 前视图
|
|
373
|
+
*/
|
|
374
|
+
front: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
375
|
+
/**
|
|
376
|
+
* 等距视图
|
|
377
|
+
*/
|
|
378
|
+
isometric: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
379
|
+
/**
|
|
380
|
+
* 顶视图
|
|
381
|
+
*/
|
|
382
|
+
top: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
/** 加载参数:现在有默认值 */
|
|
386
|
+
interface LoadOptions {
|
|
387
|
+
manager?: THREE.LoadingManager;
|
|
388
|
+
dracoDecoderPath?: string | null;
|
|
389
|
+
ktx2TranscoderPath?: string | null;
|
|
390
|
+
useKTX2?: boolean;
|
|
391
|
+
mergeGeometries?: boolean;
|
|
392
|
+
maxTextureSize?: number | null;
|
|
393
|
+
useSimpleMaterials?: boolean;
|
|
394
|
+
skipSkinned?: boolean;
|
|
395
|
+
}
|
|
396
|
+
declare function loadModelByUrl(url: string, options?: LoadOptions): Promise<THREE.Object3D>;
|
|
397
|
+
/** 彻底释放对象:几何体,材质和其贴图(危险:共享资源会被释放) */
|
|
398
|
+
declare function disposeObject(obj: THREE.Object3D | null): void;
|
|
399
|
+
/** 释放材质及其贴图 */
|
|
400
|
+
declare function disposeMaterial(mat: any): void;
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Skybox 加载工具
|
|
404
|
+
*
|
|
405
|
+
* 支持:
|
|
406
|
+
* - 立方体贴图:paths: [px, nx, py, ny, pz, nz]
|
|
407
|
+
* - 等距 / HDR 全景:url: 'path/to/scene.hdr' 或 jpg
|
|
408
|
+
*
|
|
409
|
+
* 返回一个 SkyboxHandle,包含对 scene 的修改记录和 dispose() 方法。
|
|
410
|
+
*/
|
|
411
|
+
/** 统一返回句柄 */
|
|
412
|
+
type SkyboxHandle = {
|
|
413
|
+
key: string;
|
|
414
|
+
backgroundTexture: THREE.Texture | null;
|
|
415
|
+
envRenderTarget: THREE.WebGLRenderTarget | null;
|
|
416
|
+
pmremGenerator: THREE.PMREMGenerator | null;
|
|
417
|
+
setAsBackground: boolean;
|
|
418
|
+
setAsEnvironment: boolean;
|
|
419
|
+
/** 卸载并释放资源(如果是缓存共享,需要 refCount 逻辑) */
|
|
420
|
+
dispose: () => void;
|
|
421
|
+
};
|
|
422
|
+
/** 加载选项与默认值 */
|
|
423
|
+
interface SkyboxOptions {
|
|
424
|
+
setAsBackground?: boolean;
|
|
425
|
+
setAsEnvironment?: boolean;
|
|
426
|
+
pmremGenerator?: THREE.PMREMGenerator | null;
|
|
427
|
+
useSRGBEncoding?: boolean;
|
|
428
|
+
cache?: boolean;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* 加载立方体贴图(6张)
|
|
432
|
+
* @param renderer THREE.WebGLRenderer - 用于 PMREM 生成环境贴图
|
|
433
|
+
* @param scene THREE.Scene
|
|
434
|
+
* @param paths string[] 6 张图片地址,顺序:[px, nx, py, ny, pz, nz]
|
|
435
|
+
* @param opts SkyboxOptions
|
|
436
|
+
*/
|
|
437
|
+
declare function loadCubeSkybox(renderer: THREE.WebGLRenderer, scene: THREE.Scene, paths: string[], opts?: SkyboxOptions): Promise<SkyboxHandle>;
|
|
438
|
+
/**
|
|
439
|
+
* 加载等距/单图(支持 HDR via RGBELoader)
|
|
440
|
+
* @param renderer THREE.WebGLRenderer
|
|
441
|
+
* @param scene THREE.Scene
|
|
442
|
+
* @param url string - *.hdr, *.exr, *.jpg, *.png
|
|
443
|
+
* @param opts SkyboxOptions
|
|
444
|
+
*/
|
|
445
|
+
declare function loadEquirectSkybox(renderer: THREE.WebGLRenderer, scene: THREE.Scene, url: string, opts?: SkyboxOptions): Promise<SkyboxHandle>;
|
|
446
|
+
type LoadSkyboxParams = {
|
|
447
|
+
type: 'cube';
|
|
448
|
+
paths: string[];
|
|
449
|
+
} | {
|
|
450
|
+
type: 'equirect';
|
|
451
|
+
url: string;
|
|
452
|
+
};
|
|
453
|
+
declare function loadSkybox(renderer: THREE.WebGLRenderer, scene: THREE.Scene, params: LoadSkyboxParams, opts?: SkyboxOptions): Promise<SkyboxHandle>;
|
|
454
|
+
/** 释放一个缓存的 skybox(会减少 refCount,refCount=0 时才真正 dispose) */
|
|
455
|
+
declare function releaseSkybox(handle: SkyboxHandle): void;
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* 加载进度回调类型
|
|
459
|
+
*/
|
|
460
|
+
type LoadProgressCallback = (progress: number) => void;
|
|
461
|
+
/**
|
|
462
|
+
* 加载选项
|
|
463
|
+
*/
|
|
464
|
+
interface LoadSkyOptions {
|
|
465
|
+
background?: boolean;
|
|
466
|
+
onProgress?: LoadProgressCallback;
|
|
467
|
+
onComplete?: () => void;
|
|
468
|
+
onError?: (error: any) => void;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* BlueSkyManager - 优化版
|
|
472
|
+
* ---------------------------------------------------------
|
|
473
|
+
* 一个全局单例管理器,用于加载和管理基于 HDR/EXR 的蓝天白云环境贴图。
|
|
474
|
+
*
|
|
475
|
+
* ✨ 优化内容:
|
|
476
|
+
* - 添加加载进度回调
|
|
477
|
+
* - 支持加载取消
|
|
478
|
+
* - 完善错误处理
|
|
479
|
+
* - 返回 Promise 支持异步
|
|
480
|
+
* - 添加加载状态管理
|
|
481
|
+
*/
|
|
482
|
+
declare class BlueSkyManager {
|
|
483
|
+
/** three.js 渲染器实例 */
|
|
484
|
+
private renderer;
|
|
485
|
+
/** three.js 场景实例 */
|
|
486
|
+
private scene;
|
|
487
|
+
/** PMREM 生成器,用于将 HDR/EXR 转换为高效的反射贴图 */
|
|
488
|
+
private pmremGen;
|
|
489
|
+
/** 当前环境贴图的 RenderTarget,用于后续释放 */
|
|
490
|
+
private skyRT;
|
|
491
|
+
/** 是否已经初始化 */
|
|
492
|
+
private isInitialized;
|
|
493
|
+
/** ✨ 当前加载器,用于取消加载 */
|
|
494
|
+
private currentLoader;
|
|
495
|
+
/** ✨ 加载状态 */
|
|
496
|
+
private loadingState;
|
|
497
|
+
/**
|
|
498
|
+
* 初始化
|
|
499
|
+
* ---------------------------------------------------------
|
|
500
|
+
* 必须在使用 BlueSkyManager 之前调用一次。
|
|
501
|
+
* @param renderer WebGLRenderer 实例
|
|
502
|
+
* @param scene Three.js 场景
|
|
503
|
+
* @param exposure 曝光度 (默认 1.0)
|
|
504
|
+
*/
|
|
505
|
+
init(renderer: THREE.WebGLRenderer, scene: THREE.Scene, exposure?: number): void;
|
|
506
|
+
/**
|
|
507
|
+
* ✨ 加载蓝天 HDR/EXR 贴图并应用到场景(Promise 版本)
|
|
508
|
+
* ---------------------------------------------------------
|
|
509
|
+
* @param exrPath HDR/EXR 文件路径
|
|
510
|
+
* @param options 加载选项
|
|
511
|
+
* @returns Promise<void>
|
|
512
|
+
*/
|
|
513
|
+
loadAsync(exrPath: string, options?: LoadSkyOptions): Promise<void>;
|
|
514
|
+
/**
|
|
515
|
+
* 加载蓝天 HDR/EXR 贴图并应用到场景(同步 API,保持向后兼容)
|
|
516
|
+
* ---------------------------------------------------------
|
|
517
|
+
* @param exrPath HDR/EXR 文件路径
|
|
518
|
+
* @param background 是否应用为场景背景 (默认 true)
|
|
519
|
+
*/
|
|
520
|
+
load(exrPath: string, background?: boolean): void;
|
|
521
|
+
/**
|
|
522
|
+
* ✨ 取消当前加载
|
|
523
|
+
*/
|
|
524
|
+
cancelLoad(): void;
|
|
525
|
+
/**
|
|
526
|
+
* ✨ 获取加载状态
|
|
527
|
+
*/
|
|
528
|
+
getLoadingState(): 'idle' | 'loading' | 'loaded' | 'error';
|
|
529
|
+
/**
|
|
530
|
+
* ✨ 是否正在加载
|
|
531
|
+
*/
|
|
532
|
+
isLoading(): boolean;
|
|
533
|
+
/**
|
|
534
|
+
* 释放当前的天空贴图资源
|
|
535
|
+
* ---------------------------------------------------------
|
|
536
|
+
* 仅清理 skyRT,不销毁 PMREM
|
|
537
|
+
* 适用于切换 HDR/EXR 文件时调用
|
|
538
|
+
*/
|
|
539
|
+
dispose(): void;
|
|
540
|
+
/**
|
|
541
|
+
* 完全销毁 BlueSkyManager
|
|
542
|
+
* ---------------------------------------------------------
|
|
543
|
+
* 包括 PMREMGenerator 的销毁
|
|
544
|
+
* 通常在场景彻底销毁或应用退出时调用
|
|
545
|
+
*/
|
|
546
|
+
destroy(): void;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* 🌐 全局单例
|
|
550
|
+
* ---------------------------------------------------------
|
|
551
|
+
* 直接导出一个全局唯一的 BlueSkyManager 实例,
|
|
552
|
+
* 保证整个应用中只用一个 PMREMGenerator,性能最佳。
|
|
553
|
+
*/
|
|
554
|
+
declare const BlueSky: BlueSkyManager;
|
|
555
|
+
|
|
556
|
+
interface LabelOptions {
|
|
557
|
+
fontSize?: string;
|
|
558
|
+
color?: string;
|
|
559
|
+
background?: string;
|
|
560
|
+
padding?: string;
|
|
561
|
+
borderRadius?: string;
|
|
562
|
+
lift?: number;
|
|
563
|
+
dotSize?: number;
|
|
564
|
+
dotSpacing?: number;
|
|
565
|
+
lineColor?: string;
|
|
566
|
+
lineWidth?: number;
|
|
567
|
+
updateInterval?: number;
|
|
568
|
+
fadeInDuration?: number;
|
|
569
|
+
}
|
|
570
|
+
interface LabelManager {
|
|
571
|
+
updateModel: (model: THREE.Object3D) => void;
|
|
572
|
+
updateLabelsMap: (map: Record<string, string>) => void;
|
|
573
|
+
pause: () => void;
|
|
574
|
+
resume: () => void;
|
|
575
|
+
dispose: () => void;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* 创建模型标签(带连线和脉冲圆点)- 优化版
|
|
579
|
+
*
|
|
580
|
+
* ✨ 优化内容:
|
|
581
|
+
* - 支持暂停/恢复更新
|
|
582
|
+
* - 可配置更新间隔
|
|
583
|
+
* - 淡入淡出效果
|
|
584
|
+
* - 缓存包围盒计算
|
|
585
|
+
* - RAF 管理优化
|
|
586
|
+
*/
|
|
587
|
+
declare function createModelsLabel(camera: THREE.Camera, renderer: THREE.WebGLRenderer, parentModel: THREE.Object3D, modelLabelsMap: Record<string, string>, options?: LabelOptions): LabelManager;
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* GroupExploder - 基于 Three.js 的模型爆炸效果工具(支持 Vue3 + TS)
|
|
591
|
+
* ----------------------------------------------------------------------
|
|
592
|
+
* 该工具用于对指定 Mesh 的集合进行“爆炸 / 还原”动画:
|
|
593
|
+
* - 仅初始化一次(onMounted)
|
|
594
|
+
* - 支持动态切换模型并自动还原上一个模型的爆炸状态
|
|
595
|
+
* - 支持多种排列模式(ring / spiral / grid / radial)
|
|
596
|
+
* - 支持非爆炸对象自动透明化(dimOthers)
|
|
597
|
+
* - 支持摄像机自动前置定位到最佳观察点
|
|
598
|
+
* - 所有动画均采用原生 requestAnimationFrame 实现
|
|
599
|
+
*
|
|
600
|
+
* ----------------------------------------------------------------------
|
|
601
|
+
* 🔧 构造参数
|
|
602
|
+
* ----------------------------------------------------------------------
|
|
603
|
+
* @param scene Three.js 场景实例
|
|
604
|
+
* @param camera Three.js 相机(一般为 PerspectiveCamera)
|
|
605
|
+
* @param controls OrbitControls 控件实例(必须绑定 camera)
|
|
606
|
+
*
|
|
607
|
+
* ----------------------------------------------------------------------
|
|
608
|
+
* 🔥 爆炸参数 ExplodeOptions
|
|
609
|
+
* ----------------------------------------------------------------------
|
|
610
|
+
* 所有参数均可在 explode() 调用时指定,也可设置默认值。
|
|
611
|
+
*
|
|
612
|
+
* type ArrangeMode = 'ring' | 'spiral' | 'grid' | 'radial'
|
|
613
|
+
*
|
|
614
|
+
* @param mode?: ArrangeMode
|
|
615
|
+
* 爆炸排列方式:
|
|
616
|
+
* - 'ring' 环形排列(默认)
|
|
617
|
+
* - 'spiral' 螺旋上升排列
|
|
618
|
+
* - 'grid' 平面网格排列(规则整齐)
|
|
619
|
+
* - 'radial' 从中心点向外扩散
|
|
620
|
+
*
|
|
621
|
+
* @param spacing?: number
|
|
622
|
+
* 相邻爆炸对象之间的间距(默认:2.5)
|
|
623
|
+
*
|
|
624
|
+
* @param duration?: number
|
|
625
|
+
* 爆炸动画时长(ms),原生 rAF 完成(默认:1000)
|
|
626
|
+
*
|
|
627
|
+
* @param lift?: number
|
|
628
|
+
* 爆炸对象整体抬升的高度因子,用于让爆炸看起来更立体(默认:0.6)
|
|
629
|
+
*
|
|
630
|
+
* @param cameraPadding?: number
|
|
631
|
+
* 摄像机贴合爆炸后包围球时的额外安全距离(默认:1.2)
|
|
632
|
+
*
|
|
633
|
+
* @param autoRestorePrev?: boolean
|
|
634
|
+
* 当切换模型时,是否自动 restore 上一个模型的爆炸元素(默认:true)
|
|
635
|
+
*
|
|
636
|
+
* @param dimOthers?: { enabled: boolean; opacity?: number }
|
|
637
|
+
* 非爆炸对象透明化配置:
|
|
638
|
+
* - enabled: true 开启
|
|
639
|
+
* - opacity: number 指定非爆炸对象透明度(默认:0.15)
|
|
640
|
+
*
|
|
641
|
+
* @param debug?: boolean
|
|
642
|
+
* 是否开启调试日志,输出所有内部状态(默认 false)
|
|
643
|
+
*
|
|
644
|
+
*
|
|
645
|
+
* ----------------------------------------------------------------------
|
|
646
|
+
* 📌 方法说明
|
|
647
|
+
* ----------------------------------------------------------------------
|
|
648
|
+
*
|
|
649
|
+
* ◆ setMeshes(meshSet: Set<Mesh>, contextId?: string)
|
|
650
|
+
* 设置当前模型的爆炸 Mesh 集合:
|
|
651
|
+
* - 会记录 Mesh 的初始 transform
|
|
652
|
+
* - 根据 autoRestorePrev 自动还原上次爆炸
|
|
653
|
+
* - 第二个参数 contextId 可选,用于区分业务场景
|
|
654
|
+
*
|
|
655
|
+
*
|
|
656
|
+
* ◆ explode(options?: ExplodeOptions)
|
|
657
|
+
* 对当前 meshSet 执行爆炸动画:
|
|
658
|
+
* - 根据 mode 生成爆炸布局
|
|
659
|
+
* - 相机先自动飞向最佳观察点
|
|
660
|
+
* - 执行 mesh 位移动画
|
|
661
|
+
* - 按需将非爆炸模型透明化
|
|
662
|
+
*
|
|
663
|
+
*
|
|
664
|
+
* ◆ restore(duration?: number)
|
|
665
|
+
* 还原所有爆炸 Mesh 到爆炸前的 transform:
|
|
666
|
+
* - 支持平滑动画
|
|
667
|
+
* - 自动取消透明化
|
|
668
|
+
*
|
|
669
|
+
*
|
|
670
|
+
* ◆ dispose()
|
|
671
|
+
* 移除事件监听、取消动画、清理引用(在组件销毁时调用)
|
|
672
|
+
*
|
|
673
|
+
*
|
|
674
|
+
* ----------------------------------------------------------------------
|
|
675
|
+
* 🎨 排列模式说明
|
|
676
|
+
* ----------------------------------------------------------------------
|
|
677
|
+
*
|
|
678
|
+
* 1. Ring(环形)
|
|
679
|
+
* - 按圆均匀分布
|
|
680
|
+
* - spacing 控制半径
|
|
681
|
+
* - lift 控制整体抬起高度
|
|
682
|
+
*
|
|
683
|
+
* 2. Spiral(螺旋)
|
|
684
|
+
* - 在环形基础上添加高度递增(y++)
|
|
685
|
+
* - 数量大时视觉效果最强
|
|
686
|
+
*
|
|
687
|
+
* 3. Grid(网格)
|
|
688
|
+
* - 类似棋盘布局
|
|
689
|
+
* - spacing 控制网格大小
|
|
690
|
+
* - z 不变或小幅度变化
|
|
691
|
+
*
|
|
692
|
+
* 4. Radial(径向扩散)
|
|
693
|
+
* - 从中心向外 “爆炸式” 发散
|
|
694
|
+
* - 对于大型组件分解展示非常适合
|
|
695
|
+
*
|
|
696
|
+
*
|
|
697
|
+
* ----------------------------------------------------------------------
|
|
698
|
+
* 📌 使用示例(业务层 Vue)
|
|
699
|
+
* ----------------------------------------------------------------------
|
|
700
|
+
*
|
|
701
|
+
* const exploder = new GroupExploder(scene, camera, controls);
|
|
702
|
+
*
|
|
703
|
+
* onMounted(() => {
|
|
704
|
+
* exploder.setMeshes(new Set([meshA, meshB, meshC]));
|
|
705
|
+
* });
|
|
706
|
+
*
|
|
707
|
+
* const triggerExplode = () => {
|
|
708
|
+
* exploder.explode({
|
|
709
|
+
* mode: 'ring',
|
|
710
|
+
* spacing: 3,
|
|
711
|
+
* duration: 1200,
|
|
712
|
+
* lift: 0.8,
|
|
713
|
+
* cameraPadding: 1.3,
|
|
714
|
+
* dimOthers: { enabled: true, opacity: 0.2 },
|
|
715
|
+
* });
|
|
716
|
+
* };
|
|
717
|
+
*
|
|
718
|
+
* const triggerRestore = () => {
|
|
719
|
+
* exploder.restore(600);
|
|
720
|
+
* };
|
|
721
|
+
*
|
|
722
|
+
*/
|
|
723
|
+
|
|
724
|
+
type ArrangeMode = 'ring' | 'spiral' | 'grid' | 'radial';
|
|
725
|
+
type ExplodeOptions = {
|
|
726
|
+
mode?: ArrangeMode;
|
|
727
|
+
spacing?: number;
|
|
728
|
+
duration?: number;
|
|
729
|
+
lift?: number;
|
|
730
|
+
cameraPadding?: number;
|
|
731
|
+
autoRestorePrev?: boolean;
|
|
732
|
+
dimOthers?: {
|
|
733
|
+
enabled: boolean;
|
|
734
|
+
opacity?: number;
|
|
735
|
+
};
|
|
736
|
+
debug?: boolean;
|
|
737
|
+
};
|
|
738
|
+
declare class GroupExploder {
|
|
739
|
+
private scene;
|
|
740
|
+
private camera;
|
|
741
|
+
private controls?;
|
|
742
|
+
private currentSet;
|
|
743
|
+
private stateMap;
|
|
744
|
+
private prevSet;
|
|
745
|
+
private prevStateMap;
|
|
746
|
+
private materialContexts;
|
|
747
|
+
private materialSnaps;
|
|
748
|
+
private contextMaterials;
|
|
749
|
+
private animId;
|
|
750
|
+
private cameraAnimId;
|
|
751
|
+
private isExploded;
|
|
752
|
+
private isInitialized;
|
|
753
|
+
onLog?: (s: string) => void;
|
|
754
|
+
constructor(scene: THREE.Scene, camera: THREE.PerspectiveCamera | THREE.Camera, controls?: {
|
|
755
|
+
target?: THREE.Vector3;
|
|
756
|
+
update?: () => void;
|
|
757
|
+
});
|
|
758
|
+
private log;
|
|
759
|
+
init(): void;
|
|
760
|
+
/**
|
|
761
|
+
* setMeshes(newSet):
|
|
762
|
+
* - Detects content-level changes even if same Set reference is used.
|
|
763
|
+
* - Preserves prevSet/stateMap to allow async restore when needed.
|
|
764
|
+
* - Ensures stateMap contains snapshots for *all meshes in the new set*.
|
|
765
|
+
*/
|
|
766
|
+
setMeshes(newSet: Set<THREE.Mesh> | null, options?: {
|
|
767
|
+
autoRestorePrev?: boolean;
|
|
768
|
+
restoreDuration?: number;
|
|
769
|
+
}): Promise<void>;
|
|
770
|
+
/**
|
|
771
|
+
* ensureSnapshotsForSet: for each mesh in set, ensure stateMap has an entry.
|
|
772
|
+
* If missing, record current matrixWorld as originalMatrixWorld (best-effort).
|
|
773
|
+
*/
|
|
774
|
+
private ensureSnapshotsForSet;
|
|
775
|
+
/**
|
|
776
|
+
* explode: compute targets first, compute targetBound using targets + mesh radii,
|
|
777
|
+
* animate camera to that targetBound, then animate meshes to targets.
|
|
778
|
+
*/
|
|
779
|
+
explode(opts?: ExplodeOptions): Promise<void>;
|
|
780
|
+
restore(duration?: number): Promise<void>;
|
|
781
|
+
/**
|
|
782
|
+
* restoreSet: reparent and restore transforms using provided stateMap.
|
|
783
|
+
* If missing stateMap entry for a mesh, use fallbacks:
|
|
784
|
+
* 1) mesh.userData.__originalMatrixWorld (if present)
|
|
785
|
+
* 2) mesh.matrixWorld (current) -> smooth lerp to itself (no-op visually)
|
|
786
|
+
*/
|
|
787
|
+
private restoreSet;
|
|
788
|
+
private applyDimToOthers;
|
|
789
|
+
private cleanContextsForMeshes;
|
|
790
|
+
private computeBoundingSphereForMeshes;
|
|
791
|
+
private computeBoundingSphereForPositionsAndMeshes;
|
|
792
|
+
private computeTargetsByMode;
|
|
793
|
+
private animateCameraToFit;
|
|
794
|
+
private getCameraLookAtPoint;
|
|
795
|
+
private cancelAnimations;
|
|
796
|
+
dispose(restoreBefore?: boolean): Promise<void>;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
interface AutoSetupOptions {
|
|
800
|
+
/** 相机在包围球基础上的额外填充倍数(>1 扩大可视范围) */
|
|
801
|
+
padding?: number;
|
|
802
|
+
/** 相机仰角偏移(弧度),默认小俯视(0.2 rad ≈ 11°) */
|
|
803
|
+
elevation?: number;
|
|
804
|
+
/** 是否启用阴影(shadow) - 性能开销大,默认 false */
|
|
805
|
+
enableShadows?: boolean;
|
|
806
|
+
/** 阴影贴图尺寸,越高越清晰越耗性能,默认 1024 */
|
|
807
|
+
shadowMapSize?: number;
|
|
808
|
+
/** DirectionalLights 的数量(均匀分布在四面) */
|
|
809
|
+
directionalCount?: number;
|
|
810
|
+
/** 是否自动把 mesh.castShadow / mesh.receiveShadow 设置为 true(默认 true) */
|
|
811
|
+
setMeshShadowProps?: boolean;
|
|
812
|
+
/** 如果传入 renderer,则工具会自动启用 renderer.shadowMap(如果 enableShadows 为 true) */
|
|
813
|
+
renderer?: THREE.WebGLRenderer | null;
|
|
814
|
+
}
|
|
815
|
+
/**
|
|
816
|
+
* 返回值句柄,包含 created lights group、computed center/radius、以及 dispose 方法
|
|
817
|
+
*/
|
|
818
|
+
type AutoSetupHandle = {
|
|
819
|
+
lightsGroup: THREE.Group;
|
|
820
|
+
center: THREE.Vector3;
|
|
821
|
+
radius: number;
|
|
822
|
+
dispose: () => void;
|
|
823
|
+
updateLightIntensity: (factor: number) => void;
|
|
824
|
+
};
|
|
825
|
+
/**
|
|
826
|
+
* 自动设置相机与基础灯光 - 优化版
|
|
827
|
+
*
|
|
828
|
+
* ✨ 优化内容:
|
|
829
|
+
* - 添加灯光强度调整方法
|
|
830
|
+
* - 完善错误处理
|
|
831
|
+
* - 优化dispose逻辑
|
|
832
|
+
*
|
|
833
|
+
* - camera: THREE.PerspectiveCamera(会被移动并指向模型中心)
|
|
834
|
+
* - scene: THREE.Scene(会把新创建的 light group 加入 scene)
|
|
835
|
+
* - model: THREE.Object3D 已加载的模型(任意 transform/坐标)
|
|
836
|
+
* - options: 可选配置(见 AutoSetupOptions)
|
|
837
|
+
*
|
|
838
|
+
* 返回 AutoSetupHandle,调用方在组件卸载/切换时请调用 handle.dispose()
|
|
839
|
+
*/
|
|
840
|
+
declare function autoSetupCameraAndLight(camera: THREE.PerspectiveCamera, scene: THREE.Scene, model: THREE.Object3D, options?: AutoSetupOptions): AutoSetupHandle;
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* three-model-render
|
|
844
|
+
* Professional Three.js Model Visualization and Interaction Toolkit
|
|
845
|
+
*
|
|
846
|
+
* @packageDocumentation
|
|
847
|
+
*/
|
|
848
|
+
|
|
849
|
+
declare const VERSION = "1.0.0";
|
|
850
|
+
|
|
851
|
+
export { ArrowGuide, BlueSky, FOLLOW_ANGLES, GroupExploder, LiquidFillerGroup, VERSION, ViewPresets, addChildModelLabels, autoSetupCameraAndLight, cancelFollow, cancelSetView, createModelClickHandler, createModelsLabel, disposeMaterial, disposeObject, enableHoverBreath, followModels, initPostProcessing, loadCubeSkybox, loadEquirectSkybox, loadModelByUrl, loadSkybox, releaseSkybox, setView };
|
|
852
|
+
export type { AutoSetupHandle, AutoSetupOptions, ClickHandlerOptions, ExplodeOptions, FilterFn, FollowOptions, HoverBreathOptions, LiquidFillerOptions, LoadOptions, LoadProgressCallback, LoadSkyOptions, LoadSkyboxParams, PostProcessingManager, PostProcessingOptions, SetViewOptions, SkyboxHandle, SkyboxOptions, ViewPosition };
|