GltfModelManager.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import * as THREE from 'three'; //导入整个 three.js核心库
  2. import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader.js'
  3. // 模型管理器
  4. class GltfModelManager {
  5. constructor() {
  6. this.loader = new GLTFLoader();
  7. this.models = new Map();
  8. this.loadingManager = new THREE.LoadingManager();
  9. this.setupLoadingManager();
  10. }
  11. setupLoadingManager() {
  12. this.loadingManager.onProgress = (url, itemsLoaded, itemsTotal) => {
  13. console.log(`Loading: ${itemsLoaded}/${itemsTotal}`);
  14. };
  15. this.loadingManager.onError = (url) => {
  16. console.error('Error loading:', url);
  17. };
  18. }
  19. loadModel(name, url) {
  20. return new Promise((resolve, reject) => {
  21. this.loader.load(
  22. url,
  23. (gltf) => {
  24. this.models.set(name, gltf);
  25. resolve(gltf);
  26. },
  27. undefined,
  28. (error) => reject(error)
  29. );
  30. });
  31. }
  32. getModel(name) {
  33. return this.models.get(name);
  34. }
  35. dispose() {
  36. this.models.forEach(model => {
  37. model.scene.traverse((object) => {
  38. if (object.isMesh) {
  39. object.geometry.dispose();
  40. object.material.dispose();
  41. }
  42. });
  43. });
  44. this.models.clear();
  45. }
  46. }
  47. export default GltfModelManager;