@chocozhang/three-model-render 1.0.3 → 1.0.5

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 (43) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +134 -97
  3. package/dist/camera/index.d.ts +59 -36
  4. package/dist/camera/index.js +83 -67
  5. package/dist/camera/index.js.map +1 -1
  6. package/dist/camera/index.mjs +83 -67
  7. package/dist/camera/index.mjs.map +1 -1
  8. package/dist/core/index.d.ts +81 -28
  9. package/dist/core/index.js +194 -104
  10. package/dist/core/index.js.map +1 -1
  11. package/dist/core/index.mjs +194 -105
  12. package/dist/core/index.mjs.map +1 -1
  13. package/dist/effect/index.d.ts +47 -134
  14. package/dist/effect/index.js +287 -288
  15. package/dist/effect/index.js.map +1 -1
  16. package/dist/effect/index.mjs +287 -288
  17. package/dist/effect/index.mjs.map +1 -1
  18. package/dist/index.d.ts +432 -349
  19. package/dist/index.js +1399 -1228
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +1395 -1229
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/interaction/index.d.ts +85 -52
  24. package/dist/interaction/index.js +168 -142
  25. package/dist/interaction/index.js.map +1 -1
  26. package/dist/interaction/index.mjs +168 -142
  27. package/dist/interaction/index.mjs.map +1 -1
  28. package/dist/loader/index.d.ts +106 -58
  29. package/dist/loader/index.js +492 -454
  30. package/dist/loader/index.js.map +1 -1
  31. package/dist/loader/index.mjs +491 -455
  32. package/dist/loader/index.mjs.map +1 -1
  33. package/dist/setup/index.d.ts +26 -24
  34. package/dist/setup/index.js +125 -163
  35. package/dist/setup/index.js.map +1 -1
  36. package/dist/setup/index.mjs +124 -164
  37. package/dist/setup/index.mjs.map +1 -1
  38. package/dist/ui/index.d.ts +18 -7
  39. package/dist/ui/index.js +45 -37
  40. package/dist/ui/index.js.map +1 -1
  41. package/dist/ui/index.mjs +45 -37
  42. package/dist/ui/index.mjs.map +1 -1
  43. package/package.json +50 -22
