@ridp/threejs 1.4.2 → 1.4.4
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 → README.md} +228 -26
- package/dist/ImageLoader-CMAmH-92.js +1444 -0
- package/dist/ImageLoader-y6-Adf1b.cjs +24 -0
- package/dist/PredictiveLoader-BXCwkdSX.cjs +2 -0
- package/dist/PredictiveLoader-eiPgVdsJ.js +3832 -0
- package/dist/assets/{gltfParser.worker-Bqz8BBJx.js → gltfParser.worker-D2lwod50.js} +2 -2
- package/dist/assets/{gltfParserOptimized.worker-DfipxPjm.js → gltfParserOptimized.worker-FT73rIOj.js} +2 -2
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.js +9 -12
- package/dist/{packages/threejs/src/utils/modelOptimizer.js → modelOptimizer-D6fRg-DF.js} +1 -1
- package/dist/threejs.cjs +3 -1
- package/dist/threejs.js +428 -58
- package/dist/useBatchGLTFLoader-D3gPYO-K.cjs +5 -0
- package/dist/useBatchGLTFLoader-DP_NdYhC.js +493 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +32 -40
- package/package.json +1 -1
- package/dist/packages/threejs/package.json.cjs +0 -1
- package/dist/packages/threejs/package.json.js +0 -4
- package/dist/packages/threejs/src/hooks/useBatchGLTFLoader.cjs +0 -1
- package/dist/packages/threejs/src/hooks/useBatchGLTFLoader.js +0 -83
- package/dist/packages/threejs/src/hooks/useGLTFLoader.cjs +0 -1
- package/dist/packages/threejs/src/hooks/useGLTFLoader.js +0 -292
- package/dist/packages/threejs/src/hooks/useObb.cjs +0 -1
- package/dist/packages/threejs/src/hooks/useObb.js +0 -41
- package/dist/packages/threejs/src/hooks/useRaycaster.cjs +0 -1
- package/dist/packages/threejs/src/hooks/useRaycaster.js +0 -35
- package/dist/packages/threejs/src/hooks/useThreeJs.cjs +0 -5
- package/dist/packages/threejs/src/hooks/useThreeJs.js +0 -153
- package/dist/packages/threejs/src/instance/IDBCache.cjs +0 -1
- package/dist/packages/threejs/src/instance/IDBCache.js +0 -142
- package/dist/packages/threejs/src/instance/threeIns.cjs +0 -3
- package/dist/packages/threejs/src/instance/threeIns.js +0 -369
- package/dist/packages/threejs/src/utils/CacheMonitor.cjs +0 -1
- package/dist/packages/threejs/src/utils/CacheMonitor.js +0 -125
- package/dist/packages/threejs/src/utils/ImageLoader.cjs +0 -1
- package/dist/packages/threejs/src/utils/ImageLoader.js +0 -33
- package/dist/packages/threejs/src/utils/PredictiveLoader.cjs +0 -1
- package/dist/packages/threejs/src/utils/PredictiveLoader.js +0 -155
- package/dist/packages/threejs/src/utils/RetryHelper.cjs +0 -1
- package/dist/packages/threejs/src/utils/RetryHelper.js +0 -108
- package/dist/packages/threejs/src/utils/common.cjs +0 -1
- package/dist/packages/threejs/src/utils/common.js +0 -15
- package/dist/packages/threejs/src/utils/css3dHelper.cjs +0 -15
- package/dist/packages/threejs/src/utils/css3dHelper.js +0 -42
- package/dist/packages/threejs/src/utils/disposeObject.cjs +0 -1
- package/dist/packages/threejs/src/utils/disposeObject.js +0 -13
- package/dist/packages/threejs/src/utils/helper.cjs +0 -1
- package/dist/packages/threejs/src/utils/helper.js +0 -47
- package/dist/packages/threejs/src/utils/modelSerialize.cjs +0 -1
- package/dist/packages/threejs/src/utils/modelSerialize.js +0 -225
- package/dist/packages/threejs/src/utils/sceneRebuilder.cjs +0 -1
- package/dist/packages/threejs/src/utils/sceneRebuilder.js +0 -138
- package/dist/packages/threejs/src/workers/gltfParser.worker.cjs +0 -1
- package/dist/packages/threejs/src/workers/gltfParser.worker.js +0 -11
- package/dist/packages/threejs/src/workers/gltfParserOptimized.worker.cjs +0 -1
- package/dist/packages/threejs/src/workers/gltfParserOptimized.worker.js +0 -11
- /package/dist/{packages/threejs/src/utils/modelOptimizer.cjs → modelOptimizer-A0Cs6f9e.cjs} +0 -0
package/{readme.md → README.md}
RENAMED
|
@@ -352,9 +352,13 @@ threeJsIns.setView(model, ViewType.ISO, { scale: 1.0, animate: true });
|
|
|
352
352
|
|
|
353
353
|
### useGLTFLoader()
|
|
354
354
|
|
|
355
|
-
GLTF 模型加载器,支持 IndexedDB
|
|
355
|
+
GLTF 模型加载器,支持 IndexedDB 缓存、内存缓存、重试机制和调试模式。
|
|
356
356
|
|
|
357
357
|
```javascript
|
|
358
|
+
const loader = useGLTFLoader({
|
|
359
|
+
debug: false // 是否开启调试日志(默认: false)
|
|
360
|
+
});
|
|
361
|
+
|
|
358
362
|
const {
|
|
359
363
|
// 核心加载方法
|
|
360
364
|
load, // 基础加载方法
|
|
@@ -366,30 +370,61 @@ const {
|
|
|
366
370
|
loadBatch, // 批量加载模型
|
|
367
371
|
loadBatchSequential, // 顺序批量加载
|
|
368
372
|
|
|
369
|
-
// 缓存管理
|
|
370
|
-
clearCache, //
|
|
373
|
+
// IndexedDB 缓存管理
|
|
374
|
+
clearCache, // 清空 IndexedDB 缓存
|
|
371
375
|
invalidateCache, // 使缓存失效
|
|
372
376
|
getCacheStats, // 获取缓存统计
|
|
373
377
|
logCacheReport, // 输出缓存性能报告
|
|
378
|
+
getCache, // 获取 IDBCache 实例
|
|
379
|
+
resetCacheStats, // 重置缓存统计
|
|
380
|
+
|
|
381
|
+
// 内存缓存管理 (v1.4.2+)
|
|
382
|
+
clearMemoryCache, // 清空内存缓存
|
|
383
|
+
getMemoryCacheInfo, // 获取内存缓存统计
|
|
384
|
+
deleteMemoryCache, // 删除指定模型的内存缓存
|
|
374
385
|
|
|
375
386
|
// 性能监控
|
|
376
387
|
cacheMonitor // 缓存监控器实例
|
|
377
|
-
} =
|
|
388
|
+
} = loader;
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**新增功能 (v1.4.2):**
|
|
392
|
+
|
|
393
|
+
1. **内存缓存机制**: 自动缓存已解析的 3D 模型对象,避免重复解析
|
|
394
|
+
2. **调试模式控制**: 通过初始化参数统一控制所有日志输出
|
|
395
|
+
|
|
396
|
+
#### 初始化配置
|
|
397
|
+
|
|
398
|
+
```javascript
|
|
399
|
+
// 生产环境 - 默认静默
|
|
400
|
+
const loader = useGLTFLoader();
|
|
401
|
+
|
|
402
|
+
// 开发环境 - 开启调试日志
|
|
403
|
+
const loader = useGLTFLoader({
|
|
404
|
+
debug: true
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
// 所有操作都会输出详细日志
|
|
408
|
+
const model = await loader.asyncFetch('/models/car.glb', '1.0.0');
|
|
409
|
+
// 输出: [ asyncFetch ] ====> 缓存未命中
|
|
410
|
+
// [ fetchArrayBuffer ] 加载模型耗时: 150ms
|
|
411
|
+
// [ 解析模型耗时 ]: 80ms
|
|
412
|
+
// [ 内存缓存 ] 存储模型 /models/car.glb (version: 1.0.0)
|
|
378
413
|
```
|
|
379
414
|
|
|
380
415
|
**常用方法:**
|
|
381
416
|
|
|
382
417
|
##### asyncFetch()
|
|
383
418
|
|
|
384
|
-
|
|
419
|
+
推荐的模型加载方法,集成 IndexedDB 缓存、内存缓存、重试机制、性能监控和模型优化。
|
|
385
420
|
|
|
386
421
|
```javascript
|
|
387
|
-
const
|
|
422
|
+
const model = await asyncFetch(
|
|
388
423
|
url: string, // 模型 URL
|
|
389
424
|
version?: string, // 模型版本(用于缓存失效)
|
|
425
|
+
onProgress?: (percent: number) => void, // 进度回调
|
|
390
426
|
options?: {
|
|
391
|
-
//
|
|
392
|
-
onProgress?: (progress: ProgressEvent) => void,
|
|
427
|
+
// 重试配置
|
|
393
428
|
maxRetries?: number, // 最大重试次数(默认: 3)
|
|
394
429
|
|
|
395
430
|
// 模型优化选项
|
|
@@ -399,35 +434,40 @@ const [err, model] = await asyncFetch(
|
|
|
399
434
|
simplifyOptions?: {
|
|
400
435
|
minFaceCount?: number, // 最小面数阈值,低于此值不简化(默认: 100)
|
|
401
436
|
preserveUVs?: boolean // 是否保留UV坐标(默认: true)
|
|
402
|
-
}
|
|
437
|
+
},
|
|
438
|
+
|
|
439
|
+
// 缓存控制
|
|
440
|
+
useMemoryCache?: boolean // 是否使用内存缓存(默认: true, v1.4.2+)
|
|
403
441
|
}
|
|
404
|
-
): Promise<
|
|
442
|
+
): Promise<THREE.Object3D | null>
|
|
405
443
|
```
|
|
406
444
|
|
|
445
|
+
**缓存层级 (v1.4.2+):**
|
|
446
|
+
|
|
447
|
+
1. **内存缓存** (最快) - 已解析的 3D 对象,仅需克隆(~2ms)
|
|
448
|
+
2. **IndexedDB 缓存** (快) - ArrayBuffer 数据,需要解析(~200ms)
|
|
449
|
+
3. **网络加载** (慢) - 完整下载 + 解析(~2s)
|
|
450
|
+
|
|
407
451
|
**示例:**
|
|
408
452
|
```javascript
|
|
409
453
|
// 基础用法
|
|
410
|
-
const
|
|
454
|
+
const model = await asyncFetch('/models/car.glb', '1.0.0');
|
|
411
455
|
if (model) {
|
|
412
456
|
scene.add(model);
|
|
413
457
|
}
|
|
414
458
|
|
|
415
459
|
// 带进度回调
|
|
416
|
-
const
|
|
417
|
-
|
|
418
|
-
const percent = (progress.loaded / progress.total * 100).toFixed(2);
|
|
419
|
-
console.log(`加载进度: ${percent}%`);
|
|
420
|
-
},
|
|
421
|
-
maxRetries: 5
|
|
460
|
+
const model = await asyncFetch('/models/car.glb', '1.0.0', (percent) => {
|
|
461
|
+
console.log(`加载进度: ${percent}%`);
|
|
422
462
|
});
|
|
423
463
|
|
|
424
464
|
// 启用材质优化
|
|
425
|
-
const
|
|
465
|
+
const model = await asyncFetch('/models/car.glb', '1.0.0', null, {
|
|
426
466
|
optimizeMaterials: true // 自动合并相同材质
|
|
427
467
|
});
|
|
428
468
|
|
|
429
469
|
// 启用几何体简化(适合大型模型)
|
|
430
|
-
const
|
|
470
|
+
const model = await asyncFetch('/models/large-scene.glb', '1.0.0', null, {
|
|
431
471
|
simplifyGeometry: true, // 启用简化
|
|
432
472
|
simplifyRatio: 0.5, // 保留 50% 的面
|
|
433
473
|
simplifyOptions: {
|
|
@@ -436,18 +476,43 @@ const [err, model] = await asyncFetch('/models/large-scene.glb', '1.0.0', {
|
|
|
436
476
|
}
|
|
437
477
|
});
|
|
438
478
|
|
|
479
|
+
// 禁用内存缓存
|
|
480
|
+
const model = await asyncFetch('/models/car.glb', '1.0.0', null, {
|
|
481
|
+
useMemoryCache: false // 跳过内存缓存
|
|
482
|
+
});
|
|
483
|
+
|
|
439
484
|
// 综合优化
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
485
|
+
const model = await asyncFetch('/models/complex.glb', '1.0.0', (p) => {
|
|
486
|
+
console.log(`加载: ${p.toFixed(1)}%`);
|
|
487
|
+
}, {
|
|
488
|
+
maxRetries: 5, // 增加重试次数
|
|
489
|
+
optimizeMaterials: true, // 优化材质
|
|
490
|
+
simplifyGeometry: true, // 简化几何体
|
|
491
|
+
simplifyRatio: 0.7, // 保留 70% 的面
|
|
492
|
+
useMemoryCache: true // 使用内存缓存(默认)
|
|
445
493
|
});
|
|
446
494
|
```
|
|
447
495
|
|
|
496
|
+
**性能对比:**
|
|
497
|
+
|
|
498
|
+
```javascript
|
|
499
|
+
// 首次加载
|
|
500
|
+
await asyncFetch('/models/car.glb', '1.0.0');
|
|
501
|
+
// 耗时: ~2s (网络 + 解析 + 优化)
|
|
502
|
+
|
|
503
|
+
// 二次加载 (内存缓存命中)
|
|
504
|
+
await asyncFetch('/models/car.glb', '1.0.0');
|
|
505
|
+
// 耗时: ~2ms (仅克隆对象)
|
|
506
|
+
|
|
507
|
+
// 二次加载 (仅 IndexedDB 命中,内存缓存被清空)
|
|
508
|
+
loader.clearMemoryCache();
|
|
509
|
+
await asyncFetch('/models/car.glb', '1.0.0');
|
|
510
|
+
// 耗时: ~200ms (从 IndexedDB 读取 + 解析)
|
|
511
|
+
```
|
|
512
|
+
|
|
448
513
|
##### logCacheReport()
|
|
449
514
|
|
|
450
|
-
|
|
515
|
+
输出 IndexedDB 缓存性能报告到控制台。
|
|
451
516
|
|
|
452
517
|
```javascript
|
|
453
518
|
logCacheReport(): void
|
|
@@ -465,6 +530,89 @@ logCacheReport(): void
|
|
|
465
530
|
- 缓存节省时间: ~1.5s
|
|
466
531
|
```
|
|
467
532
|
|
|
533
|
+
##### 内存缓存管理 API (v1.4.2+)
|
|
534
|
+
|
|
535
|
+
**getMemoryCacheInfo()**
|
|
536
|
+
|
|
537
|
+
获取内存缓存统计信息。
|
|
538
|
+
|
|
539
|
+
```javascript
|
|
540
|
+
const info = loader.getMemoryCacheInfo();
|
|
541
|
+
|
|
542
|
+
// 返回值:
|
|
543
|
+
{
|
|
544
|
+
totalPaths: 2, // 缓存的不同模型路径数量
|
|
545
|
+
totalModels: 3, // 缓存的总模型数量
|
|
546
|
+
details: [
|
|
547
|
+
{
|
|
548
|
+
path: '/models/car.glb',
|
|
549
|
+
versions: ['1.0.0', '1.1.0'],
|
|
550
|
+
count: 2
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
path: '/models/truck.glb',
|
|
554
|
+
versions: ['1.0.0'],
|
|
555
|
+
count: 1
|
|
556
|
+
}
|
|
557
|
+
]
|
|
558
|
+
}
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
**clearMemoryCache()**
|
|
562
|
+
|
|
563
|
+
清空所有内存缓存,释放已缓存的 3D 模型对象内存。
|
|
564
|
+
|
|
565
|
+
```javascript
|
|
566
|
+
const count = loader.clearMemoryCache();
|
|
567
|
+
console.log(`释放了 ${count} 个模型`);
|
|
568
|
+
|
|
569
|
+
// 使用场景: 内存不足时主动释放
|
|
570
|
+
if (info.totalModels > 100) {
|
|
571
|
+
loader.clearMemoryCache();
|
|
572
|
+
}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**deleteMemoryCache(path, version?)**
|
|
576
|
+
|
|
577
|
+
删除指定模型的内存缓存。
|
|
578
|
+
|
|
579
|
+
```javascript
|
|
580
|
+
// 删除特定版本
|
|
581
|
+
loader.deleteMemoryCache('/models/car.glb', '1.0.0');
|
|
582
|
+
|
|
583
|
+
// 删除所有版本
|
|
584
|
+
loader.deleteMemoryCache('/models/car.glb');
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**使用示例:**
|
|
588
|
+
|
|
589
|
+
```javascript
|
|
590
|
+
import { useGLTFLoader } from '@ridp/threejs/hooks';
|
|
591
|
+
|
|
592
|
+
const loader = useGLTFLoader({ debug: true });
|
|
593
|
+
|
|
594
|
+
// 首次加载 - 从网络加载并缓存
|
|
595
|
+
const model1 = await loader.asyncFetch('/models/car.glb', '1.0.0');
|
|
596
|
+
// [ asyncFetch ] ====> 缓存未命中
|
|
597
|
+
// [ 内存缓存 ] 存储模型 /models/car.glb (version: 1.0.0)
|
|
598
|
+
|
|
599
|
+
// 二次加载 - 从内存缓存获取(极快)
|
|
600
|
+
const model2 = await loader.asyncFetch('/models/car.glb', '1.0.0');
|
|
601
|
+
// [ 内存缓存命中 ] /models/car.glb (version: 1.0.0)
|
|
602
|
+
// [ 内存缓存克隆耗时 ]: 2ms
|
|
603
|
+
|
|
604
|
+
// 查看内存缓存信息
|
|
605
|
+
const info = loader.getMemoryCacheInfo();
|
|
606
|
+
console.log(`缓存了 ${info.totalModels} 个模型`);
|
|
607
|
+
|
|
608
|
+
// 清空内存缓存
|
|
609
|
+
loader.clearMemoryCache();
|
|
610
|
+
|
|
611
|
+
// 再次加载 - 从 IndexedDB 缓存获取
|
|
612
|
+
const model3 = await loader.asyncFetch('/models/car.glb', '1.0.0');
|
|
613
|
+
// [ asyncFetch ] ====> IndexedDB 缓存命中
|
|
614
|
+
```
|
|
615
|
+
|
|
468
616
|
### useRaycaster()
|
|
469
617
|
|
|
470
618
|
射线拾取工具,用于鼠标交互和物体选择。
|
|
@@ -1152,7 +1300,61 @@ function captureScreenshot() {
|
|
|
1152
1300
|
|
|
1153
1301
|
## 更新日志
|
|
1154
1302
|
|
|
1155
|
-
### v1.
|
|
1303
|
+
### v1.4.2 (2026-01-07)
|
|
1304
|
+
|
|
1305
|
+
**🎉 重大更新:**
|
|
1306
|
+
|
|
1307
|
+
- ✨ **新增内存缓存机制**: 自动缓存已解析的 3D 模型对象,避免重复解析
|
|
1308
|
+
- 首次加载后,二次加载仅需 ~2ms(对象克隆)
|
|
1309
|
+
- 相比完整加载流程,速度提升可达 **100倍以上**
|
|
1310
|
+
- 新增 `clearMemoryCache()` - 清空内存缓存
|
|
1311
|
+
- 新增 `getMemoryCacheInfo()` - 获取内存缓存统计
|
|
1312
|
+
- 新增 `deleteMemoryCache(path, version?)` - 删除指定缓存
|
|
1313
|
+
- 支持 `useMemoryCache` 选项控制是否使用内存缓存
|
|
1314
|
+
|
|
1315
|
+
- ✨ **新增调试模式控制**:
|
|
1316
|
+
- `useGLTFLoader` 现在支持初始化配置 `{ debug: boolean }`
|
|
1317
|
+
- 统一控制所有内部函数的日志输出
|
|
1318
|
+
- 生产环境默认静默,开发环境可开启详细日志
|
|
1319
|
+
- 错误日志始终输出,不受 debug 配置影响
|
|
1320
|
+
|
|
1321
|
+
- 🐛 **修复 Web Worker 在 npm 包中无法加载的问题**:
|
|
1322
|
+
- 使用 `?worker` 语法正确导入 Worker
|
|
1323
|
+
- 配置 `base: './'` 使用相对路径解析
|
|
1324
|
+
- Worker 文件正确打包到 `dist/assets/` 目录
|
|
1325
|
+
- 修复了之前 404 错误和 MIME 类型错误的问题
|
|
1326
|
+
|
|
1327
|
+
**API 变更:**
|
|
1328
|
+
|
|
1329
|
+
```javascript
|
|
1330
|
+
// 旧 API (v1.4.1 及之前)
|
|
1331
|
+
const loader = useGLTFLoader();
|
|
1332
|
+
const model = await loader.asyncFetch(url, version, null, { debug: true });
|
|
1333
|
+
|
|
1334
|
+
// 新 API (v1.4.2+)
|
|
1335
|
+
const loader = useGLTFLoader({ debug: true });
|
|
1336
|
+
const model = await loader.asyncFetch(url, version);
|
|
1337
|
+
|
|
1338
|
+
// 新增内存缓存管理
|
|
1339
|
+
const info = loader.getMemoryCacheInfo();
|
|
1340
|
+
loader.clearMemoryCache();
|
|
1341
|
+
loader.deleteMemoryCache(url, version);
|
|
1342
|
+
```
|
|
1343
|
+
|
|
1344
|
+
**性能提升:**
|
|
1345
|
+
|
|
1346
|
+
```
|
|
1347
|
+
加载场景 (v1.4.1):
|
|
1348
|
+
- 首次: ~2s (网络 + 解析)
|
|
1349
|
+
- 二次: ~200ms (IndexedDB 读取 + 解析)
|
|
1350
|
+
|
|
1351
|
+
加载场景 (v1.4.2+):
|
|
1352
|
+
- 首次: ~2s (网络 + 解析)
|
|
1353
|
+
- 二次: ~2ms (内存缓存克隆)
|
|
1354
|
+
- 提升: 100倍
|
|
1355
|
+
```
|
|
1356
|
+
|
|
1357
|
+
### v1.4.1 (2025-XX-XX)
|
|
1156
1358
|
|
|
1157
1359
|
- 🎯 优化 `setView` 方法的 scale 参数计算逻辑
|
|
1158
1360
|
- 🔧 修复水平 FOV 超过 180° 导致的负数距离问题
|