From 76856bb733ebeda7e31bfc700c7e16c080ffe8ae Mon Sep 17 00:00:00 2001 From: liteng <930372551@qq.com> Date: Sun, 19 Aug 2018 20:38:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B2=E6=9F=93=E5=99=A8=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E5=92=8C=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/serialization/Converter.js | 13 ++++ .../core/WebGLRendererSerializer.js | 62 +++++++++++++++++++ .../core/WebGLShadowMapSerializer.js | 42 +++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 ShadowEditor.Web/src/serialization/core/WebGLRendererSerializer.js create mode 100644 ShadowEditor.Web/src/serialization/core/WebGLShadowMapSerializer.js diff --git a/ShadowEditor.Web/src/serialization/Converter.js b/ShadowEditor.Web/src/serialization/Converter.js index 6d149911..a504ae1e 100644 --- a/ShadowEditor.Web/src/serialization/Converter.js +++ b/ShadowEditor.Web/src/serialization/Converter.js @@ -7,6 +7,7 @@ import MeshSerializer from './core/MeshSerializer'; import GroupSerializer from './core/GroupSerializer'; import SpriteSerializer from './core/SpriteSerializer'; import ServerObject from './core/ServerObject'; +import WebGLRendererSerializer from './core/WebGLRendererSerializer'; // app import ConfigSerializer from './app/ConfigSerializer'; @@ -47,6 +48,10 @@ Converter.prototype.toJSON = function () { var camera = (new CamerasSerializer(this.app)).toJSON(this.app.editor.camera); list.push(camera); + // 渲染器 + var renderer = (new WebGLRendererSerializer(this.app)).toJSON(this.app.editor.renderer); + list.push(renderer); + // 脚本 var scripts = (new ScriptSerializer(this.app)).toJSON(); scripts.forEach(n => { @@ -136,6 +141,14 @@ Converter.prototype.fromJson = function (json) { console.warn(`Converter: 场景中不存在相机信息。`); } + // 渲染器 + var rendererJson = json.filter(n => n.metadata && n.metadata.generator.indexOf('WebGLRendererSerializer') > -1)[0]; + if (rendererJson) { + (new WebGLRendererSerializer(this.app)).fromJSON(rendererJson, this.app.editor.renderer); + } else { + console.warn(`Converter: 场景中不存在渲染器信息。`); + } + // 脚本 var scriptJsons = json.filter(n => n.metadata && n.metadata.generator === 'ScriptSerializer' > -1); if (scriptJsons) { diff --git a/ShadowEditor.Web/src/serialization/core/WebGLRendererSerializer.js b/ShadowEditor.Web/src/serialization/core/WebGLRendererSerializer.js new file mode 100644 index 00000000..321357d4 --- /dev/null +++ b/ShadowEditor.Web/src/serialization/core/WebGLRendererSerializer.js @@ -0,0 +1,62 @@ +import BaseSerializer from '../BaseSerializer'; +import WebGLShadowMapSerializer from './WebGLShadowMapSerializer'; + +/** + * WebGLRendererSerializer + * @param {*} app + */ +function WebGLRendererSerializer(app) { + BaseSerializer.call(this, app); +} + +WebGLRendererSerializer.prototype = Object.create(BaseSerializer.prototype); +WebGLRendererSerializer.prototype.constructor = WebGLRendererSerializer; + +WebGLRendererSerializer.prototype.toJSON = function (obj) { + var json = BaseSerializer.prototype.toJSON.call(this, obj); + + json.antialias = true; + json.autoClear = obj.autoClear; + json.autoClearColor = obj.autoClearColor; + json.autoClearDepth = obj.autoClearDepth; + json.autoClearStencil = obj.autoClearStencil; + json.autoUpdateScene = obj.autoUpdateScene; + json.clippingPlanes = obj.clippingPlanes; + json.gammaFactor = obj.gammaFactor; + json.gammaInput = obj.gammaInput; + json.gammaOutput = obj.gammaOutput; + json.localClippingEnabled = obj.localClippingEnabled; + json.physicallyCorrectLights = obj.physicallyCorrectLights; + json.shadowMap = (new WebGLShadowMapSerializer(this.app)).toJSON(obj.shadowMap); + json.sortObjects = obj.sortObjects; + json.toneMapping = obj.toneMapping; + json.toneMappingExposure = obj.toneMappingExposure; + json.toneMappingWhitePoint = obj.toneMappingWhitePoint; + + return json; +}; + +WebGLRendererSerializer.prototype.fromJSON = function (json, parent) { + var obj = parent === undefined ? new THREE.WebGLRenderer({ antialias: json.antialias }) : parent; + + obj.autoClear = json.autoClear; + obj.autoClearColor = json.autoClearColor; + obj.autoClearDepth = json.autoClearDepth; + obj.autoClearStencil = json.autoClearStencil; + obj.autoUpdateScene = json.autoUpdateScene; + obj.clippingPlanes = json.clippingPlanes; + obj.gammaFactor = json.gammaFactor; + obj.gammaInput = json.gammaInput; + obj.gammaOutput = json.gammaOutput; + obj.localClippingEnabled = json.localClippingEnabled; + obj.physicallyCorrectLights = json.physicallyCorrectLights; + (new WebGLShadowMapSerializer(this.app)).fromJSON(json.shadowMap, obj.shadowMap); + obj.sortObjects = json.sortObjects; + obj.toneMapping = json.toneMapping; + obj.toneMappingExposure = json.toneMappingExposure; + obj.toneMappingWhitePoint = json.toneMappingWhitePoint; + + return obj; +}; + +export default WebGLRendererSerializer; \ No newline at end of file diff --git a/ShadowEditor.Web/src/serialization/core/WebGLShadowMapSerializer.js b/ShadowEditor.Web/src/serialization/core/WebGLShadowMapSerializer.js new file mode 100644 index 00000000..15f71658 --- /dev/null +++ b/ShadowEditor.Web/src/serialization/core/WebGLShadowMapSerializer.js @@ -0,0 +1,42 @@ +import BaseSerializer from '../BaseSerializer'; +import TexturesSerializer from '../texture/TexturesSerializer'; + +/** + * WebGLShadowMapSerializer + * @param {*} app + */ +function WebGLShadowMapSerializer(app) { + BaseSerializer.call(this, app); +} + +WebGLShadowMapSerializer.prototype = Object.create(BaseSerializer.prototype); +WebGLShadowMapSerializer.prototype.constructor = WebGLShadowMapSerializer; + +WebGLShadowMapSerializer.prototype.toJSON = function (obj) { + var json = BaseSerializer.prototype.toJSON.call(this, obj); + + json.autoUpdate = obj.autoUpdate; + json.enabled = obj.enabled; + json.needsUpdate = obj.needsUpdate; + json.type = obj.type; + + return json; +}; + +WebGLShadowMapSerializer.prototype.fromJSON = function (json, parent) { + if (parent === undefined) { + console.warn(`WebGLShadowMapSerializer: parent不允许为空!`); + return null; + } + + var obj = parent; + + obj.autoUpdate = json.autoUpdate; + obj.enabled = json.enabled; + obj.needsUpdate = true; + obj.type = json.type; + + return obj; +}; + +export default WebGLShadowMapSerializer; \ No newline at end of file