@@ -27,25 +27,35 @@ function _interopNamespaceDefault(e) {
27
27
  var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
28
28
 
29
29
  /**
30
- * 给子模型添加头顶标签(支持 Mesh 和 Group)- 优化版
30
+ * @file labelManager.ts
31
+ * @description
32
+ * Manages HTML labels attached to 3D objects. Efficiently updates label positions based on camera movement.
31
33
  *
32
- * ✨ 性能优化:
33
- * - 缓存包围盒,避免每帧重复计算
34
- * - 支持暂停/恢复更新
35
- * - 可配置更新间隔,降低 CPU 占用
36
- * - 只在可见时更新,隐藏时自动暂停
34
+ * @best-practice
35
+ * - Use `addChildModelLabels` to label parts of a loaded model.
36
+ * - Labels are HTML elements overlaid on the canvas.
37
+ * - Supports performance optimization via caching and visibility culling.
38
+ */
39
+ /**
40
+ * Add overhead labels to child models (supports Mesh and Group)
37
41
  *
38
- * @param camera THREE.Camera - 场景摄像机
39
- * @param renderer THREE.WebGLRenderer - 渲染器,用于屏幕尺寸
40
- * @param parentModel THREE.Object3D - FBX 根节点或 Group
41
- * @param modelLabelsMap Record<string,string> - 模型 name 标签文字 映射表
42
- * @param options LabelOptions - 可选标签样式配置
43
- * @returns LabelManager - 包含 pause/resume/dispose 的管理接口
42
+ * Features:
43
+ * - Caches bounding boxes to avoid repetitive calculation every frame
44
+ * - Supports pause/resume
45
+ * - Configurable update interval to reduce CPU usage
46
+ * - Automatically pauses when hidden
47
+ *
48
+ * @param camera THREE.Camera - Scene camera
49
+ * @param renderer THREE.WebGLRenderer - Renderer, used for screen size
50
+ * @param parentModel THREE.Object3D - FBX root node or Group
51
+ * @param modelLabelsMap Record<string,string> - Map of model name to label text
52
+ * @param options LabelOptions - Optional label style configuration
53
+ * @returns LabelManager - Management interface containing pause/resume/dispose
44
54
  */
45
55
  function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, options) {
46
- // 防御性检查:确保 parentModel 已加载
56
+ // Defensive check: ensure parentModel is loaded
47
57
  if (!parentModel || typeof parentModel.traverse !== 'function') {
48
- console.error('parentModel 无效,请确保 FBX 模型已加载完成');
58
+ console.error('parentModel invalid, please ensure the FBX model is loaded');
49
59
  return {
50
60
  pause: () => { },
51
61
  resume: () => { },
@@ -53,48 +63,47 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
53
63
  isRunning: () => false
54
64
  };
55
65
  }
56
- // 配置项
57
- const enableCache = (options === null || options === void 0 ? void 0 : options.enableCache) !== false;
58
- const updateInterval = (options === null || options === void 0 ? void 0 : options.updateInterval) || 0;
59
- // 创建标签容器,绝对定位,放在 body
66
+ // Configuration
67
+ const enableCache = options?.enableCache !== false;
68
+ const updateInterval = options?.updateInterval || 0;
69
+ // Create label container, absolute positioning, attached to body
60
70
  const container = document.createElement('div');
61
71
  container.style.position = 'absolute';
62
72
  container.style.top = '0';
63
73
  container.style.left = '0';
64
- container.style.pointerEvents = 'none'; // 避免阻挡鼠标事件
74
+ container.style.pointerEvents = 'none'; // Avoid blocking mouse events
65
75
  container.style.zIndex = '1000';
66
76
  document.body.appendChild(container);
67
77
  const labels = [];
68
- // 状态管理
78
+ // State management
69
79
  let rafId = null;
70
80
  let isPaused = false;
71
81
  let lastUpdateTime = 0;
72
- // 遍历所有子模型
82
+ // Traverse all child models
73
83
  parentModel.traverse((child) => {
74
- var _a;
75
- // 只处理 Mesh 或 Group
84
+ // Only process Mesh or Group
76
85
  if ((child.isMesh || child.type === 'Group')) {
77
- // 动态匹配 name,防止 undefined
78
- const labelText = (_a = Object.entries(modelLabelsMap).find(([key]) => child.name.includes(key))) === null || _a === void 0 ? void 0 : _a[1];
86
+ // Dynamic matching of name to prevent undefined
87
+ const labelText = Object.entries(modelLabelsMap).find(([key]) => child.name.includes(key))?.[1];
79
88
  if (!labelText)
80
- return; // 没有匹配标签则跳过
81
- // 创建 DOM 标签
89
+ return; // Skip if no matching label
90
+ // Create DOM label
82
91
  const el = document.createElement('div');
83
92
  el.innerText = labelText;
84
- // 样式直接在 JS 中定义,可通过 options 覆盖
93
+ // Styles defined in JS, can be overridden via options
85
94
  el.style.position = 'absolute';
86
- el.style.color = (options === null || options === void 0 ? void 0 : options.color) || '#fff';
87
- el.style.background = (options === null || options === void 0 ? void 0 : options.background) || 'rgba(0,0,0,0.6)';
88
- el.style.padding = (options === null || options === void 0 ? void 0 : options.padding) || '4px 8px';
89
- el.style.borderRadius = (options === null || options === void 0 ? void 0 : options.borderRadius) || '4px';
90
- el.style.fontSize = (options === null || options === void 0 ? void 0 : options.fontSize) || '14px';
91
- el.style.transform = 'translate(-50%, -100%)'; // 让标签在模型正上方
95
+ el.style.color = options?.color || '#fff';
96
+ el.style.background = options?.background || 'rgba(0,0,0,0.6)';
97
+ el.style.padding = options?.padding || '4px 8px';
98
+ el.style.borderRadius = options?.borderRadius || '4px';
99
+ el.style.fontSize = options?.fontSize || '14px';
100
+ el.style.transform = 'translate(-50%, -100%)'; // Position label directly above the model
92
101
  el.style.whiteSpace = 'nowrap';
93
102
  el.style.pointerEvents = 'none';
94
103
  el.style.transition = 'opacity 0.2s ease';
95
- // 加入容器
104
+ // Append to container
96
105
  container.appendChild(el);
97
- // 初始化缓存
106
+ // Initialize cache
98
107
  const cachedBox = new THREE__namespace.Box3().setFromObject(child);
99
108
  const center = new THREE__namespace.Vector3();
100
109
  cachedBox.getCenter(center);
@@ -109,7 +118,7 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
109
118
  }
110
119
  });
111
120
  /**
112
- * 更新缓存的包围盒(仅在模型变换时调用)
121
+ * Update cached bounding box (called only when model transforms)
113
122
  */
114
123
  const updateCache = (labelData) => {
115
124
  labelData.cachedBox.setFromObject(labelData.object);
@@ -119,18 +128,18 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
119
128
  labelData.needsUpdate = false;
120
129
  };
121
130
  /**
122
- * 获取对象顶部世界坐标(使用缓存)
131
+ * Get object top world coordinates (using cache)
123
132
  */
124
133
  const getObjectTopPosition = (labelData) => {
125
134
  if (enableCache) {
126
- // 检查对象是否发生变换
135
+ // Check if object has transformed
127
136
  if (labelData.needsUpdate || labelData.object.matrixWorldNeedsUpdate) {
128
137
  updateCache(labelData);
129
138
  }
130
139
  return labelData.cachedTopPos;
131
140
  }
132
141
  else {
133
- // 不使用缓存,每次都重新计算
142
+ // Do not use cache, recalculate every time
134
143
  const box = new THREE__namespace.Box3().setFromObject(labelData.object);
135
144
  const center = new THREE__namespace.Vector3();
136
145
  box.getCenter(center);
@@ -138,15 +147,15 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
138
147
  }
139
148
  };
140
149
  /**
141
- * 更新标签位置函数
150
+ * Update label positions function
142
151
  */
143
152
  function updateLabels(timestamp = 0) {
144
- // 检查是否暂停
153
+ // Check pause state
145
154
  if (isPaused) {
146
155
  rafId = null;
147
156
  return;
148
157
  }
149
- // 检查更新间隔
158
+ // Check update interval
150
159
  if (updateInterval > 0 && timestamp - lastUpdateTime < updateInterval) {
151
160
  rafId = requestAnimationFrame(updateLabels);
152
161
  return;
@@ -156,22 +165,22 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
156
165
  const height = renderer.domElement.clientHeight;
157
166
  labels.forEach((labelData) => {
158
167
  const { el } = labelData;
159
- const pos = getObjectTopPosition(labelData); // 使用缓存的顶部坐标
160
- pos.project(camera); // 转到屏幕坐标
161
- const x = (pos.x * 0.5 + 0.5) * width; // 屏幕 X
162
- const y = (-(pos.y * 0.5) + 0.5) * height; // 屏幕 Y
163
- // 控制标签显示/隐藏(摄像机后方隐藏)
168
+ const pos = getObjectTopPosition(labelData); // Use cached top position
169
+ pos.project(camera); // Convert to screen coordinates
170
+ const x = (pos.x * 0.5 + 0.5) * width; // Screen X
171
+ const y = (-(pos.y * 0.5) + 0.5) * height; // Screen Y
172
+ // Control label visibility (hidden when behind camera)
164
173
  const isVisible = pos.z < 1;
165
174
  el.style.opacity = isVisible ? '1' : '0';
166
175
  el.style.display = isVisible ? 'block' : 'none';
167
- el.style.transform = `translate(-50%, -100%) translate(${x}px, ${y}px)`; // 屏幕位置
176
+ el.style.transform = `translate(-50%, -100%) translate(${x}px, ${y}px)`; // Screen position
168
177
  });
169
- rafId = requestAnimationFrame(updateLabels); // 循环更新
178
+ rafId = requestAnimationFrame(updateLabels); // Loop update
170
179
  }
171
- // 启动更新
180
+ // Start update
172
181
  updateLabels();
173
182
  /**
174
- * 暂停更新
183
+ * Pause updates
175
184
  */
176
185
  const pause = () => {
177
186
  isPaused = true;
@@ -181,7 +190,7 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
181
190
  }
182
191
  };
183
192
  /**
184
- * 恢复更新
193
+ * Resume updates
185
194
  */
186
195
  const resume = () => {
187
196
  if (!isPaused)
@@ -190,11 +199,11 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
190
199
  updateLabels();
191
200
  };
192
201
  /**
193
- * 检查是否正在运行
202
+ * Check if running
194
203
  */
195
204
  const isRunning = () => !isPaused;
196
205
  /**
197
- * 清理函数:卸载所有 DOM 标签,取消动画,避免内存泄漏
206
+ * Cleanup function: Remove all DOM labels, cancel animation, avoid memory leaks
198
207
  */
199
208
  const dispose = () => {
200
209
  pause();
@@ -216,36 +225,45 @@ function addChildModelLabels(camera, renderer, parentModel, modelLabelsMap, opti
216
225
  };
217
226
  }
218
227
 
219
- // src/utils/hoverBreathEffectByNameSingleton.ts
220
228
  /**
221
- * 创建单例高亮器 —— 推荐在 mounted 时创建一次
222
- * 返回 { updateHighlightNames, dispose, getHoveredName } 接口
229
+ * @file hoverEffect.ts
230
+ * @description
231
+ * Singleton highlight effect manager. Uses OutlinePass to create a breathing highlight effect on hovered objects.
232
+ *
233
+ * @best-practice
234
+ * - Initialize once in your setup/mounted hook.
235
+ * - Call `updateHighlightNames` to filter which objects are interactive.
236
+ * - Automatically handles mousemove throttling and cleanup on dispose.
237
+ */
238
+ /**
239
+ * Create a singleton highlighter - Recommended to create once on mount
240
+ * Returns { updateHighlightNames, dispose, getHoveredName } interface
223
241
  *
224
- * ✨ 性能优化:
225
- * - hover 对象时自动暂停动画
226
- * - mousemove 节流处理,避免过度计算
227
- * - 使用 passive 事件监听器提升滚动性能
242
+ * Features:
243
+ * - Automatically pauses animation when no object is hovered
244
+ * - Throttles mousemove events to avoid excessive calculation
245
+ * - Uses passive event listeners to improve scrolling performance
228
246
  */
229
247
  function enableHoverBreath(opts) {
230
- const { camera, scene, renderer, outlinePass, highlightNames = null, minStrength = 2, maxStrength = 5, speed = 4, throttleDelay = 16, // 默认约 60fps
248
+ const { camera, scene, renderer, outlinePass, highlightNames = null, minStrength = 2, maxStrength = 5, speed = 4, throttleDelay = 16, // Default ~60fps
231
249
  } = opts;
232
250
  const raycaster = new THREE__namespace.Raycaster();
233
251
  const mouse = new THREE__namespace.Vector2();
234
252
  let hovered = null;
235
253
  let time = 0;
236
254
  let animationId = null;
237
- // highlightSet: null 表示 all; empty Set 表示 none
255
+ // highlightSet: null means all; empty Set means none
238
256
  let highlightSet = highlightNames === null ? null : new Set(highlightNames);
239
- // 节流相关
257
+ // Throttling related
240
258
  let lastMoveTime = 0;
241
259
  let rafPending = false;
242
260
  function setHighlightNames(names) {
243
261
  highlightSet = names === null ? null : new Set(names);
244
- // 如果当前 hovered 不在新名单中,及时清理 selection
262
+ // If current hovered object is not in the new list, clean up selection immediately
245
263
  if (hovered && highlightSet && !highlightSet.has(hovered.name)) {
246
264
  hovered = null;
247
265
  outlinePass.selectedObjects = [];
248
- // 暂停动画
266
+ // Pause animation
249
267
  if (animationId !== null) {
250
268
  cancelAnimationFrame(animationId);
251
269
  animationId = null;
@@ -253,13 +271,13 @@ function enableHoverBreath(opts) {
253
271
  }
254
272
  }
255
273
  /**
256
- * 节流版本的 mousemove 处理
274
+ * Throttled mousemove handler
257
275
  */
258
276
  function onMouseMove(ev) {
259
277
  const now = performance.now();
260
- // 节流:如果距上次处理时间小于阈值,跳过
278
+ // Throttle: if time since last process is less than threshold, skip
261
279
  if (now - lastMoveTime < throttleDelay) {
262
- // 使用 RAF 延迟处理,避免丢失最后一次事件
280
+ // Use RAF to process the latest event later, ensuring the last event isn't lost
263
281
  if (!rafPending) {
264
282
  rafPending = true;
265
283
  requestAnimationFrame(() => {
@@ -273,24 +291,24 @@ function enableHoverBreath(opts) {
273
291
  processMouseMove(ev);
274
292
  }
275
293
  /**
276
- * 实际的 mousemove 逻辑
294
+ * Actual mousemove logic
277
295
  */
278
296
  function processMouseMove(ev) {
279
297
  const rect = renderer.domElement.getBoundingClientRect();
280
298
  mouse.x = ((ev.clientX - rect.left) / rect.width) * 2 - 1;
281
299
  mouse.y = -((ev.clientY - rect.top) / rect.height) * 2 + 1;
282
300
  raycaster.setFromCamera(mouse, camera);
283
- // 深度检测 scene 的所有子对象(true
301
+ // Deep detect all children of the scene (true)
284
302
  const intersects = raycaster.intersectObjects(scene.children, true);
285
303
  if (intersects.length > 0) {
286
304
  const obj = intersects[0].object;
287
- // 判断是否允许被高亮
305
+ // Determine if it is allowed to be highlighted
288
306
  const allowed = highlightSet === null ? true : highlightSet.has(obj.name);
289
307
  if (allowed) {
290
308
  if (hovered !== obj) {
291
309
  hovered = obj;
292
310
  outlinePass.selectedObjects = [obj];
293
- // 启动动画(如果未运行)
311
+ // Start animation (if not running)
294
312
  if (animationId === null) {
295
313
  animate();
296
314
  }
@@ -300,7 +318,7 @@ function enableHoverBreath(opts) {
300
318
  if (hovered !== null) {
301
319
  hovered = null;
302
320
  outlinePass.selectedObjects = [];
303
- // 停止动画
321
+ // Stop animation
304
322
  if (animationId !== null) {
305
323
  cancelAnimationFrame(animationId);
306
324
  animationId = null;
@@ -312,7 +330,7 @@ function enableHoverBreath(opts) {
312
330
  if (hovered !== null) {
313
331
  hovered = null;
314
332
  outlinePass.selectedObjects = [];
315
- // 停止动画
333
+ // Stop animation
316
334
  if (animationId !== null) {
317
335
  cancelAnimationFrame(animationId);
318
336
  animationId = null;
@@ -321,10 +339,10 @@ function enableHoverBreath(opts) {
321
339
  }
322
340
  }
323
341
  /**
324
- * 动画循环 - 只在有 hovered 对象时运行
342
+ * Animation loop - only runs when there is a hovered object
325
343
  */
326
344
  function animate() {
327
- // 如果没有 hovered 对象,停止动画
345
+ // If no hovered object, stop animation
328
346
  if (!hovered) {
329
347
  animationId = null;
330
348
  return;
@@ -334,11 +352,11 @@ function enableHoverBreath(opts) {
334
352
  const strength = minStrength + ((Math.sin(time) + 1) / 2) * (maxStrength - minStrength);
335
353
  outlinePass.edgeStrength = strength;
336
354
  }
337
- // 启动(只调用一次)
338
- // 使用 passive 提升滚动性能
355
+ // Start (called only once)
356
+ // Use passive to improve scrolling performance
339
357
  renderer.domElement.addEventListener('mousemove', onMouseMove, { passive: true });
340
- // 注意:不在这里启动 animate,等有 hover 对象时再启动
341
- // refresh: 如果你在某些情况下需要强制清理 selectedObjects
358
+ // Note: Do not start animate here, wait until there is a hover object
359
+ // refresh: Forcibly clean up selectedObjects if needed
342
360
  function refreshSelection() {
343
361
  if (hovered && highlightSet && !highlightSet.has(hovered.name)) {
344
362
  hovered = null;
@@ -359,7 +377,7 @@ function enableHoverBreath(opts) {
359
377
  animationId = null;
360
378
  }
361
379
  outlinePass.selectedObjects = [];
362
- // 清空引用
380
+ // Clear references
363
381
  hovered = null;
364
382
  highlightSet = null;
365
383
  }
@@ -372,23 +390,33 @@ function enableHoverBreath(opts) {
372
390
  }
373
391
 
374
392
  /**
375
- * 初始化描边相关信息(包含 OutlinePass)- 优化版
393
+ * @file postProcessing.ts
394
+ * @description
395
+ * Manages the post-processing chain, specifically for Outline effects and Gamma correction.
376
396
  *
377
- * ✨ 功能增强:
378
- * - 支持窗口 resize 自动更新
379
- * - 可配置分辨率缩放提升性能
380
- * - 完善的资源释放管理
397
+ * @best-practice
398
+ * - call `initPostProcessing` after creating your renderer and scene.
399
+ * - Use the returned `composer` in your render loop instead of `renderer.render`.
400
+ * - Handles resizing automatically via the `resize` method.
401
+ */
402
+ /**
403
+ * Initialize outline-related information (contains OutlinePass)
404
+ *
405
+ * Capabilities:
406
+ * - Supports automatic update on window resize
407
+ * - Configurable resolution scale for performance improvement
408
+ * - Comprehensive resource disposal management
381
409
  *
382
410
  * @param renderer THREE.WebGLRenderer
383
411
  * @param scene THREE.Scene
384
412
  * @param camera THREE.Camera
385
- * @param options PostProcessingOptions - 可选配置
386
- * @returns PostProcessingManager - 包含 composer/outlinePass/resize/dispose 的管理接口
413
+ * @param options PostProcessingOptions - Optional configuration
414
+ * @returns PostProcessingManager - Management interface containing composer/outlinePass/resize/dispose
387
415
  */
388
416
  function initPostProcessing(renderer, scene, camera, options = {}) {
389
- // 默认配置
417
+ // Default configuration
390
418
  const { edgeStrength = 4, edgeGlow = 1, edgeThickness = 2, visibleEdgeColor = '#ffee00', hiddenEdgeColor = '#000000', resolutionScale = 1.0 } = options;
391
- // 获取渲染器实际尺寸
419
+ // Get renderer actual size
392
420
  const getSize = () => {
393
421
  const width = renderer.domElement.clientWidth;
394
422
  const height = renderer.domElement.clientHeight;
@@ -398,12 +426,12 @@ function initPostProcessing(renderer, scene, camera, options = {}) {
398
426
  };
399
427
  };
400
428
  const size = getSize();
401
- // 创建 EffectComposer
429
+ // Create EffectComposer
402
430
  const composer = new EffectComposer.EffectComposer(renderer);
403
- // 基础 RenderPass
431
+ // Basic RenderPass
404
432
  const renderPass = new RenderPass.RenderPass(scene, camera);
405
433
  composer.addPass(renderPass);
406
- // OutlinePass 用于模型描边
434
+ // OutlinePass for model outlining
407
435
  const outlinePass = new OutlinePass.OutlinePass(new THREE__namespace.Vector2(size.width, size.height), scene, camera);
408
436
  outlinePass.edgeStrength = edgeStrength;
409
437
  outlinePass.edgeGlow = edgeGlow;
@@ -411,34 +439,34 @@ function initPostProcessing(renderer, scene, camera, options = {}) {
411
439
  outlinePass.visibleEdgeColor.set(visibleEdgeColor);
412
440
  outlinePass.hiddenEdgeColor.set(hiddenEdgeColor);
413
441
  composer.addPass(outlinePass);
414
- // Gamma 校正
442
+ // Gamma correction
415
443
  const gammaPass = new ShaderPass.ShaderPass(GammaCorrectionShader.GammaCorrectionShader);
416
444
  composer.addPass(gammaPass);
417
445
  /**
418
- * resize 处理函数
419
- * @param width 可选宽度,不传则使用 renderer.domElement 的实际宽度
420
- * @param height 可选高度,不传则使用 renderer.domElement 的实际高度
446
+ * Handle resize
447
+ * @param width Optional width, uses renderer.domElement actual width if not provided
448
+ * @param height Optional height, uses renderer.domElement actual height if not provided
421
449
  */
422
450
  const resize = (width, height) => {
423
451
  const actualSize = width !== undefined && height !== undefined
424
452
  ? { width: Math.floor(width * resolutionScale), height: Math.floor(height * resolutionScale) }
425
453
  : getSize();
426
- // 更新 composer 尺寸
454
+ // Update composer size
427
455
  composer.setSize(actualSize.width, actualSize.height);
428
- // 更新 outlinePass 分辨率
456
+ // Update outlinePass resolution
429
457
  outlinePass.resolution.set(actualSize.width, actualSize.height);
430
458
  };
431
459
  /**
432
- * 释放资源
460
+ * Dispose resources
433
461
  */
434
462
  const dispose = () => {
435
- // 释放所有 passes
463
+ // Dipose all passes
436
464
  composer.passes.forEach(pass => {
437
465
  if (pass.dispose) {
438
466
  pass.dispose();
439
467
  }
440
468
  });
441
- // 清空 passes 数组
469
+ // Clear passes array
442
470
  composer.passes.length = 0;
443
471
  };
444
472
  return {
@@ -449,6 +477,68 @@ function initPostProcessing(renderer, scene, camera, options = {}) {
449
477
  };
450
478
  }
451
479
 
480
+ /**
481
+ * ResourceManager
482
+ * Handles tracking and disposal of Three.js objects to prevent memory leaks.
483
+ */
484
+ class ResourceManager {
485
+ constructor() {
486
+ this.geometries = new Set();
487
+ this.materials = new Set();
488
+ this.textures = new Set();
489
+ this.objects = new Set();
490
+ }
491
+ /**
492
+ * Track an object and its resources recursively
493
+ */
494
+ track(object) {
495
+ this.objects.add(object);
496
+ object.traverse((child) => {
497
+ if (child.isMesh) {
498
+ const mesh = child;
499
+ if (mesh.geometry)
500
+ this.geometries.add(mesh.geometry);
501
+ if (mesh.material) {
502
+ if (Array.isArray(mesh.material)) {
503
+ mesh.material.forEach(m => this.trackMaterial(m));
504
+ }
505
+ else {
506
+ this.trackMaterial(mesh.material);
507
+ }
508
+ }
509
+ }
510
+ });
511
+ return object;
512
+ }
513
+ trackMaterial(material) {
514
+ this.materials.add(material);
515
+ // Track textures in material
516
+ for (const value of Object.values(material)) {
517
+ if (value instanceof THREE__namespace.Texture) {
518
+ this.textures.add(value);
519
+ }
520
+ }
521
+ }
522
+ /**
523
+ * Dispose all tracked resources
524
+ */
525
+ dispose() {
526
+ this.geometries.forEach(g => g.dispose());
527
+ this.materials.forEach(m => m.dispose());
528
+ this.textures.forEach(t => t.dispose());
529
+ this.objects.forEach(obj => {
530
+ if (obj.parent) {
531
+ obj.parent.remove(obj);
532
+ }
533
+ });
534
+ this.geometries.clear();
535
+ this.materials.clear();
536
+ this.textures.clear();
537
+ this.objects.clear();
538
+ }
539
+ }
540
+
541
+ exports.ResourceManager = ResourceManager;
452
542
  exports.addChildModelLabels = addChildModelLabels;
453
543
  exports.enableHoverBreath = enableHoverBreath;
454
544
  exports.initPostProcessing = initPostProcessing;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/core/labelManager.ts","../../src/core/hoverEffect.ts","../../src/core/postProcessing.ts"],"sourcesContent":[null,null,null],"names":["THREE","EffectComposer","RenderPass","OutlinePass","ShaderPass","GammaCorrectionShader"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/core/labelManager.ts","../../src/core/hoverEffect.ts","../../src/core/postProcessing.ts","../../src/core/resourceManager.ts"],"sourcesContent":[null,null,null,null],"names":["THREE","EffectComposer","RenderPass","OutlinePass","ShaderPass","GammaCorrectionShader"],"mappings":"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"}