diff --git a/ShadowEditor.Web/src/component/ReflectorComponent.js b/ShadowEditor.Web/src/component/ReflectorComponent.js index ead90a21..18a4b48d 100644 --- a/ShadowEditor.Web/src/component/ReflectorComponent.js +++ b/ShadowEditor.Web/src/component/ReflectorComponent.js @@ -76,7 +76,7 @@ ReflectorComponent.prototype.render = function () { options: { 512: '512*512', 1024: '1024*1024', - 2018: '2048*2048' + 2048: '2048*2048' }, value: '1024', onChange: this.onChangeReflect.bind(this) diff --git a/ShadowEditor.Web/src/serialization/Converter.js b/ShadowEditor.Web/src/serialization/Converter.js index 7f098fef..6989d97b 100644 --- a/ShadowEditor.Web/src/serialization/Converter.js +++ b/ShadowEditor.Web/src/serialization/Converter.js @@ -28,6 +28,9 @@ import RectAreaLightSerializer from './light/RectAreaLightSerializer'; import AudioSerializer from './audio/AudioSerializer'; import AudioListenerSerializer from './audio/AudioListenerSerializer'; +// objects +import ReflectorSerializer from './objects/ReflectorSerializer'; + /** * 场景序列化/反序列化类 * @author tengge / https://github.com/tengge1 @@ -98,6 +101,10 @@ Converter.prototype.sceneToJson = function (scene, list) { return; } + if (obj instanceof THREE.Reflector) { + json = (new ReflectorSerializer()).toJSON(obj); + } + switch (obj.constructor.name) { case 'Scene': json = (new SceneSerializer()).toJSON(obj); @@ -105,6 +112,9 @@ Converter.prototype.sceneToJson = function (scene, list) { case 'Group': json = (new GroupSerializer()).toJSON(obj); break; + case 'Reflector': + json = (new ReflectorSerializer()).toJSON(obj); + break; case 'Mesh': json = (new MeshSerializer()).toJSON(obj); break; @@ -254,6 +264,9 @@ Converter.prototype.sceneFromJson = function (jsons, options, audioListener) { case 'GroupSerializer': obj = (new GroupSerializer()).fromJSON(objJson); break; + case 'ReflectorSerializer': + obj = (new ReflectorSerializer()).fromJSON(objJson); + break; case 'MeshSerializer': obj = (new MeshSerializer()).fromJSON(objJson); break; diff --git a/ShadowEditor.Web/src/serialization/objects/ReflectorSerializer.js b/ShadowEditor.Web/src/serialization/objects/ReflectorSerializer.js new file mode 100644 index 00000000..2a76b936 --- /dev/null +++ b/ShadowEditor.Web/src/serialization/objects/ReflectorSerializer.js @@ -0,0 +1,45 @@ +import BaseSerializer from '../BaseSerializer'; +import MeshSerializer from '../core/MeshSerializer'; +import GeometriesSerializer from '../geometry/GeometriesSerializer'; + +/** + * ReflectorSerializer + * @author tengge / https://github.com/tengge1 + */ +function ReflectorSerializer() { + BaseSerializer.call(this); +} + +ReflectorSerializer.prototype = Object.create(BaseSerializer.prototype); +ReflectorSerializer.prototype.constructor = ReflectorSerializer; + +ReflectorSerializer.prototype.toJSON = function (obj) { + var json = MeshSerializer.prototype.toJSON.call(this, obj); + + if (json.userData.mesh) { + json.userData.mesh = (new MeshSerializer()).toJSON(json.userData.mesh); + } + + return json; +}; + +ReflectorSerializer.prototype.fromJSON = function (json) { + var geometry = (new GeometriesSerializer()).fromJSON(json.geometry); + var obj = new THREE.Reflector(geometry, { + color: json.userData.color, + textureWidth: parseInt(json.userData.size), + textureHeight: parseInt(json.userData.size), + clipBias: json.userData.clipBias, + recursion: json.userData.recursion ? 1 : 0 + }); + + MeshSerializer.prototype.fromJSON.call(this, json, obj); + + if (obj.userData.mesh) { + obj.userData.mesh = (new MeshSerializer()).fromJSON(obj.userData.mesh); + } + + return obj; +}; + +export default ReflectorSerializer; \ No newline at end of file