mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-02-01 16:08:17 +00:00
材质序列化。
This commit is contained in:
parent
9b44e06243
commit
eeb8dabc17
@ -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);
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user