mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
135 lines
4.1 KiB
JavaScript
135 lines
4.1 KiB
JavaScript
import BaseLoader from './BaseLoader';
|
||
import AMFLoader from './AMFLoader';
|
||
import AWDLoader from './AWDLoader';
|
||
import BabylonLoader from './BabylonLoader';
|
||
import BinaryLoader from './BinaryLoader';
|
||
import ColladaLoader from './ColladaLoader';
|
||
import CTMLoader from './CTMLoader';
|
||
import FBXLoader from './FBXLoader';
|
||
import GLTFLoader from './GLTFLoader';
|
||
import KMZLoader from './KMZLoader';
|
||
import MD2Loader from './MD2Loader';
|
||
import ObjectLoader from './ObjectLoader';
|
||
import OBJLoader from './OBJLoader';
|
||
import PLYLoader from './PLYLoader';
|
||
import STLLoader from './STLLoader';
|
||
import VTKLoader from './VTKLoader';
|
||
import LOLLoader from './LOLLoader';
|
||
import MMDLoader from './MMDLoader';
|
||
import JsonLoader from './JsonLoader';
|
||
import _3DSLoader from './_3DSLoader';
|
||
import _3MFLoader from './_3MFLoader';
|
||
import AssimpLoader from './AssimpLoader';
|
||
import BVHLoader from './BVHLoader';
|
||
import DRACOLoader from './DRACOLoader';
|
||
import GCodeLoader from './GCodeLoader';
|
||
import NRRDLoader from './NRRDLoader';
|
||
import PCDLoader from './PCDLoader';
|
||
import PDBLoader from './PDBLoader';
|
||
import PRWMLoader from './PRWMLoader';
|
||
import SEA3DLoader from './SEA3DLoader';
|
||
import VRMLoader from './VRMLoader';
|
||
import VRMLLoader from './VRMLLoader';
|
||
import XLoader from './XLoader';
|
||
import MeshUtils from '../utils/MeshUtils';
|
||
|
||
const Loaders = {
|
||
'_3ds': _3DSLoader,
|
||
'_3mf': _3MFLoader,
|
||
'amf': AMFLoader,
|
||
'assimp': AssimpLoader,
|
||
'awd': AWDLoader,
|
||
'babylon': BabylonLoader,
|
||
'binary': BinaryLoader,
|
||
'bvh': BVHLoader,
|
||
'ctm': CTMLoader,
|
||
'dae': ColladaLoader,
|
||
'fbx': FBXLoader,
|
||
'glb': GLTFLoader,
|
||
'gltf': GLTFLoader,
|
||
'kmz': KMZLoader,
|
||
'md2': MD2Loader,
|
||
'json': ObjectLoader,
|
||
'obj': OBJLoader,
|
||
'ply': PLYLoader,
|
||
'stl': STLLoader,
|
||
'vtk': VTKLoader,
|
||
'lol': LOLLoader,
|
||
'pmd': MMDLoader,
|
||
'pmx': MMDLoader,
|
||
'js': JsonLoader,
|
||
'drc': DRACOLoader,
|
||
'gcode': GCodeLoader,
|
||
'nrrd': NRRDLoader,
|
||
'pcd': PCDLoader,
|
||
'pdb': PDBLoader,
|
||
'prwm': PRWMLoader,
|
||
'sea3d': SEA3DLoader,
|
||
'vrm': VRMLoader,
|
||
'vrml': VRMLLoader,
|
||
'x': XLoader
|
||
};
|
||
|
||
/**
|
||
* ModelLoader
|
||
* @author tengge / https://github.com/tengge1
|
||
*/
|
||
function ModelLoader() {
|
||
BaseLoader.call(this);
|
||
}
|
||
|
||
ModelLoader.prototype = Object.create(BaseLoader.prototype);
|
||
ModelLoader.prototype.constructor = ModelLoader;
|
||
|
||
ModelLoader.prototype.load = function (url, options = {}, environment = {}) {
|
||
var type = options.Type;
|
||
|
||
if (type === undefined) {
|
||
console.warn(`ModelLoader: no type parameters, and cannot load.`);
|
||
return new Promise(resolve => {
|
||
resolve(null);
|
||
});
|
||
}
|
||
|
||
return new Promise(resolve => {
|
||
var loader = Loaders[type];
|
||
if (loader === undefined) {
|
||
console.warn(`ModelLoader: no ${type} loader.`);
|
||
resolve(null);
|
||
return;
|
||
}
|
||
new loader(app).load(url, options, environment).then(obj => {
|
||
if (!obj || !obj.userData) {
|
||
resolve(null);
|
||
return;
|
||
}
|
||
|
||
// bug: 由于模型可能自带错误的_children数据,导致载入场景模型显示不全。
|
||
// 所以,向场景添加模型时,清除掉_children属性。
|
||
if (environment.clearChildren) {
|
||
delete obj.userData._children;
|
||
}
|
||
|
||
// 由于每次加载模型,uuid会变,所以要记录原始模型的uuid,而且只能记录一次。
|
||
if (obj.children && !obj.userData._children) {
|
||
obj.userData._children = []; // 原始模型的uuid层次
|
||
MeshUtils.traverseUUID(obj.children, obj.userData._children); // 记录最原始的模型,每个组件的uuid。
|
||
}
|
||
|
||
obj.userData.physics = obj.userData.physics || {
|
||
enabled: false,
|
||
type: 'rigidBody',
|
||
shape: 'btBoxShape',
|
||
mass: 1,
|
||
inertia: {
|
||
x: 0,
|
||
y: 0,
|
||
z: 0
|
||
}
|
||
};
|
||
resolve(obj);
|
||
});
|
||
});
|
||
};
|
||
|
||
export default ModelLoader; |