From bf1521ecf3702f0c8266a36992d2ef2e4b03ae9f Mon Sep 17 00:00:00 2001 From: tengge1 <930372551@qq.com> Date: Sun, 15 Dec 2019 20:18:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=8B=E9=9B=AA=E5=A4=A9?= =?UTF-8?q?=E6=B0=94=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../assets/textures/particles/raindrop-1.png | Bin 0 -> 7764 bytes .../assets/textures/particles/raindrop-2.png | Bin 0 -> 8227 bytes .../assets/textures/particles/snowflake1.png | Bin 0 -> 861 bytes .../assets/textures/particles/snowflake2.png | Bin 0 -> 1320 bytes .../assets/textures/particles/snowflake3.png | Bin 0 -> 1395 bytes .../assets/textures/particles/snowflake4.png | Bin 0 -> 664 bytes .../assets/textures/particles/snowflake5.png | Bin 0 -> 893 bytes ShadowEditor.Web/src/event/WeatherEvent.js | 47 +++++------- ShadowEditor.Web/src/object/weather/Rain.js | 35 ++++++++- ShadowEditor.Web/src/object/weather/Snow.js | 72 ++++++++++++++++++ 11 files changed, 125 insertions(+), 31 deletions(-) create mode 100644 ShadowEditor.Web/assets/textures/particles/raindrop-1.png create mode 100644 ShadowEditor.Web/assets/textures/particles/raindrop-2.png create mode 100644 ShadowEditor.Web/assets/textures/particles/snowflake1.png create mode 100644 ShadowEditor.Web/assets/textures/particles/snowflake2.png create mode 100644 ShadowEditor.Web/assets/textures/particles/snowflake3.png create mode 100644 ShadowEditor.Web/assets/textures/particles/snowflake4.png create mode 100644 ShadowEditor.Web/assets/textures/particles/snowflake5.png diff --git a/README.md b/README.md index 62762f6f..a7cd41fa 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Supported Languages: 中文 / [繁體中文](README-tw.md) / [English](README-en 10. 使用`点击场景添加模型`方式时,模型放置到场景之前出现一个预览效果。 11. 新增编辑工具栏:撤销、重做、清空历史记录、复制、删除。 12. 几何体菜单添加文字功能,修改为不缩放的文字。 -13. 新增添加设置:无、下雨。 +13. 新增添加设置:无、下雨、下雪。 ## 技术分享 diff --git a/ShadowEditor.Web/assets/textures/particles/raindrop-1.png b/ShadowEditor.Web/assets/textures/particles/raindrop-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc56adb53e1b5fb215aa3b6c60e67ea5fa4ef53 GIT binary patch literal 7764 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 PwgWU&bd@U=VIltk(gA%L literal 0 HcmV?d00001 diff --git a/ShadowEditor.Web/assets/textures/particles/raindrop-2.png b/ShadowEditor.Web/assets/textures/particles/raindrop-2.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc71dcb9f223c6a4a3205d4be85da42d238fefe GIT binary patch literal 8227 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 VD1!a>LHzovPDHLkV1l0ZxAOo1 literal 0 HcmV?d00001 diff --git a/ShadowEditor.Web/assets/textures/particles/snowflake1.png b/ShadowEditor.Web/assets/textures/particles/snowflake1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5750f70d48c590687fe6484bc6ea39232282e11 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U@Q#q32_B-|NsC0@83U0M#d8- zPADoWGBGigl$2CeRo%OHkA;PWnVI?e_3MuwJzBPGSwlm^g$oy~t*zPE*aQUyw{G1! zb?VfsSFaWq7dJIErKP2P|NdP}Oe{4u)!yEIngfEG!fk7e8|3$fZk{{{H>@=FOWGD^{#tz53RzTfV-&Z{NPH zudioiWnH^=t&fk7tE=nc#fz1dl|w>8&YU@O^5n_f+}wu`AIizeIXO9C>k_fBxLJZ=b%t{>6(Ixw*M-+_=HX$r&FXpP89yX=w@ZIMCNX|MKwgsHv#| z1L6Mt`&n68;o;$Ye0)I1oIQK?z<~qV+1a~x?b@(m1JKuBzI*|C2k1vhNlBoa&CSh$ zfir8?tO*k)q@<((J^SLti;Rp6pbO{BnF9>HU%!4;R#pN-4;VPWkc^Fu<=&rg255J1 zNswPK&_-$lcXQ7Nz_|7Bba4!+h}$~(=%m*MA}+sg@fq_N1Ht3!NzDdl&V2a#_~Wt8 zw?1K(Q6*DXiLY8*9VoGElKsIeVe@pH9NAK09jmAOnf;a5M{$v@k@Rfd58oI}MGcMz zMYX;vN?3CFNb`%JNADV^{)qVW_R0%Kx7U^z)C^C~U!?b76OZ8B_6LQ!0p($yF-+I& zW+}Yp3Nw3^_oYCnLgMT{6Bl8AU6;Z|JQHufP`q_daCb%BlNfw^uU1FP%U9{RfNMPKTPT zTgJ(Me7nDJCQQ35GvB@7;mLpq9z*Rts_jgD(-`NhaWJcj*s8phZ<}C|Bj1cOhrjYB zZ=ap;{p6g5S2yG{-nL6fFXxxC67Q>J`2Ww@*}Uj|gTe~DWM4fuvN9p literal 0 HcmV?d00001 diff --git a/ShadowEditor.Web/assets/textures/particles/snowflake2.png b/ShadowEditor.Web/assets/textures/particles/snowflake2.png new file mode 100644 index 0000000000000000000000000000000000000000..000f93ef9c34228f4f8aed7eca6caa5213648513 GIT binary patch literal 1320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V2Td#32_B-|NsBb#KgqU&(Fxn zSXx?|las^E&AoW>;<>b93`GYu21Uf4-%qMMy}9nVC5=GxO-tqc2{(h>niFfB(Ly zsHnZY{frqirca-~d-v`sQ>Hw6^vKN2?D_NOGBPq3E?m&m)HE+9#vooiuX!OF_Y!NH-cs~a93zG~H~z`($}ckgz0cl-JIwY9a~ym|A_ zpFe;9{;jB}h>D8ZzI{78JNt?iD|mQ#u3x`yZEYPNAMfhwx^LgUH*enP>+5rIaVaV) zR#sMCxpJkds%qlIiDhMF2M!#lt*uQ?PF}ZeU0+|{g9i@;1O&c(`Lbcd23}rXNlD2Q zCr(_tbZN(q9kH>oUS3{LpFT}bPrr8UT7G`Mudi=wYwL#(A3{PxL_|a!931rY^lWWy zKY#vw{P=M}LBZwAmmfKDgUg&=gytmzkk2DxVXQ+|FL7omMvR$`SN82 z1qC)Xwr$(Csj8}4T3T-1x^>BtB}PU@3l=Omb?Q_>L4k^jiiCv3q)C&2F$jz}pi6*( z85tP~w4$h}C^a=TI5-&SU=I(EhK2?g7ng+#7aAKIXJuspV@gd;?cl+Kz<30P2GE0I zVq!qI85$Z+n>Gy?5i@7b1cs!EiAj5VJ1{OXGBSY41DGU$Apnfu!-o$iB_%~fL;#%% z41b{CfgvU=EZo)A1@tK}NP$iThR?HS&nhQO`VVy6w2~md;D3V>Oy-^`0t~%po-U3d z6>&=^2TxWB6lwV!7JAw2*tXuSxwp6Fe*PliecP<=nw$TZZz193KK5_EPY{({F8A*2 zY<32YM2-o+PE7x$(&x`3sIf#ONWjzfNPz^$(E?Ku8+MI0CIN+}Unco2(`KbH{@Qfj z;8_RTm-koBKD*ZRy7I-9Z6U_7Kg5(&S&iy=cSpAzU%6iTl6s(lkyAu!^5nR@N%<$w z2JMwyqII%S;cVgwiTdQ&HfGJI&Dvd4ZIWir&HcDhYlXIW=F>|HEULbJS$45J`^((l zR}7z;UAXk^oo7ivrm}lwj6>QgpG@XsJ1-qy{&9>VbW!W+E7R$(4&wQJ^dso$ZLGioocdNgxV#<;Kwwd`_v&{iX1viJU3;!HeD`Ppe_*(MuyAD3` zesk88+u5f!zTWa?>h)r^W&Dmt7A5)TzCF0p{(1f+@4bb;3LY+cxcZs2-rocMu_wHL z9}vHFG3()hc(>@YqAl!7S(OUg!vq*!aDVCG{yx83c>a;ovkU(IXR3O%Dz}+UCLNe2 O89ZJ6T-G@yGywpoKCH$7 literal 0 HcmV?d00001 diff --git a/ShadowEditor.Web/assets/textures/particles/snowflake3.png b/ShadowEditor.Web/assets/textures/particles/snowflake3.png new file mode 100644 index 0000000000000000000000000000000000000000..363af5dae8f2719df0d20857696929f9b28b478e GIT binary patch literal 1395 zcmd6l`7;}67{?>dxgFG)m8iUzu0%?ecyS0c;Dywem`HPpO2@SGC~;wfv6D) zcrv(A-?ox0IPnh)1rP`{-_JYH1C%ExCo(cJP$*PZR(5c3u&=LAPfxF-qhoArth%~d zOG|5HWF#ggrn0iq$H(X0yLV_b+TPyY+uPg5#)iw~B9X}8;9yl%Rk2vy)YODRp{P{q zREIQcFwA*|TTi zaQN=-ZdFxPetv#MMMYd(9DzV^bad3v&`3>9wX?IUsi}d%V4aYHMo~i9~@w;N|6IW@fgzxv8L_U~O$J zl}Z;E7e_}&EiEmrtgL!_d#_x%!sGGU+S&{Z3<3fI($mu;A|jTSmYzR*uA|yKA*3tsVR|2)YQ~+a&pSc%blH_OG`_mqoXr3Geshi zg@r{%Muv-v%hAyh27_sBZIzRg>+kQUP$;ghuG7=gy1Ke_I$d5~-pI(PzP{ev+?+0uX?jzrR1A3HpNP zOePaR0UGu7^~q#1APXh|2*BheB_#+10+dA& zifU_XfqW$;CEx%c3xoiTAREca$y-}nz%F35lamuj8ej^7N5|HUf^ln8$UXsI|JMty z$oL%skvSpa-2&<1kIUaoe(we!Z0p%T)X_xqi(NEP7p-mOYHWk$v zFyH(nGWqG9wjX{iOUS6^H+0-s&Vy0BrdHLlQgv}-v!eed=~b)b_1jxf!3+HGa2JlX zAO9lCl5}QcA>IQi;s!8RWw#gfoNaa^NQv;sgsH2l5td5ylh^hd&K0XFKT*r5PLHr$ z>oMF5dJjg^KmjeVbwK0TEXUNvk9vah73{B_8{=v=7xL|jz8hm&T@K;+hMcx4g%?l_ z$(EPHyJuqV2;s^l|Cq>e!UyJ|gkMJgBKK+giXdkkwrS&{KZOhY==h;D!M)Gch~h6- zKks#}L!~J%1V*b_o3>BFNH!9j*dAKVdCR-N8R`8^qRa1n8luuH%Vzy8z39ijzUzm7 z0YhzzkzbM|!W(ferP?MfA6|>NH`n)4bKW3B#SMBn(X+eEiCdpr73_@uFf?buYMB2f z6;z~%QQ7O5_`>05?hkowi}BLQCL9F%@n>ENVdw)48b&xiY(H#I5~8!0ugmdLvMO&c QgU~{V9zOUd?pJgF18{WF2LJ#7 literal 0 HcmV?d00001 diff --git a/ShadowEditor.Web/assets/textures/particles/snowflake4.png b/ShadowEditor.Web/assets/textures/particles/snowflake4.png new file mode 100644 index 0000000000000000000000000000000000000000..03b357e225cb0536e6d4b5e07feb73c33441f600 GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy&jWlyT!Hle|NsB}`^Ut@#LUdh z&dzRQWAps^^VrzfxVX5xckc!S1o-*+{r&rQ_wL;%PMm0KYkT+Z9U~*-uV24@{`~p$ z>C@icUTbUXsZ*!2va(K`I1y+X&?um>Ks7*P|NQv_)XT!c^5e%3Ha0e(7NEvet5yLO z|Ni|OXd@RF*Xh%zJ3BkQy}chjdIWSpNJxm0k&&XJ;=_jztE#Hf)6*wUp8Vy@m*nK+ zzP`R^&z`xvyT5+@T0ud9mzVeD%a=MjI<2j(moHyFbLNbsq~xSYlO!Z0?%cWa_3PK- z;$on~X3m@`&lTkV!%T4TU7W#^ZBx4q0_ zbYJfMKJWX#|J6)VdUDK@PbV#&xb@ANURRYV=R~ATy6ko>3M^`>;P|_zn`;&umukyt zAs5M)*KaIO<)60unwRYtfm_ygJMDzU`W+5_d&+gdcZER8ZE=qaocq72WxG61GczhS zIc4Hdz?b}cU9P~)&Ob6-EhjY<$|OH*GtXUXpEWluES8%~g~9J=RkMp^A{$?Uo~+(G zQ#-HSD=zbi@bPh$*(!d&u(VS5^?@dt8;jU4Rk?K(YQ+4y>)t&vEOAlW#HF9iHtt!Z zCODJj`IRrX&u~sZ_T`pe?w6|mZlKaljnN%V-e_ni?YWsc* zm)W2Anst3G=Z0>VnlB)hwree49N)ixXJ=;@5fO24aAh=_=}bLam1_b)p;`}+0k>(;H))zvL3D$>x<(9zL3dGh3^PoM7G zxx>Z9rLV7_pPwHY8Cg?PGkyB>?(S}3VPQo@#r^yD*Vfj)fB)Xe$;r*lO-_w!Xgp-o1MZ7cMk2 zGh4D`$;FEo*RNkcZQ3+bQ`6$&;%CpEnVXxxefw5kUVh)ceJLp^K|w(uK76pXwSDp8 zg_M-kgb5SG#l^$J!yy3z3=LqI$jHcWb94Xx{d?!moj@M}UHk3ZH(*daeE3jBMFr?` zV2EwowkKqa!~*zd$_8VW3&jB|(0{z%Zc|IIYp52#m`LPZ!6K zinz6tS^FOwh_s~Vu%C`iJC+O#sT#lOF9rVD&zWQvWS$v1w`9JEtMbj6o%d`QgzR5x zFRxZ^&-Vy>JpaOrE{!+yrP?#+Ma2oSW}a8LG(p~aj;E2!WRjbArh&ybwUd#>k8OSI{T+pu@9pa4Xn$UR+=|tzOyTOn6t__Ixz$f< zcZi-Zy&JIlo1KfpO*@gw6nW?JSIv(54`)S4J=whQTx`WTas5P-xR0hG?RIN;i$xSg z?tOUsVEUa6Ns { - v.y = v.y - v.velocityY; - v.x = v.x - v.velocityX; - - if (v.y <= 0) { - v.y = 60; + if (this.weather === 'snow') { + if (this.snow === undefined) { + this.snow = new Snow(); } - - if (v.x <= -20 || v.x >= 20) { - v.velocityX = v.velocityX * -1; - } - }); - - this.rain.geometry.verticesNeedUpdate = true; + this.object = this.snow; + app.editor.sceneHelpers.add(this.snow); + } }; -WeatherEvent.prototype.updateSnow = function () { - +WeatherEvent.prototype.onAfterRender = function () { + if (this.object) { + this.object.update(); + } }; export default WeatherEvent; \ No newline at end of file diff --git a/ShadowEditor.Web/src/object/weather/Rain.js b/ShadowEditor.Web/src/object/weather/Rain.js index 169654ac..97c1f1c1 100644 --- a/ShadowEditor.Web/src/object/weather/Rain.js +++ b/ShadowEditor.Web/src/object/weather/Rain.js @@ -1,8 +1,14 @@ /** * 下雨 */ -class Rain extends THREE.Points { +class Rain extends THREE.Object3D { constructor() { + super(); + + this.createPointClouds('assets/textures/particles/raindrop-3.png'); + } + + createPointClouds(url) { let geometry = new THREE.Geometry(); let range = 40; @@ -21,12 +27,35 @@ class Rain extends THREE.Points { size: 3, transparent: true, opacity: 0.6, - map: new THREE.TextureLoader().load('assets/textures/particles/raindrop-3.png'), + map: new THREE.TextureLoader().load(url), blending: THREE.AdditiveBlending, sizeAttenuation: true, color: 0xffffff }); - super(geometry, material); + + let points = new THREE.Points(geometry, material); + points.sortParticles = true; + + this.add(points); + } + + update() { + this.children.forEach(n => { + n.geometry.vertices.forEach(v => { + v.y = v.y - v.velocityY; + v.x = v.x - v.velocityX; + + if (v.y <= 0) { + v.y = 60; + } + + if (v.x <= -20 || v.x >= 20) { + v.velocityX = v.velocityX * -1; + } + }); + + n.geometry.verticesNeedUpdate = true; + }); } } diff --git a/ShadowEditor.Web/src/object/weather/Snow.js b/ShadowEditor.Web/src/object/weather/Snow.js index e69de29b..0726f205 100644 --- a/ShadowEditor.Web/src/object/weather/Snow.js +++ b/ShadowEditor.Web/src/object/weather/Snow.js @@ -0,0 +1,72 @@ +/** + * 下雪 + */ +class Snow extends THREE.Object3D { + constructor() { + super(); + + this.createPointClouds('assets/textures/particles/snowflake1.png'); + this.createPointClouds('assets/textures/particles/snowflake2.png'); + this.createPointClouds('assets/textures/particles/snowflake3.png'); + this.createPointClouds('assets/textures/particles/snowflake5.png'); + } + + createPointClouds(url) { + let geometry = new THREE.Geometry(); + + let range = 40; + + for (let i = 0; i < 50; i++) { + let particle = new THREE.Vector3( + Math.random() * range - range / 2, + Math.random() * range * 1.5, + Math.random() * range - range / 2); + + particle.velocityY = 0.1 + Math.random() / 5; + particle.velocityX = (Math.random() - 0.5) / 3; + particle.velocityZ = (Math.random() - 0.5) / 3; + geometry.vertices.push(particle); + } + + let color = new THREE.Color(0xffffff); + + let hsl = { h: 0, s: 0, l: 0 }; + color.getHSL(hsl); + color.setHSL(hsl.h, hsl.s, Math.random() * hsl.l); + + let material = new THREE.PointsMaterial({ + size: 10, + transparent: true, + opacity: 0.6, + map: new THREE.TextureLoader().load(url), + blending: THREE.AdditiveBlending, + depthWrite: false, + sizeAttenuation: true, + color: color + }); + + let points = new THREE.Points(geometry, material); + points.sortParticles = true; + this.add(points); + } + + update() { + this.children.forEach(child => { + let vertices = child.geometry.vertices; + + vertices.forEach(v => { + v.y = v.y - v.velocityY; + v.x = v.x - v.velocityX; + v.z = v.z - v.velocityZ; + + if (v.y <= 0) v.y = 60; + if (v.x <= -20 || v.x >= 20) v.velocityX = v.velocityX * -1; + if (v.z <= -20 || v.z >= 20) v.velocityZ = v.velocityZ * -1; + }); + + child.geometry.verticesNeedUpdate = true; + }); + } +} + +export default Snow; \ No newline at end of file