From b367eb477a62821c42e79fb7ab689a1abd440ed5 Mon Sep 17 00:00:00 2001 From: liteng <930372551@qq.com> Date: Wed, 19 Sep 2018 20:49:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E5=85=89=E6=BA=90=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShadowEditor.Web/src/Options.js | 2 +- .../src/component/LightComponent.js | 4 ++ .../src/editor/menubar/AddMenu.js | 43 +++++++++++++------ .../src/event/menu/add/AddPointLightEvent.js | 3 +- .../src/object/light/PointLight.js | 19 ++++++++ 5 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 ShadowEditor.Web/src/object/light/PointLight.js diff --git a/ShadowEditor.Web/src/Options.js b/ShadowEditor.Web/src/Options.js index 04117760..4f3d9886 100644 --- a/ShadowEditor.Web/src/Options.js +++ b/ShadowEditor.Web/src/Options.js @@ -15,7 +15,7 @@ function Options(options) { // 帮助器配置 this.showGrid = true; // 是否显示网格 this.showCameraHelper = true; // 是否显示相机帮助器 - this.showPointLightHelper = true; // 是否显示点光源帮助器 + this.showPointLightHelper = false; // 是否显示点光源帮助器 this.showDirectionalLightHelper = true; // 是否显示平行光帮助器 this.showSpotLightHelper = true; // 是否显示聚光灯帮助器 this.showHemisphereLightHelper = true; // 是否显示半球光帮助器 diff --git a/ShadowEditor.Web/src/component/LightComponent.js b/ShadowEditor.Web/src/component/LightComponent.js index b1937996..b9ea5339 100644 --- a/ShadowEditor.Web/src/component/LightComponent.js +++ b/ShadowEditor.Web/src/component/LightComponent.js @@ -278,6 +278,10 @@ LightComponent.prototype.updateUI = function () { LightComponent.prototype.onChangeColor = function () { var objectColor = UI.get('objectColor', this.id); this.selected.color = new THREE.Color(objectColor.getHexValue()); + var helper = this.selected.children.filter(n => n.userData.type === 'helper')[0]; + if (helper) { + helper.material.color = this.selected.color; + } }; LightComponent.prototype.onChangeIntensity = function () { diff --git a/ShadowEditor.Web/src/editor/menubar/AddMenu.js b/ShadowEditor.Web/src/editor/menubar/AddMenu.js index 6ec3b4ae..66ecf6aa 100644 --- a/ShadowEditor.Web/src/editor/menubar/AddMenu.js +++ b/ShadowEditor.Web/src/editor/menubar/AddMenu.js @@ -1,4 +1,6 @@ import UI from '../../ui/UI'; +import AddObjectCommand from '../../command/AddObjectCommand'; +import PointLight from '../../object/light/PointLight'; /** * 添加菜单 @@ -156,9 +158,7 @@ AddMenu.prototype.render = function () { id: 'mAddPointLight', html: '点光源', cls: 'option', - onClick: function () { - _this.app.call('mAddPointLight'); - } + onClick: this.addPointLight.bind(this) }, { xtype: 'div', id: 'mAddSpotLight', @@ -183,16 +183,6 @@ AddMenu.prototype.render = function () { onClick: function () { _this.app.call('mAddRectAreaLight'); } - }, { - xtype: 'hr' - }, { - xtype: 'div', - id: 'mAddPerspectiveCamera', - html: '透视相机', - cls: 'option', - onClick: function () { - _this.app.call('mAddPerspectiveCamera'); - } }] }] }); @@ -200,4 +190,31 @@ AddMenu.prototype.render = function () { container.render(); } +// ------------------------- 环境光 ------------------------------ + +// ------------------------- 平行光 ------------------------------ + +// ------------------------- 点光源 ------------------------------ + +AddMenu.prototype.addPointLight = function () { + var editor = this.app.editor; + + var color = 0xffffff; + var intensity = 1; + var distance = 0; + + var light = new PointLight(color, intensity, distance); + light.name = '点光源'; + light.position.y = 5; + light.castShadow = true; + + editor.execute(new AddObjectCommand(light)); +}; + +// ------------------------- 聚光灯 ------------------------------ + +// ------------------------- 半球光 ------------------------------ + +// ------------------------- 矩形光 ------------------------------ + export default AddMenu; \ No newline at end of file diff --git a/ShadowEditor.Web/src/event/menu/add/AddPointLightEvent.js b/ShadowEditor.Web/src/event/menu/add/AddPointLightEvent.js index 261be78d..3bb3fc42 100644 --- a/ShadowEditor.Web/src/event/menu/add/AddPointLightEvent.js +++ b/ShadowEditor.Web/src/event/menu/add/AddPointLightEvent.js @@ -1,5 +1,6 @@ import MenuEvent from '../MenuEvent'; import AddObjectCommand from '../../../command/AddObjectCommand'; +import PointLight from '../../../object/light/PointLight'; var ID = 1; @@ -33,7 +34,7 @@ AddPointLightEvent.prototype.onAddPointLight = function () { var intensity = 1; var distance = 0; - var light = new THREE.PointLight(color, intensity, distance); + var light = new PointLight(color, intensity, distance); light.name = '点光源' + ID++; light.position.y = 5; light.castShadow = true; diff --git a/ShadowEditor.Web/src/object/light/PointLight.js b/ShadowEditor.Web/src/object/light/PointLight.js new file mode 100644 index 00000000..3fef212b --- /dev/null +++ b/ShadowEditor.Web/src/object/light/PointLight.js @@ -0,0 +1,19 @@ +/** + * 点光源 + */ +function PointLight(color, intensity, distance, decay) { + THREE.PointLight.call(this, color, intensity, distance, decay); + + var geometry = new THREE.SphereBufferGeometry(0.2, 16, 8); + var material = new THREE.MeshBasicMaterial({ color: color }); + var mesh = new THREE.Mesh(geometry, material); + + mesh.userData.type = 'helper'; + + this.add(mesh); +} + +PointLight.prototype = Object.create(THREE.PointLight.prototype); +PointLight.prototype.constructor = PointLight; + +export default PointLight; \ No newline at end of file