loadGltf.worker.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import * as THREE from 'three';
  2. import Dexie from 'dexie';
  3. const db = new Dexie('DB');
  4. db.version(1).stores({
  5. modal: '&modalName, modalVal, versionStr',
  6. });
  7. self['modelLen'] = -1;
  8. /* self.addEventListener(
  9. 'message',
  10. async function (e) {
  11. const { data, message } = e.data;
  12. if (message == 'load') {
  13. self['modelLen']--;
  14. if (data) {
  15. const model = await loadGltf(data);
  16. if (self['modelLen'] >= 0) {
  17. self.postMessage({ message: 'save', data: model });
  18. }
  19. }
  20. } else if (message == 'start') {
  21. self['modelLen'] += data + 1;
  22. }
  23. if (self['modelLen'] == 0) {
  24. self.postMessage({ message: 'end', data: null });
  25. this.close();
  26. }
  27. },
  28. false
  29. ); */
  30. self.addEventListener(
  31. 'message',
  32. async function (e) {
  33. const { data, message } = e.data;
  34. if (message == 'load') {
  35. if (data) {
  36. const model = await loadModal(data);
  37. self.postMessage({ message: 'end', data: model });
  38. }
  39. }
  40. },
  41. false
  42. );
  43. function loadModal(url) {
  44. return new Promise((resolve, reject) => {
  45. const suffix = url.match(/[^.]+$/)[0];
  46. const loader = new THREE.FileLoader();
  47. if (suffix == 'glb' || suffix == 'gltf'){
  48. loader.setPath('/model/glft/');
  49. } else if (suffix == 'fbx' || suffix == 'FBX') {
  50. loader.setPath('/model/fbx/');
  51. }
  52. loader.setResponseType('arraybuffer');
  53. loader.setRequestHeader({})
  54. loader.setWithCredentials(false);
  55. try {
  56. loader.load(url, async (data) => {
  57. const fileName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
  58. const modalName = fileName.slice(0, -11);
  59. const version = fileName.slice(-11);
  60. const model = {
  61. modalName: modalName,
  62. modalVal: data,
  63. versionStr: version,
  64. };
  65. await db.modal.add(model);
  66. self.postMessage({ message: 'save', data: model });
  67. resolve(model);
  68. });
  69. } catch (error) {
  70. reject(error);
  71. }
  72. });
  73. }