材质序列化。

This commit is contained in:
liteng 2018-08-07 12:27:00 +08:00
parent 9b44e06243
commit eeb8dabc17
5 changed files with 104 additions and 4 deletions

View File

@ -67,6 +67,7 @@ Converter.prototype.toJSON = function (app) {
// 场景
app.editor.scene.traverse(function (obj) {
var json = null;
debugger
switch (obj.constructor.name) {
case 'Scene':
json = (new SceneSerializer()).toJSON(obj);

View File

@ -18,8 +18,8 @@ MeshSerializer.prototype.toJSON = function (obj) {
var json = Object3DSerializer.prototype.toJSON.call(this, obj);
json.drawMode = obj.drawMode;
json.geometry = (new BufferGeometriesSerializer()).toJSON(obj.geometry);
json.material = (new MaterialsSerializer()).toJSON(obj.material);
json.geometry = (new BufferGeometriesSerializer()).toJSON.call(this, obj.geometry);
json.material = (new MaterialsSerializer()).toJSON.call(this, obj.material);
return json;
};

View File

@ -34,7 +34,55 @@ BufferGeometriesSerializer.prototype = Object.create(BaseSerializer.prototype);
BufferGeometriesSerializer.prototype.constructor = BufferGeometriesSerializer;
BufferGeometriesSerializer.prototype.toJSON = function (obj) {
var json = null;
if (obj instanceof THREE.BoxBufferGeometry) {
json = (new BoxBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.CircleBufferGeometry) {
json = (new CircleBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ConeBufferGeometry) {
json = (new ConeBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.CylinderBufferGeometry) {
json = (new CylinderBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.DodecahedronBufferGeometry) {
json = (new DodecahedronBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ExtrudeBufferGeometry) {
json = (new ExtrudeBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.IcosahedronBufferGeometry) {
json = (new IcosahedronBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.InstancedBufferGeometry) {
json = (new InstancedBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.LatheBufferGeometry) {
json = (new LatheBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.OctahedronBufferGeometry) {
json = (new OctahedronBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ParametricBufferGeometry) {
json = (new ParametricBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.PlaneBufferGeometry) {
json = (new PlaneBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.RingBufferGeometry) {
json = (new RingBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ShapeBufferGeometry) {
json = (new ShapeBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.SphereBufferGeometry) {
json = (new SphereBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TeapotBufferGeometry) {
json = (new TeapotBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TetrahedronBufferGeometry) {
json = (new TetrahedronBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TextBufferGeometry) {
json = (new TextBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TorusBufferGeometry) {
json = (new TorusBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TorusKnotBufferGeometry) {
json = (new TorusKnotBufferGeometrySerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.TubeBufferGeometry) {
json = (new TubeBufferGeometrySerializer()).toJSON.call(this, obj);
} else {
console.warn(`BufferGeometriesSerializer: 未知Geometry类型 ${obj.type}`);
}
return json;
};
BufferGeometriesSerializer.prototype.fromJSON = function (json, parent) {

View File

@ -13,7 +13,8 @@ BufferGeometrySerializer.prototype.constructor = BufferGeometrySerializer;
BufferGeometrySerializer.prototype.toJSON = function (obj) {
var json = BaseSerializer.prototype.toJSON.call(this, obj);
json.attributes = obj.attributes;
// json.attributes太大不要保存在Mongo
// json.attributes = obj.attributes;
json.boundingBox = obj.boundingBox;
json.boundingSphere = obj.boundingSphere;
json.drawRange = obj.drawRange;
@ -34,7 +35,7 @@ BufferGeometrySerializer.prototype.fromJSON = function (json, parent) {
BaseSerializer.prototype.fromJSON.call(this, obj);
obj.attributes = json.attributes;
// obj.attributes = json.attributes;
obj.boundingBox = json.boundingBox;
obj.boundingSphere = json.boundingSphere;
obj.drawRange = json.drawRange;

View File

@ -34,7 +34,57 @@ MaterialsSerializer.prototype = Object.create(BaseSerializer.prototype);
MaterialsSerializer.prototype.constructor = MaterialsSerializer;
MaterialsSerializer.prototype.toJSON = function (obj) {
var json = null;
if (obj instanceof THREE.LineBasicMaterial) {
json = (new LineBasicMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.LineDashedMaterial) {
json = (new LineDashedMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshBasicMaterial) {
json = (new MeshBasicMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshDepthMaterial) {
json = (new MeshDepthMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshDistanceMaterial) {
json = (new MeshDistanceMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshFaceMaterial) {
json = (new MeshFaceMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshLambertMaterial) {
json = (new MeshLambertMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshNormalMaterial) {
json = (new MeshNormalMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshPhongMaterial) {
json = (new MeshPhongMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshPhysicalMaterial) {
json = (new MeshPhysicalMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshStandardMaterial) {
json = (new MeshStandardMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MeshToonMaterial) {
json = (new MeshToonMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.MultiMaterial) {
json = (new MultiMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ParticleBasicMaterial) {
json = (new ParticleBasicMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ParticleSystemMaterial) {
json = (new ParticleSystemMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.PointCloudMaterial) {
json = (new PointCloudMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.PointsMaterial) {
json = (new PointsMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.RawShaderMaterial) {
json = (new RawShaderMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ShaderMaterial) {
json = (new ShaderMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.ShadowMaterial) {
json = (new ShadowMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.SpriteCanvasMaterial) {
json = (new SpriteCanvasMaterialSerializer()).toJSON.call(this, obj);
} else if (obj instanceof THREE.SpriteMaterial) {
json = (new SpriteMaterialSerializer()).toJSON.call(this, obj);
} else {
console.warn(`MaterialsSerializer: 不支持的材质类型${obj.type}`);
}
return json;
};
MaterialsSerializer.prototype.fromJSON = function (json, parent) {