mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
场景加载模型代码简化。
This commit is contained in:
parent
7e2ec19f3c
commit
7a6fb8dade
@ -1,5 +1,6 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
import Object3DSerializer from './Object3DSerializer';
|
||||
import ModelLoader from '../../loader/ModelLoader';
|
||||
|
||||
/**
|
||||
* ServerObject
|
||||
@ -20,136 +21,17 @@ ServerObject.prototype.toJSON = function (obj) {
|
||||
|
||||
ServerObject.prototype.fromJSON = function (json) {
|
||||
var type = json.userData.Type;
|
||||
return new Promise((resolve, reject) => {
|
||||
if (type === 'amf') {
|
||||
var loader = new THREE.AMFLoader();
|
||||
loader.load(this.app.options.server + json.userData.Url, (group) => {
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, group);
|
||||
resolve(group);
|
||||
});
|
||||
} else if (type === 'binary') {
|
||||
var loader = new THREE.BinaryLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry, materials) => {
|
||||
var mesh = new THREE.Mesh(geometry, materials);
|
||||
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else if (type === 'awd') {
|
||||
var loader = new THREE.AWDLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (obj3d) => {
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'babylon') {
|
||||
var loader = new THREE.BabylonLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (scene) => {
|
||||
var obj3d = new THREE.Object3D();
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
obj3d.children = scene.children;
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'ctm') {
|
||||
var loader = new THREE.CTMLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry) => {
|
||||
var material = new THREE.MeshStandardMaterial();
|
||||
var mesh = new THREE.Mesh(geometry, material);
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else if (type === 'dae') {
|
||||
var loader = new THREE.ColladaLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (collada) => {
|
||||
var obj3d = collada.scene;
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'fbx') {
|
||||
var loader = new THREE.FBXLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (obj3d) => {
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'glb' || type === 'gltf') {
|
||||
var loader = new THREE.GLTFLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (result) => {
|
||||
var obj3d = result.scene;
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'kmz') {
|
||||
var loader = new THREE.KMZLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (collada) => {
|
||||
var obj3d = collada.scene;
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj3d);
|
||||
resolve(obj3d);
|
||||
});
|
||||
} else if (type === 'ply') {
|
||||
var loader = new THREE.PLYLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry) => {
|
||||
var material = new THREE.MeshStandardMaterial();
|
||||
var mesh = new THREE.Mesh(geometry, material);
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else if (type === 'obj') {
|
||||
var loader = new THREE.OBJLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (obj) => {
|
||||
return new Promise(resolve => {
|
||||
var loader = new ModelLoader(this.app);
|
||||
loader.load(this.app.options.server + json.userData.Url).then(obj => {
|
||||
if (obj) {
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj);
|
||||
resolve(obj);
|
||||
});
|
||||
} else if (type === 'md2') {
|
||||
var loader = new THREE.MD2Loader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry) => {
|
||||
var material = new THREE.MeshStandardMaterial({
|
||||
morphTargets: true,
|
||||
morphNormals: true
|
||||
});
|
||||
|
||||
var mesh = new THREE.Mesh(geometry, material);
|
||||
mesh.mixer = new THREE.AnimationMixer(mesh);
|
||||
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else if (type === 'stl') {
|
||||
var loader = new THREE.STLLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry) => {
|
||||
var material = new THREE.MeshStandardMaterial();
|
||||
var mesh = new THREE.Mesh(geometry, material);
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else if (type === 'vtk') {
|
||||
var loader = new THREE.VTKLoader();
|
||||
|
||||
loader.load(this.app.options.server + json.userData.Url, (geometry) => {
|
||||
var material = new THREE.MeshStandardMaterial();
|
||||
var mesh = new THREE.Mesh(geometry, material);
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, mesh);
|
||||
resolve(mesh);
|
||||
});
|
||||
} else {
|
||||
console.warn(`MeshSerializer: 未知模型类型${type}。`);
|
||||
resolve(null);
|
||||
}
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Object3DSerializer.prototype.fromJSON.call(this, json, obj);
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default ServerObject;
|
||||
Loading…
x
Reference in New Issue
Block a user