123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import * as THREE from 'three';
- import Dexie from 'dexie';
- const db = new Dexie('DB');
- db.version(1).stores({
- modal: '&modalName, modalVal, versionStr',
- });
- self['modelLen'] = -1;
- /* self.addEventListener(
- 'message',
- async function (e) {
- const { data, message } = e.data;
- if (message == 'load') {
- self['modelLen']--;
- if (data) {
- const model = await loadGltf(data);
- if (self['modelLen'] >= 0) {
- self.postMessage({ message: 'save', data: model });
- }
- }
- } else if (message == 'start') {
- self['modelLen'] += data + 1;
- }
- if (self['modelLen'] == 0) {
- self.postMessage({ message: 'end', data: null });
- this.close();
- }
- },
- false
- ); */
- self.addEventListener(
- 'message',
- async function (e) {
- const { data, message } = e.data;
- if (message == 'load') {
- if (data) {
- const model = await loadModal(data);
- self.postMessage({ message: 'end', data: model });
- }
- }
- },
- false
- );
- function loadModal(url) {
- return new Promise((resolve, reject) => {
- const suffix = url.match(/[^.]+$/)[0];
- const loader = new THREE.FileLoader();
- if (suffix == 'glb' || suffix == 'gltf'){
- loader.setPath('/model/glft/');
- } else if (suffix == 'fbx' || suffix == 'FBX') {
- loader.setPath('/model/fbx/');
- }
-
- loader.setResponseType('arraybuffer');
- loader.setRequestHeader({})
- loader.setWithCredentials(false);
- try {
- loader.load(url, async (data) => {
- const fileName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
- const modalName = fileName.slice(0, -11);
- const version = fileName.slice(-11);
- const model = {
- modalName: modalName,
- modalVal: data,
- versionStr: version,
- };
- await db.modal.add(model);
- self.postMessage({ message: 'save', data: model });
- resolve(model);
- });
- } catch (error) {
- reject(error);
- }
- });
- }
|