From 514c0f1b658a93a9455169147bf23e6103b604b6 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Tue, 12 May 2020 12:35:05 +0300 Subject: [PATCH 01/47] Flysky FS-A8S article (#229) * docs: Add FS-A8S article draft * docs: Fix image links * docs/flysky_a8s: Make images appear smaller * docs: Add animated images * docs/flysky_a8s: Proofreading * docs/flysky_a8s: Sync up header to summary entry * docs/flysky_a8s: Add Flysky FS-A8S article (en) * docs/flysky_a8s: More proofreading --- docs/assets/flysky_a8s/01_remove_cable_fs.png | Bin 0 -> 53614 bytes docs/assets/flysky_a8s/02_remove_cable_fs.png | Bin 0 -> 53079 bytes .../flysky_a8s/03_remove_cable_pixracer.png | Bin 0 -> 62585 bytes .../flysky_a8s/04_remove_cable_pixracer.png | Bin 0 -> 63209 bytes .../flysky_a8s/05_remove_cable_coexpix.png | Bin 0 -> 54016 bytes .../flysky_a8s/06_remove_cable_coexpix.png | Bin 0 -> 59795 bytes docs/assets/flysky_a8s/07_wirecuts_1.png | Bin 0 -> 70774 bytes docs/assets/flysky_a8s/08_wirecuts_2.png | Bin 0 -> 65224 bytes .../flysky_a8s/09_wirecuts_stripped.png | Bin 0 -> 66958 bytes docs/assets/flysky_a8s/10_heatshrink.png | Bin 0 -> 27102 bytes docs/assets/flysky_a8s/11_solder_scheme.png | Bin 0 -> 70270 bytes docs/assets/flysky_a8s/12_heatshrink_heat.png | Bin 0 -> 62253 bytes docs/assets/flysky_a8s/13_cable_twist.png | Bin 0 -> 58859 bytes docs/assets/flysky_a8s/14_coexpix_rcin.png | Bin 0 -> 132794 bytes docs/assets/flysky_a8s/14_pixracer_rcin.png | Bin 0 -> 123949 bytes docs/assets/flysky_a8s/15_bind_key.png | Bin 0 -> 72003 bytes docs/assets/flysky_a8s/16_bind_indicator.png | Bin 0 -> 99773 bytes docs/assets/flysky_a8s/16_blink_fast.gif | Bin 0 -> 272512 bytes docs/assets/flysky_a8s/16_blink_slow.gif | Bin 0 -> 272512 bytes .../flysky_a8s/17_controller_rxbind.png | Bin 0 -> 286683 bytes docs/assets/flysky_a8s/18_qgc_radio.png | Bin 0 -> 146870 bytes docs/assets/flysky_a8s/19_qgc_channels.png | Bin 0 -> 158503 bytes docs/en/SUMMARY.md | 1 + docs/en/rc_flysky_a8s.md | 107 ++++++++++++++++++ docs/ru/SUMMARY.md | 1 + docs/ru/rc_flysky_a8s.md | 107 ++++++++++++++++++ 26 files changed, 216 insertions(+) create mode 100644 docs/assets/flysky_a8s/01_remove_cable_fs.png create mode 100644 docs/assets/flysky_a8s/02_remove_cable_fs.png create mode 100644 docs/assets/flysky_a8s/03_remove_cable_pixracer.png create mode 100644 docs/assets/flysky_a8s/04_remove_cable_pixracer.png create mode 100644 docs/assets/flysky_a8s/05_remove_cable_coexpix.png create mode 100644 docs/assets/flysky_a8s/06_remove_cable_coexpix.png create mode 100644 docs/assets/flysky_a8s/07_wirecuts_1.png create mode 100644 docs/assets/flysky_a8s/08_wirecuts_2.png create mode 100644 docs/assets/flysky_a8s/09_wirecuts_stripped.png create mode 100644 docs/assets/flysky_a8s/10_heatshrink.png create mode 100644 docs/assets/flysky_a8s/11_solder_scheme.png create mode 100644 docs/assets/flysky_a8s/12_heatshrink_heat.png create mode 100644 docs/assets/flysky_a8s/13_cable_twist.png create mode 100644 docs/assets/flysky_a8s/14_coexpix_rcin.png create mode 100644 docs/assets/flysky_a8s/14_pixracer_rcin.png create mode 100644 docs/assets/flysky_a8s/15_bind_key.png create mode 100644 docs/assets/flysky_a8s/16_bind_indicator.png create mode 100644 docs/assets/flysky_a8s/16_blink_fast.gif create mode 100644 docs/assets/flysky_a8s/16_blink_slow.gif create mode 100644 docs/assets/flysky_a8s/17_controller_rxbind.png create mode 100644 docs/assets/flysky_a8s/18_qgc_radio.png create mode 100644 docs/assets/flysky_a8s/19_qgc_channels.png create mode 100644 docs/en/rc_flysky_a8s.md create mode 100644 docs/ru/rc_flysky_a8s.md diff --git a/docs/assets/flysky_a8s/01_remove_cable_fs.png b/docs/assets/flysky_a8s/01_remove_cable_fs.png new file mode 100644 index 0000000000000000000000000000000000000000..296e418bc1412eb8ed9fec8a4f28e0526d403a1b GIT binary patch literal 53614 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%0Dj;I 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 HDWM4fT#CUS literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/02_remove_cable_fs.png b/docs/assets/flysky_a8s/02_remove_cable_fs.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c7dc8e77e03d4d1a4c92737dd9cf5b7231e87e GIT binary patch literal 53079 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%0DnrFX0p%;bWAypi-BSkpYXfBgkZz@w^R8 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 W2Y4p-KLQ3YXsPQzsZxCr^}hi1DxnVm literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/03_remove_cable_pixracer.png b/docs/assets/flysky_a8s/03_remove_cable_pixracer.png new file mode 100644 index 0000000000000000000000000000000000000000..deabb0bab1f990dc6a79316201015819bdc3d4c9 GIT binary patch literal 62585 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%0Ddl9Yx8pd!HK! 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%0ADK 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 ZL9+idfc2lcSAX8@fv&Mmo%Z9H{|CfPCYAsI literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/04_remove_cable_pixracer.png b/docs/assets/flysky_a8s/04_remove_cable_pixracer.png new file mode 100644 index 0000000000000000000000000000000000000000..865e54889555575cbc280672527ef553cb508aa3 GIT binary patch literal 63209 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

M*FVghy--}$e2yRgZ2zWQ7NFPig=nS>SO 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

jWlCpd2pN1kHo-0y9g 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 UGz2Et#e>4e)78&qol`;+09LpkzW@LL literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/12_heatshrink_heat.png b/docs/assets/flysky_a8s/12_heatshrink_heat.png new file mode 100644 index 0000000000000000000000000000000000000000..74eb1688eeb1921cd745b72bfe28a8dbbfd2be7f GIT binary patch literal 62253 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/13_cable_twist.png b/docs/assets/flysky_a8s/13_cable_twist.png new file mode 100644 index 0000000000000000000000000000000000000000..b502acaea4f717f6973caa1915254b82b8f430cd GIT binary patch literal 58859 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/14_coexpix_rcin.png b/docs/assets/flysky_a8s/14_coexpix_rcin.png new file mode 100644 index 0000000000000000000000000000000000000000..c131254f60bc520d221e47aa5af46f0cb7bf3352 GIT binary patch literal 132794 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 ARj|kU`(SxX62YgK^ism)9K44 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 z j&yVh#u8Nm1cS?5MavXWl{IfcQg+$0K%Hkn@EZw>bf)W6#TeIa(|&KozFH z?suH-QaB(%=VGeVz+SgFP7ZGSw*F{}xiaz2V}|pF>E?!guh+WziOb!97wm!Gs{xjV zWh&HqL-}nwfmHPW_hA2xrU6YezrWrxiSoa`(n7?@l_)+UBd)DWMq@_ z(6NV7dwDs3*H&>mj_1Aq;*Fq%W(7UT^5g_s!P!r7MKoU#AGys!MZkktEOvlJ5dm6D zKp~Hw+M;-0RGmL|GnU`4h`Fz6filaJDb&sN-B)kEuEU8}< z4R+$iJ!gMhK0MRc!jH~Ak+=Xhh@I7hV*bkQ^OTc{*c9=P(S$dO>OIcC0r0M2IoqP3 zI3puVn{_D)3{`K$E}odx5{Y{wj(VbzlX)TMT1@|1$vu(yFdEL=q>)KUN>WwU7e4^Z zCOj-_uUQH0WWIQ4P$-T@TPs%d?Zj3Hds{*(=MQycXUmhwlqB>!sVnEGbFMj;y_5ue zsLK>Ez+(8BOtGZ<&r^6ipkxFGqGksM7>D-CGwEtwYcNc>b# zmona9p;-U5;CbHD-FN5k#G2Q`d8)#yCxZsP1Qhpiq=2PC(lr3AXP_onzlC zM{r`rKcI6nL)xbVw73JDj<+?{bQCl8K@TK2xGafbm4mBUt3QVlCTm6~U=hJCd2cP4 z1N6dP+q1U$!YWS!!uaE4p-7ydNMd6~bP8U+n+yl}rqo2vIWMUWkDa>%g^q7d>^9se z=qJBzXQwNYUMJ52@P!Hg#`#8^vzNke?2Nv?qFc0k(*>05&gIMx?4#$&KnZI0g8$`|Sj&eMSD}5X!FsDIQIs?tAsWT&Un?;uNWU6u^ZKz2}UtFUFaPJ(f zIJqov1WFd?da|bhL)77!;dLCTh!hGILn6giB9e6}bt%uAc)4moO;yZCu5J}LetyH1 z8`(o{;<@z>8C!a6m}KB=?}# z`3i}Sn|T%3&BgVb=F2`av*36IL6+C?aVH{I1+88>X@#E5a-1A+Ogo7XgYQ;SH9>3y zRUdS`v@Tagka-Wf{1RfKvYAx!0jfuSta>X_&Jcs*jH{O85;-K@jtsZY7Cvf=pA;FY zJ#n^08D6eBu?w0rteE-w;0;DG0!&BK{`c9pPh3gIHnRjGA4O7!^4x&KY9D@b8KC|R zD0+865HsuVZeFFfVC7U}Hou_`v;wFnF}qT`GEhumfPbx+pIlNnW8j3Q{FvY}a0hUK zV`@ks;I;(Vjx64h=(^Q!4_d%04s8$b@%{>D6f`6u__D+${ED%Kq7^|(W{X)L3WbMx z=8|-6wm2+9;s)G7-|z+3ZO|O7@VbzD#%20?Nu$v#5aP#oxGL5zpo}S!JRM8)Rn?)I za3eHSsY%5*nR^6g&iQN3H7gQ5C5Mk|HkP$Ue_)l%Ob%+WAge24YVgMjR@Ll=ti$RY1zi-0wK`zGPM zds2uB;HQBd;YJ}pLOIhrfQ}%Ma44xs%clHRgMxjWFp3Rho2XoFEJw=a(?)P5 zja-3xz!P9blo<544*sR*V_9avAAV^pNEgJBH7kGzsr-m~w>Z+0@^h&9qBOXnPj`nj-z052)3#ibhv;e#I>LkG=eq&tGRz?DIe0jY5#9 z=Z2Xr@d@1scL6tX_*)V+^52PMpvv$tPB;!m17p17Nw=rvntdfnJNHnfrQ->O#4Nks zW}z`GC$snCtvqXEWduVK!!WW5LIP@yoBznc`EeDhI2hzS?SkOv+^_ZsQhkLzmEbugJwEtoY^(| z&Ekxy8)KBxb7CYOaQ#TdU)7E6x}u)IN)}~>$XpOU9&~OS!3voJ31TS}4Rl;8eG;89 zVM7wq(&@&Jo-GqM*4W9TjWu6HaDz#?$%g4WLecNw(8vP{h`YHo<(zf0j3{8ag<3T` zEHx|_3w~$baRThCz~5PadE~t6`3^~S_g*9;WQE(pFfUGbkpXd$n!v;Wa3pJ1@rnD{ zN)Y|;S;=(=XjR21s;t}nQ_VkrNPO$-W5>p9bQw(GkLE&2Q1wgaWvdocu8uY#X%toh zM^tUT_>3M&`8eybR67}9wKhYZB1=k8wK4{2G6)1ZNCm4Ax8@uSbJg~z012V%e^i6_ z0HNgP5!d+tldU>$Hf6H7G)zhfMg3IP zhaqd(_fR8|$2%bvL4us4`1&*5+8FeVK_F1;UDW{zb55}(PXgbH){3)0b~r+R(SzjC zVUC98pH9>*8dxn1OngbWPD8s9``(Am*p2TFhb_sP0dmnNN{GwON1yZm{y zxS9?YM6{0$HP~sC^alM=_F93=A5Y`2D>j|?Q1MT(M%Se#t}B>kxntDA+{x<@*a1AY zsDf5-uJn&np*VTS#O8LEv>CnxgyPJiNBV5S0c z@NTTg`F|tw%c6)Z8|Jz8t#uUSLNf06JQ>&IZ@J>hUHeQbZ8ktTYc`DQX{-q7`bCTj z%Y^`<5~2iue(i+?yGu5cK~J{B5=HnQui6PjTPD_VZv;~h^APLN$AM(2u0SgIFDK=~DV^IC z&B2}1jXvuaPvaHRG12`#+1BOkk24>Y+|Rv9%wGK0Q+y{uM^Qcg$ZI^I>^i>EVxV6N zz}DIHw6bZ+U2A`wT4@irHFiHkp#-n*TU@Pl#N?~|IHTuG;fqWIumu#Ep%mha#Wl>PJo`O1?| za_^8dHq_4T(Mi@3GF*g^r>D5hssTZx-m${lf)ZWOJ)sH7X4ncXH*BQ=#eZnyNm*~; z|4ybWX}q)axH~uX{vd!Tm!4AafAjS}3xVj1+&iq~W>E?me~ZWx_Zud2I9C)x;Plde zYty&1c<1wkv2#WBezaW8cAg!<-PzBeScFoTR?^)$?&AZsJ>11~?&qh|-um6sr9j9v`8d|z|M;fFR*|3Tr#JbBM+VJI_(oC?lD`mHD!n1A zRz8>!MoHpw5y#lmdhEZZkr67bjXxt@n0S7<2LvK}bCWtKWg&2`>>$?^sj!OoEnv8m z|J2ebjRcY%Z&6Neu5y4-LJ15x)AD9F(l3RHSmB!RAe!YqcB$L%_4K^<;>x%_LIc6m zP*a0i#vT`?*zebT9pWBXDe=Czf1Fttrb6>Wz)r)Zc0kKFWSN!DXS_dw1R=uX5#-r; zakLZI)3q|k!Br{Xo^EARLPEnT_rGXK)SJUW*%PfMk>5_h{jeTuB%t6xN12bb_{>@JjM@v!QZ9p}FKB~CJo-(TUhprGlhjtU`Cmh^ z0&Pg?2ei2SCwO?QsLRDKz)9LcY}w+l1gzkjmmd>Uq~8R*{I1iw}8U)=&V@37HUq_HxzPnvRUHq~=tm%+oCFCj@_i zNt`CKJAn+JE!R_R7*-0)Y|vvmIU=!~tSFF5!caAD@MF|4?S`ht-9ySuU|wC{ma7x3 zQ@awlM+VJg-UvCVs?*GmEjq1X^9$>4v$5cB&dQ_My z%@(Sv*6-7VWE>cZS^@odYURm+%XiP|&@s0k0vTz!@d8M5cc&K$WAfyO5FwYb6~k`ZrwtDc$AS+N^jUX zjdP6)v&}DYFzc%^ccQ_!6!$hfGtuL_MZ7AnRsXkv9<={yvS(B00W~f4+jKy>&+AKR zRn`a(Hul0sdTa`U6~4KZM<-*kjVeqMB_-?ogMJ7$J#RS#DJ=XmTB?A9IUq1l4&qv-amFOon>UpN@~GOaPCT}* zl1c%)@>W=_apQ*7=qHx+qg87QT|HyqKF39;;NFG|4{4&)aY2D?)~g zkCtLV^Th_R@iFa+%U_JWxvEmt1`gkV)vw&d(?Xb4Es?#YQ?qJYzFxjeV0i5eNOw3B z!WX~cu_9#PR&uW7g=_z7M1={hQXI}~i5OH`NFUoQDJho`I9KEYOebGHXRgv)fLSd#8FMK{4y=KuFma9wOQ8m+Yw9BRN%mV1)3S-#ta5N#6! zW&42QKY=H<_tM z7U)D%3qV;-5C-xW1~4;2E3QUb%e`WNB_>{Ot=InZQ^Wx}_*AwaVB|9@aW3G>cKxLU zU*FtpDJ`^P-Yf|(Y9Y{YI!U6Ono13tkWq}k7}bC>9#7i9nV@<;893oSno&<^PXK(v zIGt@iA1;PV9!>(mQj^3g(aXZIoJL`@&#F9#I6NTk|9p9>Rzz-GP#O1J|Jx^XbeO&X z8P~0{@TG6olA{oSWq7R{xe<)hXK85&z9cbnq?X5_hb_}=Ha5qUQ_B3K>VWrMKtKf+3V^X8OMeSnYrj~q&CGByMW=zNGk zUBtog{7Y%e%3JJl%P^Bo@LAHjYM_zFX_B;5%}Uo+;i{1-fp!y+BZ*9*1ZO%qR-6R` zLBxVXQhgj|CTbQjX1{KA^Cp~v&WC8Bi|_X@!Z?XX8k&WbwWWIk%S@`MVGQDTP*hG$ zLjx7-pseiyO++SHd|o&6Gy~VZjJvH-cFnBENdy{F+Ug;C5@fliZogKWd9BGmrAOT#eWS zWaH}1v$Ww5yBzhLjtGgErJ~`$A1_|VWJfZyk*W_u#_2e}aVnx0qURI_tkqDRcTEIy znJ{Q?!@-;ooj%Ik^O%rMw-B#+%(>_GF;6(h)^Yg!kjAC5G3N%?43GEq zi?UJ+l9B?`EspQRsH>)z{HxA7qVmP4-Gld;--eV;{b;|Q&aI*5MPdH%oW@!*gZW^+ z_NDYpuQDScBcXH~cp~Qy75*p_L6>9)S6Ad_Z`gBG=lBdqsLzKxfrn!@BKOvKc&?*! zXeO><`Jhii>zS7;yS(h}`Y~Nc9&S#Yf_FFUW?e4(Uw7edy4yjkKf?F__T{R71uYc7 z7c-tFD*Szv*&8a9-tMc_TgcSTqt#n7zWl-5>+53dWm0Ef(j;yidEZy};HSvw{~Bu9 z+J55>J2Nx0TgJ;^!X37Sj_8*TuX5wey~0C~SYYu3{-}W~X_ctaC9dLex$k9N+UEEE zBcPwP2}P!FHTmlu32A>EwK^Zm##hf~0=c4!qTY^@OkeeNjB2n<{t8nY;Th#Uo*{?D z+lkxHLINs=oGs2|8NpsvkSOAP=5fmN6u%{=XnP+8s=RP9&6xS`*>QyYJ~5lfo>J+c zu*^i2b!A`bt}-en1($Lm1WEpFnUjYhP6wac*Ig+%y!7AC-M_#5JNa1%T47yuxYD-X zBED_XF$&HdjuAMaPGEDW;}H+8!Ji6`HtG8CUPNOv0!m!IvbDW!uaLiMjgtVU)avOC*GT=VB3Nvs<#}SUuO5%OzH3nMIsMRE0#SP=n)> z4bL9o*jFlXHjB#qRnOKsX!JfK2k4;nDPLS0zt7*RZn)yZ|Iqv7(NjOO6Gi-fe_vf_ z)5+TNsJFQ8nES!6Kz_bDhBi*8FjeV%Jha~6+velq#*h!=2W(~*S+yrMWYK~12T-79 zKb5a+zoUb=S~LXxd2Q<5YZUmjsD_z4{G?*YZod`kSa3kP62FaLXCEvSgfhW5{{s zGb~Eyc*t8nh(!8R7yRefzmztFnl)rmF*diL~H}E zmQEp0wF~aLAn6Irj>6t7&(DL@qrrT2t(yKlA8lg8Mqi~i1qt`)dm5}`y09zVO?N_` zhf^R|-}Tw;yKzBn(Jk&1ZNk1BPOWwLE_(kWcG z2|~Ld?ZYx((guudQ!%6#{Yk3J32Zqs>BEZ~Dk@Zk3w@Vj@iWr6>cg?} zr>6A!=l^*-AWOcEWwAjen%M7V@!X|TT}cW5L3w0_j+Z_6<)?BjFLEI|=)TyPHmMKa z_b0;baz3BVHVg^tDyNM{*K!=`NbXCAkC%!)(H&eVUNQ{KiYZ~s z7?a?`o%FsMo6$$JKPAZyF~|GT*0Y5Nj57x7c=^rB@u>Un1ar>fTvmWyY(^cJfWbPX z0mIcE!C4#Y@LoRr)il}Ww?$(b*y1S7di7eL$>-D9C+qXJ=@h@uS$!8&(fu7ol*$MCDUViW!IWadX7Ub2ohv;s5 z`e#+=T;p#bhrK~G(U@LGPmcfHzv$^&`_rRhRm`kUJZMm9XwkS2>HEd4ch~wY8@Xr8%lraHP}!rU>GhcZ?%q;tAX;~U6}QsUny>jFCmVUV%$F<3 z%{LVqU%zbm9)R!OEPO((b@5Io0>Qj6#Iv%O!%lfQoT{Q$fD*O7P}@p~KT2Po3J zb&S7AuceRFg;@DlkI{BZp)zWJI!yFrOYd!|odf1)>BNz7&Ksb73!B=oU5jm@4alX2 zZSQ1==s@L3q@3)3TYm|*DyzBmMviFAkB@-c$j_6UW@~>9^JWLoJZNjh7cO}ZHd3t0 zG9JnydU|~NeYWe z>0h`gD{)Cy@}i*FMOiU17R;xl|9Qa0?UsX`|M3G7!WU%p#l>YWT#^-&IC?-lbDs-5 P0MWRrtx}|975@JKIQiJr literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/16_bind_indicator.png b/docs/assets/flysky_a8s/16_bind_indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..2b80793c81c16a2ae465551704d06041fbc07c82 GIT binary patch literal 99773 zcmY&g2RxMV|0iW+MsY@DSLPYnBZ*{Hx;QJGnZ0+&&LNcT6rwIur5O67UlWmwQlmA|he#K z&Ik#ftPlwb%N$M*`kKA@?~62q2#IkG^05Y~u3lBy6j5ord*?{SnOSFi6D=j)+=n1{ z;CsvKQiYYf@e>JD8sy3EktV!>6QA{WUO%?Umeqap<>_8+wv9sfHLl~&a3;rg2*GnNSpQ#H-WKLEAyg)B*MXqVRPYFG|6&Wzz0AWl#zg47Mdm)Q`%(r7= zCTMS}v86pGm4wXNBrYo8!g66F@ulO>j_!NA`-p|Tn4BN_$-JEB3nkk?r9&1lp2t@l zVV#BHw%0VSXb|<;qwErC1+*T9#zPFM=ZqJY7%L1l6QU7~~aY0W-bJkcNZ(v)sup-AjCF>YOBz<#~f^ zL+tw7nBxnLVYol}QtOnBYnxrR5{8?clYvA{hIg(_6Uk+j1#{{qiZp)kE?#`gs;4(R z`g-ozUMaVUO^#1J%L0SHL;iMp_&PGsWF|1SJlUF~ws}Z$(WfP+bk=SlQwc?iy!eb3 zdaGrRdSnHf!o?*L`laghu?WB4H~5k?P*^(=Cr3xXR2poc&`QSN>2*k`XvEk`Y^59- zPKvmG^rzL);ngSlHYP8l>ZmUM`WHB<{0N_O3uA004~7wR=b-7gyx+2hrfL1!X{zgW ziME&hg$beUh5nIPa^K&Mn*4Vyi!0NyyQ$ws-R9PIJ4$;vN1Qk}JWpnQ69h1^xyEKCC(>p!P2dMzN;x-Yd{;^ zIj=&Vip+rwEtkg$>Sp-&are4ObEMPwnK-)7g4kpwPA>oU?()9??_5wM$mk&C(_|L5 zhCO2m#5O`;H5KwUWX>Fk`>l4XpDC-#sC=1F1P{Bxf_(#N%{VlL8}Rm7aOPdV_~px& zdG*}>kolLAy6FbLYxuT_k|OJ|_!69W14Z-dgC@D$uu_tksboOLR7%Y^> z_0v#lbqZd&Ph2G`wFdp#s=Qf2J00T-Hw#8S!z+6`-AAmJp$<$`i#ZJG`Hv&aje6%> zq+%OJ=g0?|JdQ+0gA@5EtRT0cm%0D!K4=O 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 z z`{AYM8%556>aO^)>f>pke!^+4ezLW#gJ1byBm?|-)G-yOQOx;L_yaz|pd z5c#s~x~OVqc(d8PwUF3eZA_M&E@A-$D%~zRA}!1M@WZQwaN*4uDWxP^kasR!8HLwSWS`-L&Z{W2P zO0xjFvwT2XXXkfxKsY(ffA7Pun>8ngJK72)-Ne)&uXkJ5jgNF<@WQxZ2L~sY^=V$i zqFZPKDl={OBj4KbG{K&}pu^7x-;ZdHnOo4=aV~(>ULw(v+t*xd9$tP7xtnhAHRpIp zmdq=XDbwvC`+nSs0oDd8DXu=M8(lF?&CWhrfpx?kzf;=Tpi94*azWUogLi>owip1r%fvP(-#z_oC2$?$DmEc{7r@0juGrqo2h zrcWRY_P=*go4JAOkOBltJM^gLK-(k8g_-rRoa@s5cs6WK-uN?y7MxFQsU;K$Kq1+2 zd_m9}S`Y;U9#kQwg1lGDX1<&+$ESfhOMFz>bm=Kg`A^rc4k-MVhJL zjcDWLvAYlX4uXjey_yp;Tp2=t-T0cc@+9W{`}fck9xm}yeQ4vNNmWIN3Kb8)6mG0|W$aY%@Y7zE^|1~NJTVUZ%sA)3YV1K9 zJa&m=9MLGo_SeXpUG$nzMz|U*KZ#-ipvlOa^9xMmoafA_W_>aH`|{o0-Hp4Q-0@Vv zkjdI4F{&pDm=qj0vAT18*)km_QdcFKIMymx8SjRCwjU{ikB^(Yv}nPbr2q+?v>=qo z(@YjGX;$7RQx^&5cC+waDrv|-Wz08y36s5nDB!nP4n7jLl<4zIZ#>HiP z+=oCPQM8XeRDxJRTPUe3b;_j^NOz#$1#|Wp4OVv0fk9=3?Jd(ePfbh?!dDL|gX{*E z{vNA&J!ku3`oN82q;USVvET;r?Hawy7jXKP(J+7i$VE$)AXML6_mW4g!Zlzd2#Qi2 z$)eGW(Oe*`811cPZ!-jCjylyk4)I2JQk@MrKUFkT_s$Pth^d@`&ABqcYid!5tSl2g zECrK@skMAsSzVnGM=P>&Z49 zhr~AkGf|ceiXpT>aS>ExcQ8-u?$wT?4Kz)Lm3h$j5K=QMl$4Yl`$j=aM>2tvA;20S z;J!0lsXx{7o*G|&@PT-ftd7=yW(6VWxxD3_rp4#r=!{*Z{pIC9=ow2(Y)`HFtGBnb zs>H|I({oOW{rR>w2=>2sItHLUi`|iM$<<>fb-hG2hp_x-53bHFY+~ABsF|1#6a~0h z)Q`5(lB&-A{gw{gL9w&Xb5BptW6w#R$q=7J(~{ddTUDKIyu1N1N#N_<+UmD$!{ddQ zSTlNh`}Bq-E1kcfNGc2+8Rwah?d{>ThqOmC6CZHvao#=01(Nh^M&Ip$-{;*Jtm!@6 z9*00GU*=rfPOr-RopKEFJ^-Ve(UXu#W03^ii@Tr<*f;T@}g*(CcK`d@RMm^X!$Ct70&B;)1Qex-k=4cQ9HXf4vjb`9KHn}nPS+X#H`Lbs`mhQH!y!+(oa28T< z-BTNtA7g{HH80#oSvozxcorjF$UamUokq-UbxkvAm2gtF8=prx-HiOQJaRhNDn&SDz&7 zf1zQMU&96+sXuRP1cs3ro-)8L*~5PuM>`i|`5AUwDVmI4&%$)(=4(;%fNAHykD-dRVW8QrK-kiW48MME8INm4)H8n*X zA1d|?7JYt2n?NKL23iFYH|M$wBXEd}3?qltKZ_pz09JdM!-Edyr04!KKQHYv*%Zm) zyO|L*(>c{T=7H5dF*o?s+yUW0PvJzP+URJRus0ykSA20RS&FO~8H0*uMOM;mkG@ON z0mGccus3hMclGD0AAXPD59PR8w>Q3eyvycB{peJ35-2Gxy$jL*iNS9#)qfuMkbPGy zU})EZM)Ls&174`#R`ua!|8e&y&TqeaT_-0)bjLjxvN&YD{(Qh7VmgD8Pgi%IhWstM zN}9XqN=2)0)dehu(cOr-kuofG{p&@0q1xKo$DZ{}7==p)P$)$Q4cmUx(<8)@m!3`E z-C4pZ8Q9oc!-)&sRDnCkf!VY0u_)B$>wepwT{NFYx;RU0s!l-|9jDq0+C1MFxuLDU z6Qwm9ACLYv?l}7_8BLt5V6vQUF>UNg`%j5Q(iHME$%WD`T8g3fSnMa4t0{rjR4A!U zs6!GMTQ8`<3k8MOT|Rs7gdi37N(jgE*ougaF!7^vQwBKc~*rK9UEEyje%RDiy-f08|{)vRutPF*M(KFbt zuo~n&hVJ(gFo@=mw1F)6!n_lvUY*GRv3lN#66-Che>SrPh*JjXzRo2low_x8~& zXq_q(yqC0KV065@>=yf<8@xq6Q;9zPZVePo$%l_Q)1RACy@)=kebT4dIMM3!$Ym)uasxDz3xPa(&1(g9 z!?#@En*qy>8o~KtDr+Eyk4r2iV{U77t8B5q!iXq0bvN?KzI?l4&$Y34y0o>U0I(~y znZ*RU8CKvNf|Op~-q6N6jHQ^lzfELLVF~H)8er;{@pN*@P{?U)?1h(HNyWZ7dw_cv zD^B{D>aZ028o4pU9J<&5KIqiC?Xl!Knuda$IDcK-=HfD2id%!A9S*_gU{*F7m zgL}6&5Q%Jo-T`*FKu|;DdHYWJ_MP2Fi~2-CCw+_N6rJtcWHwe|!ZnvP z!RW|ONK3J_jTTB95Y_IVy}*3zIT#h)jqZyn`D4RN8%>lpUGQcv*^-iNFzx`~fXR;O z)K@uWwnxB@StVhcZZ!&wyOpN%a|Aa%_EY?^RXZRpBJBs-@Sc6Hq7V}Iks$qmMyzQA;)trezU9>=iEnBRl+-=>&S zS!H>QJN`Vn&Q*ea{g0lmSQdP7bs5OGuCg#X;5bQ^%-)erMWLK_iLYj5^2dvz2K%C` z`w{6+_rp(ulHznX=6NKD+X}*<5^z1tXKk5M1dzadf!wSOB?g~2^hNuK5yK4ZD}AwO zzD;EdYK?UBnk>()qQD4LBX!aTem<_J%m|Zhs{m+2w9vye-83 z+(#LH5}4elGW$;k6*I%fZJj0u&yUa@joUI2t;7e1G**yO(P1lzv`60&Pm*1ogHkf` z^$hLq0}D5}7LOVjBcoz-_JO-UAulE>!0MFXZDl^6lGj!6PcK7q>|$=*=c?1o5^)3gw})%SK-p*4CYezS?>?_U9r^EyH zP+1Gd%f0}lVm{ra`nlO39|+f}b)R<6-WePR($~S!5uBz2HU2eKZzF+t^`05!;N(tl zX&Dj}6i(oj4YdpA%mNGpeh3>O!x|{k(exgqap5?+Cs>OQ$ z;%1{pk|lNNpIR&M#daJWJRT>zi z+H`>ogG*`V{Yt)UECpcq6g&JIT#tdhr`A7ro1&g?M+T*G?2amVU~MIKyJyxvNP?Du z?u5em!1=TNB6^Dyvqs8;U`a-IW}6aP3oV(i!bCZh(^Z_Ez8)TMOo|-NQAmx6o|yA= zPV-r_@y|Qj^{k*RIc)dRQc%P7m;T;+foi#6ftXE8yRS^_K`*_M`+tti=essj3)r(M zdZbn(TMS6h$^|4bF;8dX~Ma)F{ZY(ANnjCFJq2sDchU=IQVZ3J*Z>HifVr+MDT)434kZoe?sfmSr zgwoM?xv(~H-+!32a|si_-xh?vva`lHvp|c5 zpWQq1rZF>8B}bE-J@cf}Bw&?K7h-^-IlbMtu5_TSRUp1p21M0qgZ(TJuXHFqu~$FQ z-Ic`O7$}z2;0{!bX1uUEEyrYXhK|d|PI*OAm_uMFYXk%Pa*r$4XhO|x_p;9f{ELyg z1Ipa(^w?#J481)xvBD5t_cwveXE~aG z9hbC9WAJlvbKb0KK`35q!l{|k=2|J;IdGrZ^XE-dca(awcd=I{w(-yuUarrlGwh9; zb&sb)xWR_HhQos{|GPIZU^p7?J7nWH+UCc}vBWkw0^bE0 zA18*UyL9(@kT6XC4_f(}Y`^2!<-~0ytLyyPlMAYB#AZ+6aMogJE)xpgYk#o()gJ5g zE91oWwcI#nHdNhTM~~!`sq$=6`)fWq!C&&02s!*xg6d6)Ey(g^}gVjPJ!j9T!6_H-(SDLj1BWklSz#i zTF2{y*`s|afpq5g*=#*}-FU>^9Iy$%TRW}|mK^_+<VRf0vr7sJ$k=Cc6#zs{t7l;>kVxjZ!Sst5qJ0^aqE+Qd!a} z4`0h4%!+$>?H0oM_QPMf4Rgmg8BNd}P1%@#Bctpmo8D*J`eGE6sI+-CD83et>|w=c zoE$#)pCIhpyZbZy0D8Cw%()hJ^a>6=z*!BR{{9(2TGnJ`>c}mWc4X(tu{7KE?A>f7 ziHvWm#ZhN(Ygf6@WQLD06t*u<9Lam*c4&bX!IGhLxN@A8rlBVcLf;s^-k$9h%$5`0 z@UesG!&3UtzP5kkpW1LbpWQD0&YsljxZK)-{BgMmbEhHR1I3$7->8ti8^7PD=dg>W zYNfsAEh=n(sYKp%IDMN^{|D}M0xXKK9mY}BwUfXh2(!R#hYw>g&<@u^eX3_C+I|z0S z+~TtidywQka(;=t{}s=J*H^IXms3EAg?Ayt+kPr0)E~Z{vlqm?KQAbS3lv#B7(snQ zZ|W%#+zXvOp$5x|sH>{oE}|Cl%i?TQKYor_qZ;pi$X{+;S97XeWpDWNv*Sj=g)Gzf zYMn?ge*WnnIAIWtSM=-2s}biJ3Owe;?iqrT%woBd<(g9Io;_N)SH^gk!ak;c?bmQa z`-C4hw)Nuvi{hCYg9I)A?!=~`{BX*&rmZSwAyoYR( z@@Bj@v7?i!HHpn8vH=#A$V)0N16cnkm1EmJdv1Vt`{@zpB=1f(3954};B=ItJ6D-R zvJbKm0lObr_ePgAz>BqBLo*Hj6HTQ%`$~HTFe=5xwKRSJ<~xbsl)n}D66CI>weD#q zk!}HR26p*EG^3QGLg?hdK2hupTo{@8C;Aj%(W_e&mHcMuashTdBd4 zi*Pe9Ba8}6szQFABdV0|+gP-Ni$TgO8;T-%UJX4LW(=Ph{cmLc&5Jql%58?4aN<>k zX8#?z!$EJ_S9&@LiaWzhzVFIQY(hy zl6s4=zh8svs~4Rl*v{*k^N>XB3$bO6_Dp)#$KvCX9pF4RwcA z%g5jWjI5wwk9cEU{F^scG|Lm}3Rm?~E@%|oF(ivCEPABVK}X%%|GH>}!mgn8a1KJV z@-)8?IZsVY)o>FSBORKNzvHujPNYBD0ox@HELyi|@c4kJL{jD{Lb^jt&Fxq94y5nQc%pH!S^P{0Jb`VzOO7jEO8sLu~ z0>eEu7|QPO(BBh})P4)By)K^DY+?qKK6=VU`H)WhliM=vGlAOVA>@PolerYy+=eCV8W{I0Vz7kU^eYEMqc0FC74nLL5g?QlhjO<9kHKe)aOTxO&i-9557NL z*x}}1{f$}>Rtnl(*6rK9vE#SaceJClz;Tcp)H90P8d5Tbe3$x5P#fKpu=4ax;1Alf zlMN-d7MrWR)6yz6LAAQ8wmoJu8ICoh+WuDOTUjG^3pKWpyIy-Z2GzTKJQLE7Iwse~ z)ZKKe>2ah~Ua0CBM5NCsxARnI1EgnF9G_7@LBRQCK9`wIQQ88N=2HKDWxjD4Hqs`> zIoSkK`S7v(QvV=N|0CTFEiySCOxe*Ic!YA(q3G$gZt=3QOLd`QiE`?R(pm#8BX9}r zjJK@Ra}{qhb*}knRq$xsPc$%2e^ohJHTa4*;ek#n%@>eyx>!0R{A(gIuI(2^^Gt60 z52lHzlHl>B6m_bQdtu~g)t9a+;CoTv2iw7fE8z135*@sZwwP9nbch&a>SMt7fO;Os zhJZ`=Ok$omBPs*=e>CjNCuIq}aHcQ3V4NrsB0*Xb0iwdG7lI8^-0(jOsy+A~=}Qh- zsXkLFte*Nt+yH#(SezN}@_V23scbc7u|o+nl%zK=$LyP)SVa}dIqix`v|&ceSX319 zI5H-_s4DN(1O8V4zQ@4pq|a4sz~%c&gjN0wvcDvc55oH@9)(Zvz2?SbE3`5xZbAXM zNeZM?pK}#P3#62HE z9_%y?w%QtQeBw;xW1d-2^i;?h{raoYhzHZZ=#?&Yp#=EO4~EV-W-DYg&FMXx?=KoB zS=X?2d~mG$0;AEVPlWlThI6}+wdJm)fK92O%~%^u=1#+u%a3u~&wRm)PSVd)V^V}+ zx4zs{gEbU=sUtLT`W&Goj7F7q&28sh);zU4#l}iu9MiM`2aV!{#!E>HpZ^#!T-s4M z=9Qh_Uq#kv#b~r|eC1^K#ol2XZ``_~^n<0fUMh34JU%EvM8P-u=GKR2@q~m2&_c&_ z6VAafSvr-w6^Lg)3J~zctJ12U6gqr1#afGmj6Z1T#gJWV&gg6#=E0b2i~E^|2W!*Q z*D{H7^9aAIi2JGELzDD9mBcJ+sY>Ts`jq8rUTnx_sTCvzRP@a*;D*l_K$qhoOYhLE|=g@ z@2JYknL=IruTwM;`7v>yMLEsx@C;pow-3NK)!Ur*29kx=H!NiHSk}x#1&iZYwa~ z5N}`B$lTHXw;K_VXvv7W?^8@OTLNh|6pC3^$-Fp%bUjPI&RKl zWDhju_Is-J_WPCg*%Lv(Rvla&Za8zu)yOX`%-G|UcKDCNfZ?RjL09&ESEB?%3qLV7 zW+}~9S|UoO>ZOy-%Sy9TbMbJt<>I3M1SOR8XqfDsaL7D)v=nK1&_qr39){!Z(cZ*F zCGZ7?6O!Y4OcvZE^UzlKIJwoCwf+p5GUqv~ppbB<6ox&TwPo>?k1^>F?m&D4&bxqM z%{;)wT;TB__L9#J?^(4iV27)!u{EzzGc%4^hY~3(@lM(`m8Ti@@l$%u&FE$Zizb%P zQW39hY7EqLzaxM2BA7)*!iGZOHgz$ zuh^{!+aIh7k)VwJT{;W#MJK_zK?d07swhoP?n|>Zo-cf)Bz&S!C3R!Pro$OjssEwO z%W>^Y@Zcqv8)@1u=eZ(m>9yc_8i3QllXe(Hfri>2guDhtGcfM(a~HyS3}0M5h=6o1 zL>qkY0vAC(@b}7?J~B|$*_~lP9KK($^{h3p|5#uocy7^+N$rBDooO1Cni*H&)k%At zznl~zb0dLY5Td9H#^oR>o#ac~>b)z;mvZN?t2`;KY-nxy%?3?u4Pc__Ti>=}XsCLF z#prFs!R(4UMjSi3mTB_r2SbGvw~`uFe#_G;`f#V*+O61RB=dj8PXVFwcP>$VGQ8>Q3*8cSa&5R*;;MCh{>C%i5AwN1p3BiB zT_5=sm5yU&r16LV%zI{zwvSvovb+NheB^hM00j}43$=lyOPs^S`{W}>f6m3~^<}RL ze)AueY6>K@Hf|p^<8?OCsf0mr%f_QQr^b~d$Ht>Q#h$FjDCkgz0GFH9N!fu+#W>P% z7|i@C&FzIQq;#>gCIs%;F2t4Uy3R_U<5N?aTjxyViEuji_pOPU=zA%0Z1@S+Mh z#Oe4SkT~7THM{;U5dLFFIp(>?gV#=yHi|)^JlHS zzkTq(Cpk_sujid}jxp}X#ndYr6DImbFX@O7&EqF7PViX12hQJ{yq!gn2P>tV%>%!H zJyrCsZ9E3+7GLyo&cBX5(66K*cYO~>+^a;7`NPn~lKlgZ=|^9*6KZV~Qv24{v1Da~ z9W8GKIti%gaV3@RXrFG)m&DQ_aJNMJR-N}wVsOLbaoHo$te$h0%v$nwj_7;3B=J4o zmJ~%;5j=QW)Z=H~!_Rn^XVM|Bt&?*LHx7z1m!@Ywh2Q$wJUyEIaAWoXa;3S`%bQ00 zIoC_chmTLsklhzdQBtn!+_xH2!8OVsSWr=VA^?A3*2<&hb+SG3&UHa~Xt804JRlp= zafos5b6Pvp)y)!}dUj?9-sP0RI5U~wEEWt%G?`24&Tw0LAEv&H4M6fghjlzxz?qcD zM-Q4l1Me;9yr;f`J>LD^9^)4es(m;AJ7@jZ7}UzdCJd1(5lU~l`UMeB^4BmZoU?Z6 zPn5dOiIT_nsI4uDOS8<(UnwE9VW-1ck+-QJTMPeF`gIp;|F?1g2Y5B6kdKsd0yV^6 z(ZWB7n-e6NT^2HtNw8;V8H(@kWkO!+n;AL+8<0ZL_2*uKwrBK2 z55Xm8g(OWT>?D>!L761CB~r!Ai)uG6^UY9pz%#M$)3M^l-H<~dV@;=2XIJbx8V4f> z2!$Mt*IN*|r30Qf#0t5Pb(pH*%Wq}|nHrtllN4j_d(JAvw$QBP ze0d;n{YYd318zA`=;BGyFx94QSy5e;+ISv%#~q9A?#YQ?lRh<|Q|8*)Pzo|`5l<3C zjWa|I&7=WoX|4~&dId(%cVZ%QKAy3(A2m z`fHjm8!LAMZ6)otAE=5eFGUO?yy5h{ysJGDG(^zl^M`qn1e#jpx2{$&+9GN_F$$%$ zng#OA?mhV5AHf}47c&xqY`2NeHa|M^$*+DLpAzjN*U}Ne(*1J9OQ*?jO*Gz#802-+ zz`>dF^hsWLgU#UXS1$d^iJeV-+%U4LS0RsN2C7vzTqPVsTx39i1@aW#tI!K`Bm$Hl zsW)FlCUuwci5!4eUP*&&n^21tgM*MqB6YLqhma`=mRc8Kg=N#fWX&Y_8jV_CT|y6AV4^)uTK&zTMgV`@&Sc(-olm zeok=6xA^5>^}AqcuITHuC*TdGaE4=fdHGkloISuPxN?p?!PfSgUT;#zq3v_mes?g+ z;kHEp0uY`OyQ5SNdwhmk`RDV+J9#md$V!W&(WWnQ&>=pR?JG3ZskYq*%d3>FyE$Y)NRQ35Xw-ZG(Ky@ik9>1?(5 ziRHUan+1*^miK9+KTBL3VqyQY=+Y9DX=;%caK;UB%bwui+!_k$eEo+vH~P~+3*08l z@Po!HD~$TN?8!x!-y@fUOf8*uwOu`?-W8wJ;9&>n<O>W7tE5BzT?M}%2aK|&hjt$b0qrzP$% zg5M{cAahv>=`rrbIV@`eJ7dCnR|Z(VprQe`<_M9ULdvmg^Tj~Ur4OgJ+s}S$+8E$c zj$b8ihGfJz8F7R;Lg9CD15!vlY$HgNJHUK4Il8|oVfJx3=VF;jjVuj#1lh}`x~Uli zR>h2LPA#3AbCM`-hOawPNlY(Y@10{~5RA9p_%D2mS);Yqjg~C*v##} zu;;i_pKbLLjAq{RL|7%ZJ-hv>zznRZAOQ@l%mQ|M*$Us-3b!)~J{5U^)tVL47HoCb zjI?=Ir&+fk=R^(*RZ^Kc3kKtdSeJ0gfo=rEkjdPO)EbX!Pj2)IYU8rk41)3l=79sW zK+t|9d#+S`96m-tc<0anR9d;5o$-j6;PtS9R0aRJe@n>Rz0kx583&=Ixwj9^Zky^>i5QEjw(s%o_cn!iB@$E zA0SY*7#ejK8Btqw+*BNU7~PsBkv`$LS5eC99{$$u)i`sU*x1C$%S(F6(z^mz&N)DI z;Jqbp*+?;E2naG>(si&{SsI@?W;Ldx{k!+2Xg1UHCkNFDYIcy9G~5_iRQHMJ_*X zyuU$iU_~!sH?=RQ zbD&^h#k-GNedmL`KlSFF`M)k2Z$iS&^)e$mCjaBt7}ntYO;YL(Q@IV#=AgSZP#d;+ z6Oy0{p&axC>LIcu5RC;5;uX$7)q07Vi39gJUG@WGmpiRFyntGtjlH9Y z-ljCrie2#CMC0C!VJv0s#4dGUV-Z{bcl9XaS(551R?2gq+MSF3Z$c+6O80{H>) z+lRKkjKIdYfuhhE1UiKgZB|{OA(~&vw{*ps^D1eYa=+a{g*I)^a1k7=nLdAWVndCA zdJ8P10NLO2bh}tNtz^kpY-zH>r#OnEy&;ITBG^M&a0Y5CY+0|2I;%ML0&PH&&(n1i zb$s_gXFVR$b9Y4BA6GocK{T~AAmC1&Ii+rHFs#A`%d9;1k!$7$yPg6a%^*_QipUxF5EfzHgDgRH{K^i@!s~|wde!h+AZ|bB0A9jXR=Y9`}O4} zTf`$M?`=B#!DZ7uA?!SWXjTF#bXpgLFrjr)f5`55zk?ngPr7xBl9eI_H2JMLxs0wZ~*7O82m)7%6 zJsqR{!*l|35uI}6r0uOMaXFL2Oa}9*q|@%ky0vu{o(g&68hq1K|FX19@o+%WNRGbL zI=_}^uSijwU}5(!0rOu9Xd7AM;~=lXryg-W2QYFr>|#ts_!e>(l_Ci!DGB0TGY!LM z*S5_oW=wgmNLa)O4dBf0o$ z3Y#bp==P&Fx;G;Y`WM*U@<;#0wEVxuj{m3%Yd5o8Ycyf3j5BnO3`a@SY8pc@v%af0 zQMs!nxr5jGLKp0#6x$kB^`h#G)#g(g^X}#@d5+27`U3{K{GRI!o*NBbbB|rUA@}#Z zA-#bii1$u&E1yCz-thvqhn?cqeMAA5m@nY!{&X^%jSS?E4rp$2L+O9&!zdXw%Z)$*N92Jx&&=x%Dd1LbQ>^;$_So~7f$a}%U9Pc-V)+xm z{T^XSqtSfcmmE#Jc7eevlRX{RwrE!!(k3?eAIZoiEI%(AK(AE0Z*;rPec3k()(oA4 zLwKOf#GPL(k+sHtezF{Kk7;&I^@}`UO_m=7MowOl+#o{KCeRIArF%Ndgq6oZ>m8W* zIDQCF&sm%biJ*!3p`$D4flSUavrDdWua6_9d?E;)Vze; zVnW{{_aL(rv+U7%S42|cHppAB_=HL-ciK*its{8v|3v{n z93_Oc-8W6dmWS-`-r|q!&s&J1!uO4Z(l=1JjgwQr?{L9%t^*oWz+t*D*XfyKVe>xI3 z$q-~kh^LRu@Dy~JQ`6D`j(z@i)aY}nqhF9}K0&vSxkQNOc^-!E`L@QZG0tBjI27b} zv*td>nH^G4QO3M!`xRq?itoY(AtYE(a+apf-zplP&E9!;Vn{RNVuoCSQEs@>tP4#; zRqZ(tgi~IAur`QBx102qpWiLi+nOSQnC5xZo297_Jt}XH-Mt%xSnI~m!oK%6Tr0f3 z?txr99-j{IMBkEgJDNuWUf-&>r=2G^<^dldYt9jOW7K3m_L4o=$eNk$=_j3`_Jx$% z(PPfWo%khI(yfSYhAlcqC!FcLGGFOTG?kpZq6dm&co84U`$`DQIKOhYE^gJ*ZN*X= z-lt9Rh?2+K`2KaU&y4zLgA?OK1Cp-unD5Cn&+H#Ic#> zrkp@4sv@*=z}w+7phj@if||Z)<+06SY2DUAB>We@D<4Gpe!VdD&%7~Tj|~8 z?8kk0!Ok9`bE-HsfZ607!S)_Go-9Om1 z8E@`xJAvPa+>a>xM~U8*zTN(^$n!g>R-#WXhWfg|$;d+(XS-E5_+F+v0=Hnq?Fokv zgD0;> z(&MY`dCcQwDf!`bt)DJ``$*zn+Jyt341(W(GVdz&nhK{o1*aD=rA#*`E#hR?rRJu-Q6Ns$;*{RjPFX3(24*m=-C@P4fjKuxZEIJM%SQw4 zwrF`05vPdeu4DAJ9DyCroWpQrH^-Q0WImGRsi1vYd%^kL$Yde072U@Bou!uz;bY85 zI!Y&GPVVg$%m_*AtewLJ20j^E2Z)wHi=6Wjh1E*m7c+=+UOD=nm#G?0FF6h;9SpjI z+CBPm@}$Se4SEZ%fzQ9I4;G^bkRjuo!L6DFqY8MFqg%X(AJsmA9spkjqc|C+o^HE0DQ%q6vUB zvA$=jg)@E9sd&!&F`1X#ZWhjb^%Q+LDU?R>xA0dHW8GQb_!+)DlVo#LQBKUPbZM|O z)baW+b6(4P9WVMB&j{RUVsNsVHy8dlUVrqvL=;Gj+*2cjTlgyV3O5V8d z6EHwOw31ssyX+I%(7xY%I#P}exceS{@q!azykG_$kF)=)DSqy%x-^S~1ii{Q^r21O zthG`$Z@A;*hZAS7t{97)gg~X0x+R^x;Y4Cfvx(MiA^WZ%_p~}80`(XfIERtL`?-JT zhfojf0sZ?cyGkhTt{PGzOKl8TB3MyVz&Ugaw*QTG$2IxypvHYQ8%}xhLtFmpIp<=| z;Z8A%?#eQ4o=)#RGNfz!SfYdFDzM2V2aa#wb3M^kVm3b z^~k}I8%Y`3SKe7|=qCExlE5=y=9!M1IJ#c3d6ftS>%9F0Z{wyB;&}gP@ld(>!qL20 z7oV{fIO3A=b;8p-jmPBNZP~R?FV0P1p|M6Qi+hS=foB`w-n}Lq?<0zh!e;j-j9Ezg zAQppQgGQ-%FOAJYb9ONCVO*b2$cxca$flRZP@S&W!b6uEG9r_Y%AQMV>HlF5&o)19 zA`xm1rvp~l_$to*WFPIEd2VV>9H1lwGhtfkmN*M#3jKUgqE`oh7!UNtNwy)T` zTzNwHwr;Y^=MI*eyTar#I*+5DA!pC2le0S)Z2~|^Q@sB>Lj_84!; z!CJYgAXyqJQ}Gyr5_P9Lhe$(+iUY7Tr&>=Uq>go@A9eW>H6mjpT zB7eKZ{~5!Y^DTVK24O#?w*_33rX*W4sUjtlG<8M)Hs9=WaW+&oihW^|?NS5+-;^p{ zDZkxKam67o%xC*Y zSRLo=5CsBwP0Y?1JT`nW11(GU&b($>>?RqMVM^FQ^+^P1lbQvbo|fQ|+OL#b3Ii*$ z$J8RBbjeS_0~nT#E(k*CCNAza;q^b9tQf|`l6be<{#tKiPg$nyB&BeFBxYTp-RoqV zJB|=nHN;k){iCIwZQ@ymR$^Tx$yK$CY^bhgL7|CWQJGYlM&EVIV&Hwi%}2JWOw-@M zW!c>0p2bJ*JJT?hj8sdrgq!R(vO;>Tgpp2TSYCpnf5B=cPnv<>evAb~?o~@x@v3hY z5mh11JiCZoU+vk@wFt+Ukbc07q{iShb29pPs8El!$zSdyC1Q~^=#0*Ae{QVIT4a}z z0!P9Ns!d%Ns?T-uD%~k58wBI}&c+PrVBoXi%2?OydlUtlH4$QP43zVHA17wo$c?b}hH ztCk*|_|AC&2zYBQrEc!vSY~tl2BX`mt)=7T{k1jkX%YYJsQDdA&ZedMZ^G!i%%u7g#4!R8yjv$of$B{qSQb=pBdJo~vYSd)TV z=4VbZFEn7arS>H~fj{1%n1$tRcPTNX;X38pTl*B;rvDIY$5pP-P6=+|vC41@imtVr#FXpA~!kXvb0b2X*}aE@^O)am{7Y zjsZc_&;LjkV8CjR2ez&9tI%0M;Usi~d-|;Eqm+wY=0uO1)k2OA!71jyY>Dvr86903 zt7cBntnS!>f(yR)EhZ4B&hLZoTr7k!gZBrvZ+?bS>%)uSA3FF&s($0Sh!NCD@2HUv z20rCynPVYhJ5Xu@9E;TPvdHStU+9CSPE;ZO1< zeEj!1p!@>2d2hFA-UadLz7V2IzG~-f=KYC^&>=eZh+>17(S2v%a{TRqPZVBRWJW>V zGam6D&95U@&!@z2fk*JOCFH>WxCd&)_MGy0$MjfpI)o}mSpUfqCjOz}l^+SNCX6ka zShz4AP0#hrC5~H{$ff;i7Ff_TC>sN+M`F{)J2?D_cLjNwH6uj^V*&Hgq2clc&6u#G z%=$Ub`3K9NX*@#h)aVti@5$Bb&zY)rmUs6!RJRA|Bf4D1!i4clD=Ya~@KJSrMaY%z z#0E0p!r=F;&iA-_7U2`0nG51?D`oD*Rg=PA-gVMm(!d}J99zd0l0J9?#2C(p2SL5@ z?FWKYJ|{o)dja$zteTIoRK!^nG-9$qr=mo&1b;WMR?e#_X4}FY1yWUpI?ZJjsWu?`P;b|W#3zuY=B!F%QcBsJBkCT zm%i~ytBdf~fwbeqUW0_JI7vM67b!{D&?rZ7?lfm6@e?G0WtuoDDoUp&X~tMJqDUF$ zFkoQwcjx6W6;G-nl?>xiM>N7O zCwHpIg5h^h;<2_uDHo2!DJeHYFu5G8a_V$^tfyqp{Npu-A#R3}VbPD-l867*X6 zG*VVa?rpB^qz&Hy{;E`L;0VLxqRjp6FJ`J=SefXG3zf zLp4#(A2MmFE)C=R^Gy2^%XbtB=}28_<0B>~*m?QYeLIHfz}* z!ZOqWK@L&}6G$NU&v;{H+nyCp5CVPFLux$Y^>$$T~Wt3!M&CE@OhG9i9( zxzN390<)Zw%l^+Rz13o016a-3i)Y#WG!|H+*$H%w{bS|!OG z%c%%SU*$6)@f{Z4J&HF>+xo}aD6#(K^+0@dEZbdweY}i1tP}0h;jN`*(quOD7N_ab zRh^yN<9Y>ioT7RH>mQ5NPL`WrR#&N`tdy|L28htfg@GchON7eMizPZ56fSe?n1-1p zGR=+@DANT)L1^{aap6@rs3BtR>1DbTGbi>ygkD!($~fY~hy4)Jw9fveC_N0pNCDTv zEkl(I%-=a?(*}lCZk5OL&7Xr}D7eMVs_&k!#?mkX_NY5V15C zWs>R5fYfxRemcEvek1yGY@9s(^w;E&cS2)Vw)*%=lu?%?`5Br{0SW`8m3WS>o zc0-JRB^SU^z=s&cpG{!F^_za#xf&v)kED#FYWQ}l;Bs9+$8Mb~+!~h>Rk8YuNt{e& zelVtvg8>Vvm$K2qsaBa$%~mB=W_hiwLrXTn6RwKwauEGj=5~=xX_9zS!Vly@Tj*sk zlw#7Hl(M)JG43Y8Yzf*X9eq0SKhF(|W!%#=g?vd16$fn(0ZmnwB^$Jpa$t9Di6T;m+G$F_nc~(v~gLR|wMZ!%6fB>jJDI z{sibq53QRLds{XHmVrk zzw?`b>d^oE`NL3LBc}m^s3;>EO0pFN8k@(gbR2JDk!_gAZZ#y2 zPz_F+chhM_U*|+8n*COruRPw)H(#OV=PpX(_{V6b9nx2+TjGmweRBUDneBP5SpH@_ z9Kbi5e}nM3o{OuV2jG)LkleyCKu}lri4Q~M5_EH3{gk=*H2wc87Rm?nG<-*f3g{IM zD(7dHw}r}ApB(}a=hk*?rI7Gs#6TcEdD*1Qg7V*r6pB@qMT>4ABT{I3ic6>6#C-@} zdZcySE|i(64?aOob&-~yU4O6gKssr!H2@)&(d#9$)NwFW7B2XPffBR}uCZ<5AJFW5 zS|EG01?uBkevY69k;q?n6qTdNfr?b%0ABj}cPSGS(YVFpGNeWGG19bC*;+%ZjO$;q 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%0D~xjSMYCiZoKzU@doxuM=zIi! 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

lY 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/17_controller_rxbind.png b/docs/assets/flysky_a8s/17_controller_rxbind.png new file mode 100644 index 0000000000000000000000000000000000000000..54de83ef3e634bb74f5e1fd663c27edff3340149 GIT binary patch literal 286683 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

yqGNAF@UPjT>gS<-tn}U;TKHxEAt0PpjHF!p= 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 z z2YyE3AFjFIC?Cz|s7mv|-r@cfnnf{@L-lRICbJGSd#P{b)N={^jLhEDUR2+#i_;d) z=`N4Uw{YWV>B|)Ww}JO}xA_>G66@R)46t7k52G)QXW-E^kC@E=#$>R=yjXu6v#hag zmrG8jo$A421x@N=`o#|fwp)&zolur9WUec6E8`WPKUDPG*PQ36^+S)>@@YMt<+K(^ zy-3t=DKi{E;!)@q!Y+jii!HAVSDiVToWIji4ScB_!XeZFPrFkbOaV{AmE}s$+@*C0 z5o`GpyYjm!JA7cT-bcS#GKVEMo5Q?g#8~rL`ybk1V`Gcp;0NSr2)K;NRxxViR5{{@ zj_G8?p+Ax{K-h{UT#O~f=MwrR>Z*1;_a0x<{t4u}h|Fgm?nvwE2NQ@az8`-EvWnT~_OnmW9o8y%*f zbX!u8>U#Yev2i+Gs4Qb1M2%T`0-hTkT;+0Qpf7G|C_*(}O*E=|1&oz9P9SsmqcW_^ zaLx--zQDwsW@LO_SH-LyzFtDD@_utoTff2q6hUQ%1*AasZbPZ=wYjISe0@AySPSuV zvidk_9FxOVREF4pFB(pg`iMvCbAm<=9YMsgTta2Wm;4vXqS`X2Q=Uum-f zsn&GogGEJt>ZfmBl1Gc|?7S?jR7!1bsc9bXmh7kR@Jx(i2FBJHNl#;%&j$TI1bHJT1PuWn-{tdeiMv_ zpV6$!+SMx9+Ztc|5@Eil`yl?SOZPQrlm1uA33-ZI-s}?jceEU5cVoos4ogzQk3(RS zuHWqW$ATelq48Kx%^lm}ueSldui|^MNgs})huDIK9OCgM&{}`TJO@7uP{s`RvNuDVK4xT$Gz@pn$oE+sMLY4-Bd ztd4>ZQyW1t1DbFPYv+Y4t3mNPyV)T;l@{21A)n4I9j639yif1B+4wOf<$}&W6%{UX zQ+}q_@!q69LexSnxxHNJQnAho`+-8UQW9fqbEL^I^@*?ZU)ZkbO!oK(l?#8^(^S%}g~sK6%N~&*`l*zp&BP1wZqz-b6j*zMD zXIDQJxXW)U36XiLlWCkkoNWFny!rn=-i#wD^5KYSwDtMXfX!rm1PD`ccrk8b4KQMP4&OGDqF~)Ww;1oxAs0vD)8PE-g7!57i%?k>dHw z0s|JgZ{RoaHxA)19@@lCJ)d?0B8SKxT2c|OTDSxdb~Ja!*kF3mLfTuR2=LU^8caUh zJ{U=MA-%WBblR~PGUY$LrbnCRR19yHH>dA9JLW~yEAlXN$Jfdj0x1mmeD6E z$u{Af@i8wv^qNE;k}jx-susPbDmUW09@f4w|UtiNW)r(at_@1c=n zllfIjKTf{9uf%b5jY%p#nQ@0z|46ym@2bEfJ;b-gj>3Y$0hT~Rqnf==r^ZlQcW?S^ z8I#?Rjd@m;;l3tXYv3^|C@T?8LiST|E#Pt41QFAeERNqLtRl5YtM;1C@APN!U3Z}} zXG+MArIHpPJDWm=_Cw|cW&A7pFEd2cejX8!dfKCUkf~uJXOrpCUAL>*)~4K1d;dM? z(XscH*t7Xs4UsDa@YXAL`ZMWAfX>no%aNJKzi8pX=D$7jFn`>LK$e?f^I&;46H>W zJ?#Fir>Ox+<1;VTbA2jhmye+WWDAtj9WNBEr^EiLkZt#BL$$m0nYymJR^CO*SF)GO zCJ_Nix&&-G2x%k~_YH!Z8B5%Tgq40XF`S%dNvV&Dl#_`C7;9j86xd)e*sp@%Y0Rl^ z(pLHu`Ul2&Tr+EayL;G1#)FL{XXk&F7fcpkwZwjmAsHt{e73G-Z_N2z0Mh`jqh9ch zfw&o3;v@d=`zuf{@u7L1rBZ%HLg}H=zWRXULMN@j<#O*%a#4~)FZ#>cQE@rn1?Pxl zS-s!c3+@3>Jg$DPT7Xtbp(ZnXD_^2x+c9t1!}J=`4B<3F|F2 zaUxYwa_SPZWz9p0q{vJ~BQo~C*QCRwi^(1wq3oCZa)FsOFgVOBf|*VWlTDVFS3Z7VVo7>2cdwOWnE&{LX8~#Y~)_b)NlyF$CfNFhqBE zA>5~A=ES@Aa+B&R)>0hG0b zH$Cav55iMAZD?|ky1Rb1F;!>08>A4fi_5srh7}VUa_?-!l}y*kgFm1=3LRiD;zc5{{iShFn%wNXq1$BzXr$2Jbdw(^ zSQlNAg;%UQ@#00TTq;UxY_uJI>RXA)tdYi1zTrg4jEUgWA&BZ}YP11-Da+A(h8>NJo#uX3J=>DxQSC z_wEmuzZe+kluu=fX-a>O?GN@2d1l(v;H@f$DejS~_+mC5&8UlJZ`%*oHaKxB>XSl3 z``#5Gi5&G0dijXaK=bA369t4tv)>v5O)wX6mO*q}L+jL4%rR8Kt<82l30DTSM4es! z5_8Rnw(=cMX-uF1@}$t+qie^Od)L{@I5f7k8Pe*6>K8&O|R zVuzjJz)#hA0P+Je);)!DV_;(u}JH}%#}V%3{Fx1vZXj-Mi4XHVC# z5oXhW#anRpk-NrL(gyzSZbhwLUhi}1MP#A0N`L5&y3QH-loBp%3CfVi^y-q8N2!@j0H+AtG;y-34N`(j=ZIjH1(62YSI^&pm z777j?hRia{^w*dXIQUnke7jx!{mUAAa6o&fHa>pSo8VdOSy0guTzkdO?HRljZTF?_ zE)MJ4H_St*Re_+w6?%eI-(%_^E{zN21YcWcVo!R-w9Gs|z*11Hy>*MfwO7D${HzjtF0{jZcdQdt`S)@1_D3@Q8|7YD5f~51N~~+ zwKOl^B}ez~?LeULI^JnYI3)nVOr^8;CI`--H)ki?8U3ai-n_ znP2$xgwYIb3#(g(#6nG27WKjw(hXAH`HSmGeL+S>_4Fs(WNf8>FC*zi>SK`OJ5)oufJzoMfgB5CblNY3Op{adY zd-^exn(VE~qCa`4Btg=6AP#3WROvk19GYo#^@&#*exK4W+A8+bUUJcuyp-*L+o-JU z70U6k{|PZtQjr8adXv@HFzd}(vwbOO)0eD1X>Yd7*RJLQ!4d1a@vE@X;TL8rp7G7- z5gex3M4s^ZZDZ!aML_+8ZVHO5+NfR%53$A*Dd(Ht{Lr_95!n&`M#0V*EXL_HT3ek) z_SXSyP{&;(28CZW1j~K|H>^jSIIZm+O$`BL%PkWse&c;xQ9H z^@bx>`>%98f8Hhza^STo|F6p%G%&>^yfz(XgXoTY_y@s?bpLNbcj*^i0MEIej1Xdf zYoti>!N+*+erQ>Txrrc^F%c-40(CP)c)jnshp)Vc_S&xD) zuEL;sTRC&^G?buUjOu88-w(bK>J)vW?bTQr3S=zIXlfb~W@Hqvu4laps`_f3(s5f$KL{1_X$t&8`luubvJ5CBAVe_oyaP>j|glJeRu9>Jm&S3nZJUFKhDNRfm_v5 z8|uivl-X6BF*G!42x1&Gm!zfbB%c{B0bndF4Ja1mRXlYyffvd=gA#IVvys&nR1Q=I zUb~_*{R?h@O!5eW;$~aQch>?XQXr$nS}OZQ1&c` zrqe7E#t1_URc|$I9c}4i^M@sOdFd}CE4q^E)a>q>ISpGRJLt0l1X}9+XwKIKKG5$H zJ&{_@*e@=Ds7eGmsW{(+<&_}QETHEhbE(ED{xw6SiMEITT0~eN$KSVELtw6epwnPIg;=7 z$+5aA33LGULMktDC%w3pb^w0>e*dUeQvO2|h}P@<`wgD%0^YGmCbjP~_+8stlCp1` ztTAs*2)aHsryRAbqBg=g8gPG}O@Ff^`;F=8P|oJPYMS{@RI&fqec)_bUB$wkNoKO* zneeza+e$w1Iq#=+q;(I6Oc61^l}RFDd#>w82UblUQ4eH0w$d!Mn%1m|$Kb1rCYh9) z`zhM+yuTERan^b-d~YDHo;P|zYmS}d#C>efj-F!!@VjqOp<={m`gs9yeLOcUb2PaF zd0Q$I{g2(unfFAH{FTm&$c=`Vhk5Jaohl3iNH~Y7ir&Ht%COi}#h6R=Lf|>D{c-d~}b}^zG@S_w+RCF-(V6?@3ftUKQd02<<9x z`DxOiOVk|RhU|DQTJUi^LcUObuUnR7P-995lnl;4ibOZrM48`eGILF~{2uC(c{=JL zwwXK)2jU&LQhduB5q*i`+Vy3MM*y|bgq4evFN5hptG82Y;X=m6Xn)0$#m)ZoM&}>J zk?B4{!lH^H0>kAZp->A)<(xk1NcGOsZub(%Rb8KgF^dX|A+evvO0If`q$7@<;YaT~ zVtmddtzVJfjn}W+`={9E@o)~1jo$%Z=VOTD<4+4D0sYBPjf**<({3h?N# zRD_oRexu(kMBPzP_|MI3pODm{{wz3;J1!^%v&%8q& z^!VXUzMfJ`SNuIaW*LYGeU#y2$-}{+e`tu0|6^Vo?V_8HNRQS)JjCWH(0zoQ_gCjK z%3iWbSMaQZz+tS8GCD$p4fnwe2f{8$5HF(cqeeW0F5&Owc+6{?3nFub!qHs4JS?_k ze;?sXzV}r}K71|BhlzS1fN!EA(08$Cue+y&@xEYSyr;-*wIt88TAei*zT zSYZv_l55Xbf+U#Z2+10E>~MPx8e*kvI&c}!(We`o9!Zk$6GiC+RTbH_0KR1M6zz)9 zqb2p)`3;f#f(i$;k#DJ z&0pRPtwxBBiQM$&Jh`wwmnFo)3|WW+XghnZ zXM6>aAC|YFk6`G>k4q$t!BZX0GxriJE`mKJ#daKSNN;Ic5I5=B0ZF%wuDhu#c1#O% z6$df)N8tcP!H;S$(X#nP$yLy(tP3mbgkAxBDx3b*L=F9)ChA!%1PJ)(BMoK{m~E&WhST0_d5Xrcim+vy+L^W zq>iG-rqx3O1Bv?aiMf~FWE{$0gGMuDSndPhBP44&l}nv9KsXE|H!rt$sD@1klvQD@ zM6*$pFW>XoEdcggQ7(ek^F)ZX#4?VK=t$nLDho;j4S@b_e2bo18x z@4^)Gg!ZSw;@#{<5lN6)k$V_5pDK|(4)TZnKXOcmSi#k^d)~-v);Y`lRb@#MLl$vV z?LZb5p>q6QQOZ}I0b)Cj`!n2F9Lh1Sn1Jt1gE9MhRp8!s&}(soOp+DqG>DkUo6o3@^%K7r#^f$)!*SPk{~ZOIQmT8rx{AznTJRRPdxz&d^LL5)`0S>M|UN2#keue zoNnw~U629)%%O+xpidH}rf?9>xei@D#9{uUs`K;)h*t||l^~)9A~+B_9t2LAIT9uh z1LY6?`ez~zFPXjgce%nBkAt-6b}SL0Y*3{x@3=vgQPit{N2QR(xLj47yfErxZa+ko zyzFL(_-5H<3H&rz+g%9lb{qvM>)%&4U%jOI<=s&Lmt6&;e3IRb;TzMMqUWj>d0VX0 zSpNuslRdUIV9y8uK8ex4)9Gy%OesQQ%5q1Op~7J!;QfkWq6|t`6K}vvzdgH(%3GuM zznOXlQa+944P7`q2*zA{-V+6cOg*1^uuBEk9GP?tIJ6Kwu>UCIyCESFARR*gviG6^ zn4|B_7~GD<+NKe&bd{0K^?g*&E#-@$A?h4_NNa~R)1p9%*-n@)W-i3W==A0WQUhKF zikRjS#mr4;*1M}Oqg3a+ zlaC`6(GjnQqp)w#mHG-QN8qC2!W5tb2aqtVCSFC1`3+>}8q3^$zZF{1{3+Co07*pB zb=xoB?q56Munrg!*&NAiA=|h-=W9_!a6P{#+^O3DA?kG8KQQ8p{kX~>!;y3pAX)Q7 z-6Ch}c_U2((k08T<6P_)m~vS+kw=eQzyC^%s%6NG==78ow2N9)drYm$AU?7CiR%2= z#F!&&{Cinr ztwik5;%}%;pFEL_r^u}#P$@1WuNzqZXIw3+N}%SjO05wOVhtfi3UXQdT&^*r^6}%z z&&loS7PM0QjY;@OB5zEK(;)k0C}s7fB}XN*I4@N8q?0Q3&}y|$C_H)ON~kLOuM+Pf z^)L!Jr%x8*&H^8yEP^Vz;?9~HhwPooJRl01!%ocHS;X+%CuYk_!6r?xFHlZRfXL&j z*>1Y&SO%k;g&Cn+rXCDY$umB?yo7Xr?LL^Whwz&@l>gze6ywOzgv!8thhDZBeVn)$ z8+~JfRRA#qM^45KZgC={M{m_@;k{c1zX^>^Uz_`Ue0lLp*-9edca@8wk-IN8(xf!m zE5IZvZ$bm6Y|?D<63$JxPHK9x0P7AtO!~D)<>a|u>yIQ%)3wYf8;cm+oyND&kPF{| z1B8>j`AceeHbhE}V(R2!yxp0g%b;0nX7l}ihqBwa2d7xgS(2&P=#X1+46ChC3*azj z!Z8m1qW)x_V2DPcmsP z(9Oq=0HXh+>7xJJ8%m(1r?n|D>Oz>QQvn`vX07UW&Aob4wm$)5gmd{y#WGCe#ZPjY zuBDon7gsWx_06WpZ^OgqAnACB=;iNpQO8%_1Jh0Xl-{z;)hzbMzLSwk+jz*SCC4+3 ztW_LnrbF!$Xh-txh8wMmDU#qS!WkZ5L5G%q7ZTSsfjuBWOHIIPO%W=lV{`^54bRKO z?&-?KwUr3KxY?O{##1^v!(r_wPt1xbCE9A~?%94O*hqhRuc>(%mq;%LeCu=9=Kg`8L`R_ z99bch<6UYro%%v619cQEIK92X+Ts7YJtu|zW3ID~O1C_lXx(EG+~Qp8QZD|oHSrna zw9UYwH5OmHmk}LRbyx8Fw?-aN^)(vD7q-hn?G`$qs&Y^M_o#kH?Xss76QdII2wbp9 z7{-+4Os0Ba43s@AMbrV&??u2y$dx zKIN?CnydT%Mlo+xxEAxKGe>I%`Fb;zHp&fKY4w+L*RO5&!GQswfR!iQk^i#Qh#qn4 zLpu(A$AT*m&QgaX@>^A%al2-%w{jm}Af-%pB+ZX@F7l5`phH*(N)GY!Q zQ_25`0iVbIr<&mah46SH>l`ez2=>suC$nRMU=^0}#WuyMUFB-hDOC7!fVh={o9&#s zHnvCx-RzLfu~wS<4yMfwwH4>kz=)qm-~Da{YbF3n(6+M1DV|o*21s|ysDF=P_7bH= zf`N62$*$s0f6HUUagLGxVNQ=(u+dl|n!wJhogjEe{7vWk8=~!~p7a+#2|P2jg~^b= zQuuyHyb1O(pWN?4j7y|*X5fr}^jML3+m8h&YCS2uQ&+E<923A(BqWiw>%9UMV`S!K zeBV=1&ZMPPxqD{?V|%@j5AuB5V)>2jby7oD=ootwoJxI`JylX>kQz9YxQvW90RX$D z{s#41er25{$Z$AKdkyPrV_U=JzzVu-M$!w3vy!RUoe(FzpZif?RtjbX@U0shCvAJ3 zV$c^!tEjAb-op$mCKmWp+$?yPT2URGOUI{BvZZqe+^C^-+Cjw7L@uG&g6Uzp0=nxF z;w}D5GA*elNTr*@Jk|zju!eqdFl1GjO=l7Ddq;%#nkh=Di;+7DW3M44b`tznu~H!L z(+$?r>$`YcHJEw2Q2>uD-pY~QQX1xDc|Io<}9HE6GQx;&R!H&v0?0aS%`spz2lqhX0Ak1 zZJ^vn9OQAH`!5vdBI;@)IJg0hZGT?>YZy5)eGU*C{P$6sM=5~JfeYi_Z7g3&We8Xr zGqJ4GD$6YFn$_)zu~jBLeF?T^uL-T?n3hyAXeS@YvNuUzkP2lFa;; z7CqM~`_#YtdrijL57cTME0Tn-7)^}^(HvjC(_XaNys{}ztz66p1@k1}Dmj(QMw1lG zmfXUSu+0^-Qgte*w62dsaDufKzfStq=^8_?c+E12%24u^PtXF|SS)MGN`H*hfP1e5 z&Cr1xLKW6oRbdH;0%GHu3M_iI=;{NV)#m+`F#mVvAo&ni3X+dcH@B$cq?ZrvHAB-L zXjG=UTHPMT48~&aUGD1NqQPecUZLziJ zPO*0uhNH!;6g>=!CvJ^KMgU9%A+tpmZ$s+Tk&7$QdvzYy(n4e~>43mUm!}~E2f%^t zkeW9Urb8u;98eI%DQsy7DRQvxGIIUPDxGG-iHh?Nq)`iq4%?!;-!|B4n4~j!& z@@DF$R#CPwxTb~(7#X$=Il2ns(jHd%+q)naT>!^<6X)rpf^uj+h}h?XdM|b&_oqyT zy)4{==;z81BXfca=)#K{#qmAbbtd^GYJ;k$Qt{bF|JMDOi`}0lo?B|ieZWJ*ZP@d| zs>4oR8`o2q*j5B#+Urx}X5glNa8Hs-I$8X4Zvga-vFJ{GKZ-sLHOYV-6-6fv>!xua z+PC@pS!j7Tw0%93@<))p?fbBR;sB2!2*7TSRXrA*fB_hnub#WB8JPCa!_7`Zg<$}# z&8_DQgOQK~UmLC#+L1U`F}+kGLD^S}OF%51q!uPHe*R76K5)b~L-T5jTQjQIm9I$uVJTj58M9mz zl}m!Dd=X=#H*YBhE!y*%)NQm2PNsgpM5eq13^$#&3aQt+f^G=88ire9$=ZCdbKgrp z^zSk_TlRXmypIPkFfKJ=nIQ~^DT`blQLc+X0ji9cuzMq9aUG(NIxWr@$|ZoGT7w0( zni%zKX@^=-Mfsh1OL^tJS9^gNDf9Dk&EDBfO!iTih5n?GP@iwQwZtgrm<+Z-@_!3O zF-ZEk0(t&OyfSndLmo-0E4r24%EU(%kjzFqH~f`PsQ|{RSt6T+Rerff%@z|Sck6T+ zOHWH_g3V`$caQU7O**h8H$fM#KX*;4hht9T_x*7|8Cj|{=-mE;i(&Nz;SIK@#+w9bryfQiY&D5((sVxpQoscbgw z#fmp>G@oyLwN73sRewb~&@;Db1Fb_yEvv>sQ)@Z)z|B==#w+@Q#JwN5obi!BM+Mv- zHyXXaa31u(XOQP#=g3cR_da7D!sl;)Aw7QgxB+ZEG)DL#qw-s{X)pI=Ua$cg3O_DM zSZ#lC5SK(eX*cVZTP35eQRrjrXqlS7B`=z z^8O-ur&tP|`AhM;#~;;yGvDzBKWu(5SROJ^+$)W7h`>c$L%EbU-fuORE5ILkH4ABI zsw^&BSUxZxE((6mPFO{FM%rv-jVZM{yK`omXq6JAB4_)#raj|p?8@oPt6YIHNiRqo z;PBIp?STuLdXkvFX^)qG+7~May6QpiKDmkR##rX^rCey-f<{Dexwv`c=ZZ~V#_BD$ zO>cgJIO^(C7vu2j(GmgNNT&lfIh+}QYHRbm?xUTRgS0;x)-SZ5^fV`;kppyhRxegd z$d9a0M)_Eh3ht>5F;I$#+9XU7BxavLw2j{B?Jm}AI61&RxA2yiBUqUol-^s0z6w6JZDJwsWeWQl|o=6AAP9AqY z?*d>~!T&$f@jpe64PwvQbK&uX{d8yie6(3>+EiFy6w5po#-Wfx&@NX+QHweseTFZ+ z+-qMkuefWVUC8wJ5kib_-+~)wGcMs|PZmE{K%e>R3S`cTV2j6BGrYIH`)lo2jdKG* zFDE6@M&!zREx&a*-R?bGfTFxVcoP(}c>t$9G&vd`U)beYW+|+0Y&rp-Kio$>TV2E{ zOxzfD{0i9Y`X!cSR8}j@;#|x_kSv9Hg!G-4;L4z^RxRURFZAKb-xea1QpOJD@ zIvD_Nx!ep7|JriH15{eVVKnQ z-abZM?7r;H2Mh5eeXnZy@m9%A8D)NV!>EQYB;8T?@^n$t`zKOJEEUANd*gKoK=mtM z`H4bh1+kn0eDKqXZWS2F5my;40OGeAEt)2LtldcSUY{okIot&4JJP*9brm#4cR=Zl zUHIar=-NZ8OQje={7vm|-zcVT{DzPr8G_kBynD%!-*GS%HGNv^AGU$oW&ae}=ocFP zo>B(0$8tl#L6&uP&vWXE_4N0icB4yqRFifFZnkQq2nltXSKlmnKgOfZ?~Yz3Fb-%W`q;K ze4ovNscAwokL@lUk5}=^uvG|lPczP?uPye>IMo|#Dn}qfqy=fp9;^fL z&ILwtBo=6Tn&U|HjvtYkVYZ8AmGp(fJ{}rQM#ke523;g`h9T1fSVwgbW0W15PX-be z36Pp=oL-Dtqz-`~d}Z+}QzL*>n_m_DUat_S$t~mT?i_u1C%E~%!-(y4L!HeHo~Ukb zEc$4YmzVedPwam*xs7bkSL<0B2FP*PYeknA$ZQ-j zE|UdtAC{w_@!g7fivkW0!{G2aAS0dob5lBugv|k7w`j6||I*irdxI)$LNi&%P~|sMLj9GF>9iInmB;`k;PcFC9?s)Bpcaut;Qfg2?{Euci`VFG z@u$iAr+gs{-i-!K?Rq1doH`2QKt9iL zbB1HTC)eHH=cKr66FQ`kA&mP^fJGfo#F;Xcq&Hfs%fOf3^O&~nRwW=tF@p@JijN45B$aCP zK+6Sc=}w?9wc0F)tgZ0|H>KYuRmotOlN-Tu8Rg@}I9cblCqHGvhl%KKkV`Kr5uwde zH(i{8iY_V-#5FRztKyrl8llCNF9L3MudptJk2+f>w-Etd zcB^IA5-~+W#)}Xf>O23p8AyJWl%8%J-?{((9Cbz@Nn zkxD@GEx%wAd`^f>Csk=kDJ-6!{0%}GnQ93Yj^!5--8p_d?sy*Fe4Og&xzm3B();f- zRr|lCJ{C{x`Nra7NnmwY-N|+3XMKr?*IgDM?Mt%-5M~*(psc>1c}&rA@e}lgK@Cx7 zkMUNuIX?TH%f9}gt2i32OW|Mbmen#D(^z_WyH#%;N$g7~G0W!<$*EsF+D{74ST6m_ zeN*xZ3OlqcwJB(=QDvd!psS%#-Nu#114RM5iNlIdTGJ9KvIQ}zO0}lJtfoSMpO=g^ zIbHC#LKW()6M;fGf0o3f-3a}bwzpje4_vG6h{y~aw5zDLZqE|;2N|itTAgeiRtb$N zR|)uEB&eH(+aGGPEvII48EtMLwj;^J{5Ushe;qixN#?tMxa{f}3=Xxv9|}oZ@(|9( zMr4+)*kf7<^RpEh6H4-O_~HZJf~6YQBR9=iZ{LTg>gC`zWxY4;TtC(Cxr$G4R;x=i zvw(cPy4&@ktEZZ`1FCNbC0CSCsSDOHsTo@jzc%Ga{Whf!+p79>*iq$S&T=KkciF%* z?R_AXP#RlDqW#QlJd@P9XQS=77qi+3VFJD9@|Zm{kJ`x6Tq)Z(Y|6h`ZQ7{d?n|nE!ve2_f(W089|4k-CL03X+onb<-H|m4mQ9^j?8Xi(J?MXZZRM4ZEZ5j^`vNe?~m3;UXyyWiL zmy3z)Sb47lNuaj;nyVPLSi5B_htZ;0VnWLJi#%#?&Y=hQ!x@U(h`~6=eW%;byI2>* zyBL?#-qF0Q(K?mJ?Ei3yM2zr#BE$rCtnYGPfJeMpIIO=}V0FxB$L+yk%!@p~JpY)+ z_St2#D>wXAX1gGb5TMzOXttT=RpN+4?l98-20*yyW0~d3lew%RaVWx8`nc`I>h*O!)PC|3gMe{x?u# zb+f<3+Ju}KX)Ay6KIm%pQV&cOD@w}Z#6!zZW|wE?eOIabs%?a<2J%&I{@7ie-P;*i z8_K)~~=bPt*(Qm-cM0y8&u#+IMVG*m^60qosR)XylbBiUQsO$lbLX(4<1O(gb@PoF&>-l61{dby2oUEz0@=1!k`02vZ1XEF^& z&|%|Pi^NsTSIqH>P4*dA(`#)H9)ETGR?H(? z-G*y$MlFrzl;_=3(Uc7ETCTyD^KUU88#;}C-mBUf#HQ~2t_DoNj!2h5P)!H7pCN&_ zQBIkcBAhB+*Zg_LA2=f^-}s-4bU!cGezR%sr)38%T?qL<4F^Ot7vFMXzR0GebQ0}B z21`xga!57Wg_j&Qy^oXxq(gC8G25RYHFh_={z{&8|8AzPKm400;WTl<;w{3K!ks_; zQ`5(YD3OyF;NOtAtyFO#9c}>bl}^j`3YPU&41WDh>*J8@pW{agIGpHs&Nfzhj$b$% z4_XiD6gqtSb`N-`&0*+$eV&rB+3j$x+@F|+g5B03+FCOqu6n?Q&y5FT>ioe>s1~yNBbCrRP$ztEudF; zYJUZLz)=;y`EA@`2GfYMC>Rar`@2Y)ZCPg~k!DAykmT*B3&fUEMQ} z<`Di%L^?0Bh=W>~m7~3)T#a>qziRybdHOgiPjCi$f_t3h@uGt9UasoXE>FeJRLRsP z+Nn2*Hm`fx_Cm@uB_v{MCynt?A=@agGsEXHpRwIG=Ytx zhbO?_k*5c{vBT-auclPuZ*I0TiUp^exY-a1pE5BB!1IaiCm$B{h=5V%rex?M9DX{N z_XxV%&c6=B1M)pIY~Iqh8cymgNk8YA4IcbIs@^iJ%BbzuUVwCiz#^r)JEc)N7tNwe zx*I{dyBq0Pbcb|zD%~j}C4wOP_TBIEeBb`<;SXRQ^S7+F~BHcjV#!oOe!_2P^SPSljU3*a79j z>;J&AdRK$xM55wid){Ca6p|SGCJmDFD(8S;;*De`^!G&0*#ut|6W?a`jS#(tX!7^n zl|gLAw76JEp>|9@CMl9;3KwzM-Ib3LdoZ)2FJ zMw!mV<4x}C!qE5BnBKCcIz|m?ufXcVF@D`ZLQy}xfmZ4WRWOQue+$rR~D!bN!)I zXHo|L$EWB^;9DKkoMbxYR&gm(d!S0)U#ZK!_xyl*#ztZ@f|YXW0Ttc3w|a8 zDU9C=kZyg3tgoW=)J=@2OoJvJT5U1rBS|P9eFuwOM5R>|2=#~q;GO54fEHh9Hz$C3WIIGc2prA*eV%`p<-W6M)w@Wz zdKgRK-*+D)uRKjZh7g67Hyd2ZTU=5fSIGz7#{mH@4aYeucrwIt$4 zBRQriemhSIzDo_C=6J?0E4qlNsg$^srne$?KOO8J+M3O)?^^VykBwSsxuOXP9=-ZZ z^nkB9K0wq0M0=0eBwsV*Zw&xDr}wgjp|L&Dj{~A#Rr1T|omfMMaIVGxb^-KfV8?)P z!r+yJ%53f!K!`*8uAvf?0IK~}i8SBQ(}Xr+M8I<{3(yzURuJWZ+SpnL5)qdwhyW44YInHV-Qb(S%hTm&U?F&-Gp$Qu!!-pn~@5xEUnJFAcf*xzHzrE z$ImE2$bofb7OqDWcWFwcDy;_^({f0SwNo_JC8=t^Eyb4B9%vyRKel#qH)-D}a3j|f zGXH@KvdzDGe1u^nmN{H)Mp(NWRYwg@ZDA}nn`9FKxSsgY&%Z?Ow`jr%&bbGD5+X(! zo(`vu2kOtStjO~#|^lhz;;fnNajvDlW$XVDYkG0-F-Tn6<3 z%-NLl=V}*jlM^&zk}Ws2cyerei(hyA|1bxXfm4PEQc~zx4&2iqZ`P=0X`WW*LN*ZV z{43^C&CINcs}_eF-!iHJVdf(Nbu?E@?D1ZZ#g78o=|3w`qNcYJ5YDV+$0mm?^tgG8 z8w04&t*tFw^S+2809*;G#mcLR(}^bbPZ-mt7F`Du)KBmOpAd8IBdh z3=&uNAwz2pwXh3pD_|66?oii|dccV>lUA0Htc0WX5=Ku*7e%=v^`ofOh9?ZZ*CC04 zfamd>LvB4Q+~C~jV{HWqIb8(Ue(1RaV3wzv{=Hl13w1&Eg4fpg=`0anT7I3zw+nOE*xR_rU+na=Qx;opeuQuD3jErxjT72;(zLmK*T^ zHAggqbQUUO^7H%LFU%>It@sG`8&aUN@Fc^!an2&-0y0$^=!3NMXIzfVM4p#<^o$q@ zl43JqVy5GleYy*w$FD9$+s60bo(c`}55$9bjDo-xc|5u?kV69595%?K@Hfa;u3OY& z(OMw{#OkQyOefJt8Q)t#_R4MX_7{X(ZnLc9CJlkv=@lm~$wQA?EmQjcJ@RkRrBJ+m zebsb6+OeqsHR|0axr8c|EkQx$l2jM+VHl_2ZCrer2KV=PrkSo-!Y84or&P$k||G0j0f>W&eV% zFd*gT*KP;{{=l~n^Y>!;1r+nmvNw5dBi*k6LBdCmQ{`X5>iS*xThW}?Gxan3-o8Vl z1y8RNRNpjrvR`n1{QXd{bCd982pACNcrgR77mWuyVcySA2xdy&AN~3-JS8!3g&3NR zB1X%x1<6!?Du-BRUH!TSeDo&W&^c^mviNs37TIfnchc%J_WuMdEB^bcI=@2$(I0=m zjN1j-C^A((r7@>y!P7)aIS3Rm$33^ijClZ*b}l;BR5Nzb~pAFCD2(V>5CUzD+OtaIL< zW;O}=&U$-S%eAg;=a}TW)X*~GEbfhdjG@{6aNI5A8Oti~bqTp-$#F*9a#g{|q&rjC z&Qr_l?Sf@P*q8ZgjhO4(T%;6;6B6F>_U@_zn=ggFCw_pt)ejCC+*K25m5%#6RJ$$W zSUz$w#?3$kaB%}41{2;h?RpEEfy0v-L3FIqc4CkLyb28_4Cs7`h+Pb!n6 zD1CBNDh>-05OpP0*^>E%QTWH+XD0QGCzuX?flJ0U_4rR?jpRBu8k;da+Bi<+hg!^b z^~VTJ$adqTuhvgFjfk}=wu~!F6OQ=rE5x-m@%u6X)4*EAbmt*+f(s+->5lx~b(Tlx zg%15aYIN@<0QQ1Hw*k98pcj#0hh(ST8BIE@5-Kfz>UHANQwKGdQCmokeK1o~yeA!YCp1C{ z_o0>1>J!r3&3tQ|(tMrmcd1jN5J7nb;J$b1fIj$K0Gh zlYXf4K06WC^J&nPXa9xo$mwlGRO9~D&;_N=S^rz*i6GaRKQ3hV6n6hC0Clnd>+a(% zna*xm(KpA%73f2#@R;;UBTJp=I5WC*?`Z6y)3;oD+gyeeRrSL9`e*Ls(TZ@y;BKT# zHz22wQ{lCH3u4(AER+hwjUtGE3OKM<&oP1HWTJB#5kVt*UysCyOX<+toSmBdVMraK zYnNT!&>AaCxETQV$c?tws@3MDnJ4l-C6D-0=(0s$w%H5anx(cz`&6dw2Xh`w3)FVc z7lP4sV*jfB(6_y9?NJzakoTTX2AB~5{o9wUIXX>agm<<*jt5Bnj@W+k%0EDsvJ;>c zcTTsGiCj>rm0fKeMqxo{TgUwJ`!E58tN2ow3=1LTX^+gYqf`^{-bOVdaqD!&X|mPA z`|=~iB)Kn+sCj%7i5Q|>yf(xLuDHqnlcX4Cs9#)Z&;r*&P?M+@3CFL=txy%oMAXxM zpI^BhCE2Q;-4VnfZ(o5gN?I?!hY~cCkhV=@glA^yOAmQUtz7%sin-#koYuiAnL@$$ zM_lEOl_*mO=u1e4+1I|27`R^frLUm%;LnWD!2bnZ-^Jxs>=ZI1QoosF{p#s z44*CQ<9xw*h+n%iG$8zdS4Yc&aUWIpOx`-%mCdI$X;Bze{^z)|W*xxD@Ay{}A@g8= zT@RUs#M3xjM~C=p%S8*fl^agCT~7~8B;_#5eZ1-J)4Qe+%KMiH7siImM!snTBw|2n zkwO86Rv@skZHl3Vws41#FYX_4e4KFdSfsy?bm>(0`?L5Hg7>zG5n(7<(!!@yn!xMl zx}r;D*2!4ll0A7uV8F8ms2zq|#z5rBf~JdLOW@=W91}y$%_lGdU}e1>+$pnl9oZ7o z`bXjw6Z~KH-(vfwBe;A#6eky+-<+ScGk1bsi+`vQHC4Y*%YcqQ#{h5t`2&j_Td#;or_EoTy zYDF^%EykV0ZVb|7RLitAb4g@5$vXRM79Pezkf`Foca2RLNL$eT(KC7+EgH*swKx+0%NVO-op*=1Uj2H7x?&2X9VXQ;D-x&}_*r zU^2Y&8^_akoI!ry;I)a;WQjB{7PelbXUJaE$~*06KTNerx3B~HeZk$kJ90aeC6_)w z(YK;I-ek-lM5jynUajP81APcr-g`ot@f_D!+s)p-e-5+Gt_yqO<~V5K>R_8);M?2q-9Xu zd&xu>RDE~bDLvyq&7bsRqvPx?PN}Z1QFXA+%&@gWOGyitQ6&;#o^Qu}=>*aWndT?p zQ81LsiGk2rHM~rs4SXVjG562Ir(Arj!JsmxfEl`^9kSDdRh&dOx!Dm{sm)p9%nZaY zPrLYl_z>p={Kp~OKqFND^4ujd%%HP&CQ~!G{H7dcc7#VuI%ng1zqW8uxEi{%043B& zQQ-A?Y{v+(Eb=(NPj`!Cx)H-AZ{Mt!C$WNKwUe;oVKb$|xe%v%r_x-nuBSwoWNAi! z;XU&+C_b*eQ*ogGYq1Sfn)Vy&HnvNL*Onc;1U+0W7v*97Jf$LfSNI|00gR*2s2it> z;xrv3>U~ij?fb@DMrOIc4?eEQ1r_6WUa1E;P4JJ53@`te=Xd;mS8Hw{nC@CI zKL0w-bJP1XyJ$5@Bis_%AO0F+Md*s=C|Pe~_W)guVYf=!+Lk`BQFD~C)B_*ghrfmv|lYSq_(}W$$ZE3O$k47M4NHY+HVJJ9HpGUjoa>moB zPpTrDfh0#VSuTVI1-Zlg9)IGF;;SFfbpQ{c*_YqgKu*lcu7MRFV8=t(5lHM%-3?;) z2NBBFhyZaMzgE~~1VVnk_`q81eH#()%vYbRd;Zb?cYFxk z7YIbCtE+py@cmOk;OtUPh|dn&(L=%un^B?a)ITS4jXqO*D)k{rJ!1CtTqaZq8^@vZ zYI;!7GD@cCR9@V3Z~Vt_eY#eV(`CZt%l0GpatOgrU?7X2AS&xJh6yZ`X$L`PlH7NL zCROTGH@eM-;S(`GGeT^;Wu*18j+j7o(NHA=7|V(4X7TA%2iO4a6$zW0M3`ZA^_gy^ zKanP5PVA>qyfhcRs)`o>Se#<`o7OA9$GYOOz*S}m?5k{9odm$rTcDOLLr}dn<_!r# zVld1B7@F?|%R-I+{zL^re%WRHSKgs+`IV<~)dLHY-C)f$=+1k+(`{5@y{c)$-B>O& zD@x-&d51GulW_f_d0k%R&%W-Or(?A({wf=@n<;SFv^Hk3KareAiqxaM86Qm~Sf;6D zR0I=uGii|;Gi|8|3cG4}#cO5vdlqKHkeqxdmM`u^+Z-l^Qba^hOsczDy|OK&>D4&G z%|C?GFMS7l%(VIcjhbzt5Rfk{!SJ?jN#d63_Kg0v+rrQjY zrn6Pu3H|FI=EjXF?(I@v*f_VuaUrlny{UJG(em8&2D9ADm0)ym2lK22D(8ztZ8sIc zw&la4cXQ^C6TXI`7`(4KXyJz*#lb$G`MN0x7SstEvj=gdx|8~nVTE{dCe|D@vg%6p z0UJZW{cJ0aG2A9STm3X6&sBWxOQwqbQ`rD%6a0%JN-+1m$lEx9q1P^NH5J=>-&DMG zxYdtWrhdq_DqTBH#o?JQ_#Vvx|G+qxojrm(IhW(1_mOYY=3ho%=k0%n1%M&JWSQaS z*@-GAJ8MC1gW1X>QaBly_Oon`Z+awCaWl!(B)}!DOs#rv;wn>Vu>#(%zUH7aSJNz; zBOu`(lY)W*T=K<+;|SpHw%S&BXh|d4IVe7!tP3VlEuV`3R~+EjsP0UAqn4zLR;5ki zv$?K&n^%HcM^^6kty`M^tPDIsY?q`AU-j$#%C*%7VPAnV7YV)?>+|wSnFqdT_$!kR z{S0&#NtP~x>CB2k)I}v<=rI{ZybL0tGMl<=CEdbxU`$>mC||CVaglXJE%bo_W3Kksb5jJ z299bjK*QhB6Z21^zM=7!Z3*=?n2T~Zz3H=x{Mx*df@XIlgT^g1FgY9c*1q=hLsrSG z|JpCQ*$sLuJ=?VroVl>ieyK?=>&2jG8;+$R*dGZD?vA{q6`7~n#)mEB} zp1g~;gl0x9ru{MVK8nH!{ir(hnoF66JSFb>tbC)B-2w?{>WdTT_Wz5EghYijwHTTD zTd#i;d+7ba#T_Cr*FM6XbJLWD!kl)x-z_#jZWyi-KLg&>4%=K|$%@Cwpz5#)OSOf|vVA7a_jRQaKP`__7DU%*e5q;-?AD=!`dx zd_&n`ow|Y67mu}iF=)BRXzs+YYgAc1<__1|#@$wv!jhxu(upty9ay=J!`Pv>tQ3fD zW+F#ZDKjICZxu7VD8dUWaJE+=I?Lj?7<=>Z$+BqLbK3)OId5=WqTtlAia2jPMq}(w z_^tBoWQYe20H*PP)qQW_#**N^)G@~iyY`cRjXUV*qR&B`?( zCE-2!_;rZX=d+fF2bsVj-z-G-18#al354Z~E7pgJ5w;o&qnhB@2@H|pj6a{wE{|eX zhx2kqgsST#%~~Tp2u+xMfF4;T#Z?8nvcScWNc*tcKS?Zme01wV=!410V4hqa$m|{3 z3EVIv`_P^$l{~gN&U=oa$O?ML;z1%111k#L*lkZ#^&bi=Fegb!MjMY*?C&3gJexUP ze3o&gXo3m%+#I^!=%7cUf_n4!2cJ2WdESQ2q5x54cZqW`9#t}=<2im@^pIO0y?HOp zycD|Zt{MYpDV4AM?r*<~aoBOCp?PRX%kz`G{>~0@*6e0R3mLU%I$JIXpZiYly@b#Z`z;$H@Z zxwB%pa3+s$0TF>tXy%mo<{-&T%Vf&~p(&4BvBH=2-1qkbN8r`&{l^#Vztw+9Hh~w} zUxNQ+1$n(cf6vu4HQ}-zFp@Qb3$3hT57VwnQs;*eNW2!SgU8d7r40~(D;p8mc*)_f zJVz^SET6bl()XKg8ocwBMS{H$*0nH&i?qtO%BF)Mnw)7XLg45t~V(IP5-CUb- zO+xARHKTm~G!Jg6;I!WOaeJq9H$JR2BE{~9-rS)b#4eu792q6bz-4`kn(;A003sYq zYptf_Tt@x8)4%r%Uho!q@#o(7qM-K&^_lOBC3C&Eh1^u)P`jepbZefq+1%ztf6H;x z*vaQfbkHtj5{6Wz$|C+k3O}uH{h*h=D>i?zinAmbvv!;0*zKt}3%G%n4mhF`^^`_q znRY~0gWB{3ywZ%bR6ERM)CdeWz_G2)(jL5ng)9dp)pmL|tfdH&T20+rc;Mm!fu)y? z1}N11S-xrv13qAsJC!fB)n4gM`h%pyS+b|9uC$t`64#fM!0R%F0}FsYf_)1jJTe5Fl}aDp82Er#UCjQnixmZ3dgG_tU4AZ)JvXB5 zc{Xb-aiP|YK)ALtY%?eJXS;4`T8W2sv zpg)cs9c2K@jbjb0)1oA9Li3HxhT5Y~dasuxJl@puft~PSp!~OhvVgsP>g$wE2tbVU zt$7_{G+#nXlPt!Ine5>_W3Fda2((QBKaRtyxe*aC)Ml8SL5+=p`}O}v zB~uQWPS52UfrCJDXr%SY=}KEytt@h8w)uYJJhpNzTcM-9J}vOM(bEEl*?h<9Ic=uS zy{Y28Fw2)K04y0>ep5H085ueonFE2M6r8tWo#}=lwOlp^39VNrU05_C$=f3UG8DjG zMAC2b`~JwGs&p?Xeau3q*E&a2?69z)=9KWF_qB}65DZ66e`D{e^NywtBmwV?;S$TCVp7v$oB)Jy};h0LP!X|e`}j6EZunf168s6=5)+R!KCjJJm?!X>YpAIUqY86E?x zs23jQj%&_}hABC$J&9&f#}g-gk>>B@3%2`&Cb7QDOUBK$hy5^4rgwC6QlIwA(jS&_ z>7tLu{j5GNDBmb6Cpj9gbU{~dmP%kUbW^0TH74r1LanuQH8qav+*O;&{YPlbSLN{c zNCm6J)NVzb(N=C7?QjjB1nVrCe%q_B9)~7QOM#kq8-Y~8sV0n zWt&Yg3~9u*POz)2b}zF901+fv2Vw4hja0!CNeTvvGG3uHl_NFCGiYkt#(X%kqsOT> z%w2z5Ve$Uhryuz3in5J?9(xB(P2@E0a`6ZyBh|auV)tWR$mV$|MuFS_0s_Ku?cepY zT==z-qH}$2_nNxJ^j0U=Jpe$z5kMj2}PV9?@~M4A@=2tLS= z>_<#`S5W1}ojqfjULUIaM(Tp&Ilpo-L2cYlvUap0_I*jtCOn3s8Esi?J<^s$isV;y zjJ()6hm?iQ3>>amboLCEGTTpXSmlejMyqb6Enpp=ONDA4$FLQC%wRVM+;`$HS2zDm zg~TiRKrX0{i_;Tpjl%%O7y7=;v~uoi9N!we@>E}FAbY@U)GsLG6$oNA-n`L(3>pK) zZVn=ZXk6yCeoAp|nVQdSbN8A*JT`ocTorZ@k`cp1W9zz2CLFalwMbpeI`=|Md27O>BOxFO_FbcGa}tK9rwsAEhf_F!Ow2FK6ISNX=dgqX zWJ6TZvql@%yBbv_upT1@;TCy;Yw90==T1%{06eF_oj`{T>Vp>1_it+DGl3jZ>4u7(tiR+*1s8p-LQJG=m#x-K)sGn}4SJ?e zA>S~8?a-nq!oLctD`$yque29LqmcId)jt1x2C&_O&-|%NUeiw)n3%bU-a6pd063E` z_2v^TH*;%R!$~I`cETIyu6!<4nj;@6fHNibwpxB;fAJlF79CihWbnT1z$9&8aBM?| zyZIaBq1TS>NBrVpgac2<*>hi}Qv5#$_5br801=rP&)@81GHDf~7*IVgon|VqZ1f67Qa;pB=)j}m&tRL|sOF$sGG^y2$ zc0j?M>@+iq`W4t=$Q6$t3kS67g_}~605yWjwnbK$9o8{hxxTq=HY9avlQ`N>*Q2W5 z0RiuTsLi+_Cp(>sQi)ih zi^C+cui8zedT6T)UWtw?Xn|8o2yG(U;6~iMWH z0vTWJ>7RaqJ=!n-zV$9d|4Uo81!_fECl~bXvU7R-r5$oLVmUi9xvAVrC(tTt`12TZ zGyuriAI0U33MBlmpU^dflQrgX7`)LgMZ^1Fi&;W(6DO<$tSu0e-M_aw?DmW{vSwOW zU1K~4EuKaW7QLGlFOO>-G_4OhbrHtW%?P3c*3k-BBW zrg`P2`mNz@x6&+O5S{%iJHtEuO5O}+-EUvRaZn;d-(S?^(twr{xzgPrr3upoWj@0s z@JBwtsNc`4yixU|@M3YIwZle&T<6D8Sf9_nJTs-Qn@}5I)Qou(2#6_jo-!#O`OGO} zs7CA5hb3ATL2FJ_A=OR8oT`4AJOpCpp>%Q%R{$LfB*AjBm!02~Insf4vS_Fzcl+I< zn107_4Ju@v#Db!3#YQ=eQjyt}=BnitaO1m~U8l12TGyCd`Ws_KP#0y3lqunxNRG1r z54`uR^cW^2lRy_>;uI4?ye=bOK(_Bfox!qUh?4$2%Cpbkpm zuz!`o?IZslaa&*7_b|1dRbH~UCSpWH_lLpX>tFG}#CkP|zc#{xUZi5>;h=avtq)wG zI5A#fqIEKI`x|f$>y3erpIpee$dG^qI$1>i)}X}Z&6)xe%}@}S`p5^;5eA-6FYxPx z6mN4}hBmXCeB$Q7S6WZ=G41gW@q+UA-GeZLCCFb%CzXLoLe;v*JK>W#mGu& z9}@}bnG*zZT;&-#N4()3(2ofe1Ty=;l5729fcF`0vRloSnLc(O6JQ8Ec9USe^YAua zMMV16?6CfR&+VT*d;h;;6|hry7ugRt5(C9UdS5mdZx;_1ZBz?^G< zL_Ny3s5d7gjuBqa_UN3HnfZtEG4knE9xWBv-w;=(vQ2(k7X*3>fk{av0s#woL5Hx1 zEi1oct9TmI8H{5#)QEI;(Un-;(PUw<>bh;QIVAms#9vTXSLXffW=SpVEIK~3V0<~d z&c4r1ffaJCeIb28rXF00+@cxed|5Bffv$~2a6AcAK4B8~nVz_Sv251lSgwmJ+rEqJ zc&GH#uyBWb@3q?{o$Z<6(ST=P1$=HXZ-APYaGt9D%~7D@WO(oNZA98;xR>zrQCjlv7ZDMMv)1~E&s z?U{!Yqh#nFj|uY*n-Q{%KwV##f|6wIc_S7Afv@$SJla@OUu07XR5%e}9l66c@)T75U2U?_Vx_3Ogs19R`-YAIs zFz!aLu?Z*hM*hgx|1uvyfmA%jV1-&SRlG1plfvUKRkQNWRz!#+g*!HvM#r;rrtb?) zJb<0-{t}@5CDbP$M=!l$3V#bKJ}6X2?`gD+0D1)DNONxeaV&5De{FCLH=blGjYp zl}d0!kQ{uAHeab;{5ZtMFJd5V22Io9QJQJY%Jxpyp=&I$cFuVi(SZLh2UFPY<1s** z_Z>WRl~uqUlt>#$-^@A{&6IOcK&MqkbCxQxGr*8Ge(bk~?=E=zW$*BiAgKS;yBNCQ z?-E*2qpgqVJ_O#a3AuyEVWwewjM*}Wi_R}Moj@fd@V0gaT3RrhB&qMivAE!aPnOe9 zyW;=Y*o7H1A6w#?h0NYTvnISGJIR)or$vU_)6u7i#PQ35Xd@56@ZO5?Rc8T4s@c9Z z-rZ^ei`wn%uYJs#BQFZ32iOa_mVVi$V?4>g*CTx}wvZ2#@*Sf~yb|M8#qP&2y9J}D>)dSFo8I)?NOz;M2p>&Z) zA$ALI@rSHgVKT1t1$oasYXb4r-@oxLBrbwv0Pe1Z{Ii=jzSWBE?~!?)5=;d|RW8$P zLSZ8Q9=GCAIR`8~(sGw=x2x1dgN!yiDG*1M0ZSk<7yX5yL>|HWz?~c<>BB*)z*j4T zi>g9zgpq3Ve2R`OW0UY5mtMM6Nc7DGg>0&ib$$MNU%q$3s-P+f&P+|W8xyiE{dj)S zCtm{I$$O_uB)DxNNCwz+8(BH!g!x|q$SNw=kGHuzE0$E@Y9CE5Uu7QyUwW=rq932I zgcvXeak-FE+|E2x+W%daI{!98kvy+z*A6tTptd;Cy*sk| ztVE>QR`;5&WRFhkJ!1Idrrb8e#dvt{>J0`xvr#&8ASzd3)xg3%&fP)-u2zhto^x-m zOAmD3lkE}qZWTAcsIOBn4c+8}{UEOiQqOlNy98%hsD}|{pW>q)`k1TXJpOa9;8F@y zz!swPsIZt|;dVKvyPzp-hidUjG7+~{1ahlgRPSo(1SO26QP(t&1(bvGeSG1v@)Z)R zd4w1u36x+Ea>zE!q4|;i9;k)>XK=nbjE0@N2x4^4V+U0xix~3Z7fSVIF|ThK9N4$G zvg{v`Y5MnrIOspDTCx@B9H9l88l%tzgK=f5Gt61-OjO~j`|i=5XZ8UIMVn2ZVwfn4 zVv!2{>pH~KWBXK!K-Kfwe$>QLlNt^MOCy$jSJ71S_s>uH$p(7T8<4F@-()*>USD|q zZ}S^Q>3ZLAuQ!>jjfhM!-#4`TZYyH0;51)X#@|D_WL^4*Mt|kvwIhh;y5)v`JKJ)j z@AKkZioO_~kJg`qc#VI4?F+X zE~i?U@Wdr@VE)!sB}Z?u2tc(T~5e z>Iyy%@y2cJ1|QArI)A#y1RhH&sBP;6=L$#8Z@&Ct%JrfzUCQeD)C)|TPtpI`^aB8^ zA+UqWH$3HrEwF~#7c*J%ifR83Yc0R%zwnH&Y2AM)G>(Tw%q*{>@MKmo4EKmyen^o` za}TjJN?RZ^w@6f!5aT(_>(ho)&-W`H{c4tNg;a-M(_%vcUnsrJqFerVT7?N#^6u{E z3YGRnt3Bi*tSAl^WMIK)Gs8qf+Q&7Q8lBs)B(DDzoqNQ8jR1u$$E!+1Rsn~T+`|ar z2&gwyF6p;?_oLMT!0$!&zNupNgbT2UmJ8eGt3hMTZ2|Nvqjy>+i11AR0FHOhv0!|P zHxz=wa0g`L-ceMvw$PMMY(hF6b(0gWh^8{S3V$uqp+m1*1{C!5`bgo`NAwS>Ff(cC zBZZZhw9l9mIcLzH^Wr|2ylJaso|3495~>DE@ytRVD}Ny-K0rf$P3Owlc0ta=W2Ve$ zc(zj~CzESd^&tT(#Ez}azorWeY~=%{T=Vsaae-+Ah;&^+kGbYo@s*@p*Q0x@w_^jclUqSPPM`OaXMBy2!76HD!UFA)mN6CYia6PW+7D&#T zOp0Mvo?rJT9&YE8sHKgJ%{9Wp3@juz-b4rwS&0*vyt7_W4A6vY(ik zYNS~K|GmbFjGWcGKOnANElmOCy;PY>&v6hPwE>GfFyxz^891H2d3Z(bn=CojzZDRN`^uQPS~X?lCeYdgTdeG4Wgv0Nv0!Bfh8)5465jxB4a&z~%- zXcwoIiB_uhs6muaLxPbuZFhR^U^0wR%{}W19Q>1D(md&XF&_Bh52;by`br}wjT5cQ zehK^YEET$|1n3CsHxI=oJ$44}-Na6$RW%}>POX#<0SZ}|#kqmX+`}cx5<%@NcFTm2 z((mXNRzHHUF#9^?Hr0^JngOzoZE>r*#rL#1&O~p2f0;#I{ho9qj%~csMg$3rq<%#% zj}N5S+unSticEXY{{H~uRJ4whOZHVgGkg%)IObgqO9D1l(1nYN<9aE?yt@YbTYM5g@}twm1cw zfKqJ5S}-AzQB{sYLJ-)x#99cQ(V|(ewHp%II5)MI1*KXZj+Ay*v|5L(^bck+uL)v@ z^}653FZUKEqj0JR0l1ay|E5o==DZ(m;$@+qds-X z;wM|i1NYh2*QqFl*7|N{#Y}b+`U~avPgCuegY3Q@S7kUR6y_S)-A(Bu#Y|D;X<^Qd zvdNG;@1-y1uFr3v0HqI%^^Ved3jcJ1Zg;I22ztFUWOo`ObjFI~^7j85Ir)IOC7_$0 z#e9YDQEk&jQ69nIz8Rz{{+A4Z`3!Vs+GanCs{W5l`nUf7V)M(cW?vq}M}b1={1ral zV$|2WRrgq?n4}XNY86MIi4k;To-w=&p9Sdf^#lAPi!yAkOBTOo8y(RnYycyWgBV+R z@l!5O@Gbp^gssBt#i@Yoj+P`F(TBYy#%QA&bBqr|{Ifjs>tZbi=bb8*KWFp=&G{a1 zWYA|;9qk7BdcJFr6Or&gD{X9!SD-V3SS^d%lf!v9$8wK=jhH#qYVDRpUYHEMXIZ$k z0o@zMxAbbGgpUNyjq6)7p_?pnu5%9*D65M1fdVs7#D1`EvD?S<)MR>uiEgS|*cI(( zPNgVF2xH2(q@0#LcuIIb(yyU=Hp=cBLj-P>CwP&w7|g@|?6~CX#7c`wsdm!+7Btv0hynjtvAP^^lfR)%>*}#1k)wj2ztO) zwv_Cw=vKBaPs{lJFHycq%Eucew-vpZ7`SwxP=VogV_VoY?X^&UQFA>W59groK}F$I zg@Lz&C%s+X56h%4saxLp(PF%DT$9jCfVZk{<|z}-%aDEbmp4ydKi$1qSJ3)4DIKQ8yh=` zK(JjJRB%Q8)eM|dSn~GV9Wq7)4S>|k-R6X1Hhs3qSHrXNXyBLH_($XYuTvk>9OJR~ zUU`2S(`?7QSxiS4!JP-`wKTVFtOU8c0r6IrMN7#aZl~3pMfIU#X-x*5jYUhD}9=f_$L$tTEcJ*IS2A zmzX#StEvsLFUnce*wajd1im%|v0To#q}C+fs4$skGXVDSmcxxx_k~s^AV50UH$-aw zkZV7e$5Oi>v%STONo-K7F3xdlZASb0oy|`lO>tk)mXmUsH|%{i@BA2kA#Gun=E&kA zDv*}*y6>54>fFpz8?j4aKb2?SW;pWKpPw~|EV@7@2H`vNmvRI7KUn<}(OWlH)}6^! z7A_|)s_Gd?hHhAAb1A`uha>Y@;ok+I<)9tvlzL*i>cEg~&TrV|)I@jdcS@h=O%e4J zQi3U=P`q4j9UC<0QA%iKQqKW#6tY_MUjDUuW7u*tgJ=k5_`tfM@I3PIrKQy@oJVp6k2Ax% zF>_8HugsQAAJ$6ROB9@9N3EEAoJdQ?pU2e4jclRZxpc3szs#o`@){xg7u>9oD%KC7 z-RBE}{fp?_w@jby@+H(y z*uaV|LGDT^_Suws5r^i-IWZ~Qen5eHYV?~l=OLwdaaMW_G@DjmV@(TJxqvic)X}pps+>8ZAYe$x zz^WOT#{$ZCucBB<{g6a5#l<;RGfBYHoLb!3xO#k$HwrM1*FF6Wb(UVdAPRK1Hvza3 z*=AhHJR|n8b=f25<;OlF=YNQgZxBcH0mnJa&ZHK|b5>g)QbcVT^fd(e1G!K>a{QaF zT%KYoy-!h5qtmBI;;tUc2eIH7(@c#T7R=t0ID!N4<4o9Q%^%qC;(q0=y$-)O?nydx z`SRJ{p49JpXY zHn8?}vPvN30+oQcBP6^I5k4d?fgca8twVrl-iD*j^YaQea*f@|Xq3%M@t1#*`d^9v zd7020hqgM9P*Y6Eturs@t#R2p=*2}>d~{ftZm>T(WRVtKSJA}DG{Y*0JS!jqcJbb>gB5K_I#S<9L5PVivp2YU2JKb}!o={w z(rmNFUJ3F298%VF@?J4%K*x-4?2qXr{_TBo{Z;0#4J)>#)mr0|4;ss_tJZ7QOCgq; zGV?(^J=z$}Ypv?OZzXDDwq}8rJL8J$^V|jhRh(UUwAj9Yy1dV4?L5O3%2mS(Le}HK z4W$}JCx0;3GVzp`TlYfQ;FfbwYDVL#0t{sU;D2K9%o76AGsvD!+C<8Ryo z3-(GXw9ZRVU>hZLCba`G{Vm;Fb8KI*kK3Gj#<0D&Y{`ag8z`LfCUl@hoq=x&;f1v4 zyE$oF@o?c!AsV0XEn9x+!QPaClYK6KUJa&@M6|Ho^&nTEv4>>3XKP$pN1*OE`)N+QvMHl>T^g~yCrm$f@^xKrHo^}bZ zlg;CNBHo7qSi@PH+DE5d7YXGPtwqPL8K0_; zK!U_v6$Sz6p_MJ)<8V`>jgt+2OF)v$kf&$9Z;64xVZ=K0P2fztk^d5BY+B@A>{khw9$wj7`Sx)NX8yfT` z@agK$$7_QZ3B0fWgB8#D&q3Vx?V&DRI!IO8Tzj{!03ofZ6R}Lg@#X0wl`+RPlaLD! zS-hYBTRq1)EF+)r5nGEN@)k+d9wXh|?fskUEh>apuk=#bAj`1x9n#s6_du^GRZ|OC zqC8K4M5XV!NYRJDs^N zoP{3K6aLFSM0y73&px)q$W}O7g_{J=O|--DqyJXV-MwGTbLmBY)5JD`7^rgDI&CNI zXv(HAA{(t_SCXhZ&KWd+q_ip>yi!^5dvCt(oq$8#HEMmpY^kAyTq+{PH`1Lhtvlx_ z7L;$hh2A;CbFp!9m$D1C9qG9@R8AmeLUZp9ySXW~MxyOUHdw(He@cy?nI)A!D@{#Z zma@t?r)Q#@)lGWy5Y2tb+JqI$hWa)zu2V{jKC;FAlbl+C^};?BPn>I58L|b`;@Cm# z*rO_PQ?g%06ODMrlLj8SdA!YuwoLILUskHjZlONj@DN+^`2@$g#mZc+8E8BI*x4s96+&cb{TH`mzS3x zA31vd>4e7P|2c7kdJ$!|BIbw%ifP?o3pj|S#^1!a&sx6@#Fmd{brDixv+qzg)9iX~ z^GS?W92PJ&Pr^RiwLcRTF1KrpvjV%veOn-C7hKH^ufj@3)_r5sElorc3U0}!F#i^- zAnrl?KvAt_!{@^jhJ~T^+FFxYcCR(}M=~Z~Hb?49*WcqDxMXa|%$~6foIaDrGDmqy z(3UXzC8;hFmGb^>9tUa|1{i%PlS_q%n>Bmnw8P@BYBX*y)u^X!9KHEG|ApK~3hH3D z%RKn3&JP)Q>Sq1CE>1Brg`n<67q1oSGGS9mV3Wo}?AkCQ))<_7TL`e^R1>hBXOi?x zvdV@j*@=#1=$>nvd)8fu3hA_LeQSff;UeHSD)DsHBh_z5raWC4G#Z z>m+*>Fk?4!KW=5>X&8TD;HaGwkHyJVInxIVR*mRRKskU8rBuy`j-&lj}V z=bXmf5-!V2ooL{sCYgQo`ui70lMemchh829S9Hd*kZjSlIo`8lZN7r9UXll5#dYjk z1V`u}QHA6J&<{Ht{ts7w9n^LkZGpl8iWQ2xLveTa;#LUmuEE`l6)Wxz#hn7ho#O7n zrFet8bMv0>oNwmdzw*pvnE55_?EUPu*4~S$@+Dl;)b&>HvF)g*=!uuQOJ=+wT}zoR zmNO#er)MJ2lFf*0ZLgL9`Qvo~LBzo%*J+^PzMcPS?VsaI!f|1agl@`e7!ERdYcVLL zvwi%>>(`Vi)WgJ3jN&lH!;n3W4=OTihPZU)T|UmU&3cHS4P&p?rtd|-nV7}=FS#7~ zf5Vg{nx+V=)`Sj?wAuP4^js8mRSq9jq2>U{YC!kI4-ZU;wz1V>YxY3MzqSxH)mQ?s2)j-V|76F4#FCx{nC)$1PAN!-3f~TgOf@A{byYJW)+u*@?5rXcu}*S1 zDYnAx{Dri|7m?gXjX(R9d^G2_Shm07 z`AiS7eqU9&S5De(ZSNA0#G9U-h4G@SZso&3Olopk>Hk6Yo6*` zj^X)0)G={(2N*C?6%W%8{}RbwDn|@3G1AsCzubAmbeKOfz{a3OE|9Ei5sbSP-eXpj z&(P33wI5sO4d3XAZC%92lNqDBWdAr2bC+Nx>xL`%MHydlU&~6h;tsF5xA~t=cJn9+ zLsZ6?k5RHj3T0Kirk9b;8UneP@GjI(6sE<+;#1?kLZdm6S0%|Z0|(u1TkXP+O-)TL z(9!iA7CNP76mxlPJA(I<7-%P^4=aRLIxLYAnODJcrNJO$HlaT{N8$usf60+U9{W`& zp;7ve<9U=Wj9FZo+4@m$2{30xUA)_P@ne&Jsqe=^L9xREP0!(b=UoT2>=DhcQ?U`f zw3rA1cXDTS)Zs^5d*2dMVvDC;0=tFI7h*RXNIui)nRCz?W>XF^u4s1mP=`D`0?G0P ztv!@n2~h|U1IEh22w+vv32feHk}|5egQk=|#7puSsInKe(S7#up5KGR$?2KV1P zr|=Q;aCuO>b-`g;m(OXIGGZh%&7@hSJOCwIf%gBz3~K*}=Y2YR-Y6sRG1g!VzAD50 zC#0_UCA(Am5Lg)hXVCS1wN+YIm~hC13HhU+8}9n3TZ#fVfbQ|VLVDVDijhp|nn79a%|j=%GD7S7)UQCl};l&%XktOLFx9QdgH zGOk^;{lR^nJGamn*fQ8I6GkxOjeahYz?I{XwT+1o8j}nYYz09zD-KH{h!fz&Vfv@b zyZj~Gi>zfWECnl%oE*C5Q=I27L=>XPCb1t)Jaef6A` z(Xd+K?69;R+n=MKb9E5Z&MGD3BQ$aDJAJSmlj_Df{|Lm_k}nJ>+nhLncV6zI!RcSU z{hy$_IHkb%8AFLQ95)8!b@(^XflKDq+WEYHP&dnZbm-Eg6*zWCyV?I+Zh-Vbs>?nG zs6?!h;U*JuG$zp@1HYb{xQ>vpXIBKjSVTA8tJN!8tEkxS!LrsSr1#)?ZBYJDI9tg@Eqt#IR-i}FnSYas4$0<^eiG`_swwZKOpi{FlTx=XbV(t)GD%{sHnFdW`71Dd^f zn9bK328VewRE)qL*kFw9t{c9ul^*z&Z9I5OV~Tys;7n@7XWW`!=y~}y`1TVMwyaN@hz{4hw*bMGEqq>c0uLFDLlzX|EsB;-3V)_ zf*h*qhpv}w)=bdr#D?mvHHH#L2UzgCde}XB+YfS%uk$vZV`+MgxzH_Ky=(X8VhWl* zQvm6&rrKj80Ar`HF%n>Y-m+b5-H--+REv{+t_h^MHmh>-4jB638{7giY@xyHu1UfX z863V}o@*s$;}-Nm9eYo_RZfkiiY1*YIB8N!-EjNFZAm}tv8?@lv~crb&*b`8mckCz zS0${{@ST&WEqU*mVnURu*wZuX%MrM)zsgI z#rRbSiJA~^3;Q%pB7w&_ZI#+#qLAQWeJetbuMW;QAW`G?hzLmsy6;`Pw$Mq8IwtzV z8o%-!wW=i-#|BAeZ?v0|Zam?TV209yN2S7C{SwX0Yr3a9>Ptnxqe-kesTx~{Pvy>%xWh`je@oaI)|FpYAj|Eh|@eG-E zT7O+!(G$i9o15Ck*JZc>I%}lzJ}K`jb^6Q(3t_Wxk{Pz2jEvyXM)N zeLc{F+`r!qrz2LX0zT&b`XC;H2S5%ft+A5f%2EYMW`U&T+O@*YXt|@K2$Uyo+^af9 zc`b@MB(TD%0sVNUmD`o7;<#gEjjx+f`&UC&b$nZ}=wMU^K`!y+6Gpk9_4!tHDiase z)_FkBePhq5Cnqo8k^sN3Rhz-gv4y)3={s`@kC;0|eAVZl#ll(RJhcS!JVUQg50i2Q zBX@+zwen}pe7jgE&CX?II^@@QdoC{@iCJRnY_WgnT3VlZ4blGkK5T=EzdPw32nsAWTi4IGvt8Ss!Rzz@dWLfT?!n5%^D;~uAucL==gS|^*IC%5 zOduh)mgIk}#}PT1@D#g42r_+B$mx;Vuqm>=%P%!!)H)f+{bcrC>!B`o&F{--P!HZS zji&CZRyvJdNAXC1#@|K4N7pDh>J6j(Mc2L?|Nhk{TIkuRZra{gCCidpe(c6yGVk!_ zDWI9vu#{0Lpj}PdT_`AL((3oD46%bj3|>JC^l;C8M~dd%JzX0o#soN{mM6-< z32_I@Cy<(4M+3&k_?-_3=ROFMZrJqffo^UG-v+d>oX{7IQcZGy0Qgbn4~&nRj2JpiZ4wKm>R ztQCEGnb0&lqc{|MBb;TNhs76~I&k%lvX3j66^5|)H!%h~t@ZLc#4uf|!EFJ?4SkGt z1R~;%py7Z;d;n8XuB_Y13yb8&h$LllM(RgeWk|xD)V(RV9$}iOIZ&8=3#ldb%ZGr> z@y2Pa57qHdP~wsXXbqW{<1B7>1SjtK!<#B6ud5wS8>-Yi9bbs3)H@0yF=5xr4D|OS z)!H>QaS6NHe*PGDoyc1noueqZuS7r+8Fnxmcc;7=&H1$f-}JRc$&bGU?bEYeUwhYm zf`%(dEW?hGbeicUZyQGj>NZ?W(Xe%XFV^$(dl&kt{^q!pugRG)evKR7nTr`>hm7Hz zgs)}9;}osirhEM`=dok?%QtlkIUNZ(4MPLOvGbjs?#@4fX+P}_^?wFb$(d;h0Da)c_7l=g|#5xS5Zyf2E7S}@Xt$pys;7nSxI$iatwa+*NqmOnKRJP z`t8D@7qkgItT#II^j|*;t2fyO@9T_Z%!2M9xIb&>VZX4I43an~8~*-f_dv_+xP6|1 zd&RktF&WeAI&cPmY*C)<&e95YKLF&O_ zcV1`ri3-AwaEk5Pc-9*TO7Zffid)ZKTDdU4I^>}nnUX{`VzUh zg_~T&%F3I7<#}%N`ixm(R3#vrybcR~D=T6Xkl9Lotigm^uW0R5V7Kk$=txefOnud+ zD3+I124!Xqdho-mTKrhk^w4Ddx=31rW19uk+;Kk0U10I{?4`XiMWCy>*`DSs)Z>0m zj);6C3;sd}az_-p);+tv+!m*J-6~d;wT6Gp**I@>-Ejw;Gx7P3hB z)t?>7qkEu}@(l(@JfTdGf&muEEC1YxnY5Acr!m`(MdkZ*G&eu~6={VAO2k^2%s#`Dz7ewZSJb?;Xq3Q7teO-;*wn|+^>4k()rOB5x(3i$_0C& zJCV-P4>cFeiY-SgKVbW1iJy9n@enMsBXoDjJ7=s42Z~{{a zi3B#^`7+zEWT>YYTU}5~0H$w)G+1YTeqF5k#1Ima++TVu$M@}8w*{ZW4ITt`EY7Fa zYno5*6NcnBlt034PUg6>4E~0uo?C(PE}(Ez+=U}+xCaA9qNI51GiHb*-z^w_$zZwT zrCSn^BFZ3XlKDC!-3`l{dpJfe#T`ebm+mO0(73R)gCfN!e02N#GdGdEi&`RDd+&d4r_4EG|jn~?$}&1sE7A(&(Qw@lKR@A{%lKejlx2AtP@)bKgfF(%*S zTDOwEKMT{n-EfZkGsIm@VHR>bs;xNIFz|c6%3hMXX#RAL992L-(1cgS+RbeZaOWGI z5HdOGkOs9u)s>?1D>AA8rK(I#?fHwA#qzG&?3(=sbU_cT)~2L(mYU!%A4-jYYj?V6 zVTy>`RQH~z7iIuH{FNP@+D!|q5I7G0ZDR6~FzaAer~xMC7$Lnt`0_a9b7nQnceQVJ zq;Nd_5LQ~$llxX*bxgy$4q00Qz7)904{I1Je?}qiCU7^a{@YaoVQ&;!NIKi-az!L#jc_`-fQ&x^DnJ59Wbmk<E=DYZmEFH;OwBE%(1MfDU`mPRMit_}BJx5rZ#EK?lCwhulInxc^fe=k-3 z8tu&cr$q&+Wck8>c`-1T{Z{k)w$G+vSrqx;P(@D57x5u7(=$5a2XZoj!SHBC0!4k$ z0yF(|>F}uJy)bMeY2z~f{Yr;t5ZHR0jrsvAbGd6-_`0D|2_l}I;a2lPqR3ikOU$)j z>K4LOGrL*U%Y=7g5LL%SA9it1X(?GJRxC#FFtBaHT{?ftk)4-($TY`IGcLG9&uPtV zWX?|D66k5S`g;*qj{z%FRTFo^DE`evE~_+Lt&S0)2vaw$#Lw^9Owa-JKl!QS%NyH! zBs8*$V!`O3N}Bc!$0SQqIF&*@9aa)mk)WI9F?s*&uCiB&&DRjXGL=DgEMU)(crjW`L%IoKMuAD%%9|28y-?6U>-I`SaFm<~BV zUUd*WnaVMc@`;=BT+M6kaCMZPMO3a>1ID520y+WfFI>@?gGly6l89a_96AK?;mwYG zfX$3a4@56#o;oyCV%^FHhgl2Nx+j5Txv0umsGDYBO%p>~Z@teQ58exd<=U2J69+yM z(^Y?Kvy(%$Y)sL`^jd65E{o{|>x4Ds1+9ZsH$!%0l&<1wY&+|ni>JEmM|HP+Z;HQU zO*Yhg!dmgQ>KF$R9V%sKNR6|!B}7KLrFjqHrT5ua#cUmp^XIa`5)G9{% z54wu-UEOhiZt0pbWX9u~nx+-iH910$cRipjk0Vw zYeZc}w}Yk2L~qKPglj;l^QVB_rcz+`rd<*Fg1a3Psa*M&&SJge`IT(`v7fwn18O4Y zp-J3J1It9zf~Vdjb38Vdk}85!CI^$NGQ5Nf_I9uQqqC^sBhZ1dWb&24uB5A&e;VcY zT(wi&k%v(I(o#b}|1`s|6Kb>!y@YKf>ne)NkH}>Nw(O}Au%~aef5RrfU%FwrBR=hV zxXd;d=%NK%Gwxc1m_M5@HDt!j)uDv1%OXLR4sS8Y48FSpoY2ZP3^>fUu@R9FLSeEY z5E3$Sw?I+L07Hu851LGsWA4gwjW{(wnU#sV2ZSQcQ!)F!q>x1ZeJ=B(WM9OP!A+J+ z?&QkDN~)~v)aaTu)(`VN=T3DO8d5^@=p+0L+w^JpO3q_eHRiz>GSrjpr=P>ly?a8v z)wD5<#ZZ1KDEnRToxP_R+=E1?4-1Nm=+QdN`KDGuMmLkw5)P5W5NaOw`0IFL5F(9a zYj_NLe{A9%@@52Px87%SX8(d|v&fFTA0FAIJoChCJe=ggxzqn_Jw4jM%E=LPKhtpZ z`WCd~9a}iU5RKbjsmqFAoQtMg_NA-xbyGL(duo4Kv2AoE2zq5|%Sfh1-kqh;t#!q# zqH*}InZqx#{NEc>^KeylB_|VeZ=xixMxvzL^h~>!K=7x=os3bW4+8{n zOyJ;xoXEzCJpf)!1(^HGCV}gen$loQ#iZT0cFM4tZ)hiRha*zkEIjyVe?NE`=?ygc2H=bR^rnxO0mhcu5$Y6Fw6dNV_}E^E1X&nScJY{i!ZiLb5uG z;L~&7WXxoB3h(XT?;d`9XJsBgeP=QUfgQnFa2U{Hh+9gYNxhXj^8j)NTNPz0{Sk7;`GCU zIfLwX?jkRgc7YULu>;qOMm?_gKMTV$pq{s>k!YZPCb5&I65FA>eWvOfr$UWESB{o< z<7JVdiS)p4z0R#NSsnoTYm!gy9U=|YKeRrU*gd^cLT6qwrpuwb3LrDb?m8^#O4HMV zvJnxZ$D_#qpBR!>10a>S12r|_ws{EfA`Ch^IXT1NjOX2ZVPP0}yzsm{dX?t%)} zj@e0W`17ZBDeGC%?U;ldvfOx3)T7R5IHf=HM?NlW8yJfEgidRdCNl6ZT&KY=u|5Wpvk~;1<2N+|8CXhKh7G;^4{MJaghPfhy9^j9ni=|3zIX}}NqRJq=eo7> z*njebzKh$J5&$f96wjV==4ju9ud@<9p!l@Su=LVxNx8Azj%9_T3NQFS@0FmMn+IBB zv3JLJzWP69{z z;w#ozVZq6sO-*KAext#}@hzgeU%(Qd;GR!gch5I=J?3;4NhfHNb{74=@DX$AJVO(3 z)MVz|ceE9WVgrtLxM8%M-1Wn+kUuU#t9h7MYD}EJMH2K&7eXnn(`VdX&%W66tG0*c zMv9jsZBN7GAblM`oCTzj>hG^7hdQqtR=vUj<;=r*vah$l#Iuvc3M}`0Nwe&H4<$D< zcguDPgvduPCS5nGr~QDJR`cG*QDgv>cu%u+#^2t0(TDsV-&^A8h*W=yYr#~Wv^XVxA`2H$4`Z9cuZrJ zg_Vpcm8Yg{Lv4$E10UX2FM}AxXDGg)*ZrhSh|I4~ci~ePa2F(98p@`Q;%JEOV|^uO%WE+n0+>bdpu)Gydk_ zTOUURVh2tYO;hFRI+8dzz^H~hS0#c^?2VtT>jrClAC}wR-kwuL3`7e=J_YPHX{Ksg z0Puasp9Knw?w_tAFSd}kLgs0Zq~)9kOXE!g-&p*_c0@D{lS&Ao_v-fA@CBQ%JXNYx;L)B*NFkyQ2_cK zDGIqf58NAjM04XcVOd#O=j%pK@8Wp+QK|FemF4Ema*;vTxoO;#7Si_1Ny=^!oMYD= zr)G*`U_N_AkKEP2b=ZdcFQ3>W!`rdgb3CQ zrXg~2poV9a+k9Vg{2OPie!~aXgtl1;)G{=xV66&j zY|)24bWQ@)<*hAQYQlKYJ6h4};rHmK%SdYF&fyUCQEFSWag7-Dz;)kgG~*l8?^_VV zD@rXv0TZ-ZT(fJRwz*GmPet`HV~DJ2m~#5G3#WH-Sn5LEdaNVYn!?K?)IaH6wW^@e zRM=F=jB+sV*4`yrP%)Nd)H3bNU&^SMyncKuH=iP|nag-S&hf4hgY07vM|^+G zmdmDzcV_^n&~$6kkhmcMqX)ZACcB~MI}bNGYhHIsAz!jNgKA=VJbAtGdxYA!do4U+$FL=&-1|EL#`sY_=s#!Q|)kG z!UNjH%vHgYcZ3^>0Tn~^9;dYu)v_ad+Z_GBxf?S!JVz@abowv%h)!s{6TzxFUssG; z2^Q=S>?OFvcILd8F;)JEvB{Ze=a)4XXh~O=&BQ(rfA=jvSYQ-V%Hm0~-+kq9WFQdR=;(tC+R&T6 z2nGa%@``;6_|)nX2$XBk;5@Pnbo9mjt{GKM@Un6h!M-`iBu}LBNClWtMWFV#9UTNY z(MrHl#4FMnaH{Dy_f&#XwCt;I>G_6Jc43G?U&1$1w7fF4GozdpqA>yW9d(1skM#O8!mZ>i_E~Ktf5J3s2g;w4JU397)x|^ z!1LXCqRvP8I(j4Vs|-*X{M@yp=X5kO^jcyIE2)}-i!SCJ3iZF7y2JBBM7-hptc@T+ zH%cF!lw0$ueS?+H>AZ04Bjv?4!|y9e0(Ta zlq}++)t%cB(~wN0juy0L0k;d9A)^k@muDbAeTv0`rJ`7yk@Eu(B*tO(cKk?;Ga_%P zciX}yxiQzRgM4zt#^5A~4z_6x9Tqo|!Y77{2@li#(DU6pjKpsL#@yy)iiFV2)FvgwlDG z$u|N2*)sYbFEV2UFi@CvGvte>c135_N}A9NUX{ZTxczaO9ETRrUJpJwkbW^dd$ZGL z#jpeSog3lfkT`Dg{+rwAj1%t!x-iMjX5e4uxI^fa)tA6v=;gbxT8G7L2`ppKIKudjwl)QlXk zVZ2jMbBnoPH7fR1_4V!@vXZYk@D3uY?=9OQZG{0)YYvogkrXK(IWlE;hkFQhBJ%;4 z%r4JW1NF4_!ctiQn0)3OJwcLFz{3)zqRZ&B$GK-a6s&095Vg%pI%I+-HX>yz>@g~9 zj_kSP+v9s*s__PDo?MmxK`w}9+gtyKGGvY}G)X;_1X&jQbBxTL^@7m!Rl5HLBTb6V z;Qt{&WT(-QLzTvvRuMiRH$mGm zpj0F*K1@MPb`MZ+7e*xEcj<9r@8x)KKX0U9N(z(Bg7J?CM!G??4IDU$7+uWyCfJ&W z_zQHH>G_V1Us33Cq0ay0y@e@`=zJzR+*rX##P|2|Q;*yIo*?$aEiK7%DaMI7>3Krqjb6#>gkI$gT)hU)#%|6;16XoK*-*Z;Vl=zTNF zFbw2=l9^uV}@^gP=1>B*G3@-M|*qbxs#%lBi&o+srxMXu?0Uuf; zd?xsb+ZuQxuIxel)mw|KDhxLMX&2iv3ZwqrCJqaSOQ#~y4QAby{30T^$T7^5a!CWt z?~DTZHO%^W|9a5x?vLqs_>2Sd9O-s1E;1JF2Aya4fHQJSr)TqEzxL;b2&G}Hj-N|< zp>}9qts?PbAurH9Bd-u?K%9i+4q0Q>Y)h|n#vIIPamA&nNRndf;StF~Hqd!z5gr)X zyK1fs|H_3=9i_OO5%F*JyzNI_>c=N!M4eqC5N05)9qzJ@J^}?*vXq$7o8Di6ALPU} zmv|o&odsH7A?$bf9aseHM*0`lM(2LNh2(v1e0yYG1=|wrDT4}~C&zx3dOGmsyzD}_ z3KM_b6ou(INL2pL{YXM^&CI*Ask(y|n7UCO(`D7K*GEiMF{9IcnprVELFKc&I2_=R>q<%xe<9eRb@ppzeZZ0dnO1*}CbBV#YLnvAkpr zqk+sk&1SJvZsb>mhf{+NtaRsC1qPf+>Mu!BZ+NXARNPKGisO8ke|F{AiX9LA;^?Gw zvE=Gh09`FctCStCu`Fqh-n_&#jv{Xa=D(SYxN=xG>CGLxL;2}NS9wiMn;IRK16noB zMQVA;cE`JuS#MGXn(;wcN-3(a5v>0&A)TQ_OJ4#-0M-BGEQX(Ag|pN;uvpl~?J4aF zLn0;ZRuV{u5uX88sJ)&*Agol3xCV1T^Wi4S6=?YE;ZIvHI6KtT$_^LpX6H2+_iC>K z4uD6&1Nv*OhxIMj!?00@S!Y5?zISvlXP=X9oU<51!$Uc%G{tiC2V2)z-=%J7Vj8C@ zZ?3DTd~3in-u+gqm7jt>-Kox8?DMA870f+zA%|zv2wEh4O~qLBczUxgajZ@AJJl2O zaJ%e;C#p?-(jJmdn6<@oMpcFn=q?Pe?sH3A&l*i2>r#v0Vu*R7NChEBN?e~Og2tJ3 zx5}#Wq7Dxx$LyszqV>NF7pJ=fz6sln@_EmI64D=j^$yvIL zHoeS8>%+qCUeRu&$>!*P5!q3Z&fh*IccY9(Q;Mg6*FJns`!^spvI`PTKX&XE)Cj5GAjcnjDg;Fa0)Fiyw0x(Z&XTD^*oR z?>JA``wlsGh68-NM8^kns^=~F8!TZTqbnJY-P?z_S&e7U(V>^KiPFQA$CO1^i8PN9 zLDDP#?Y>_iw3k02zU}n)Zy^e zAtX!W2M$};I%uTC1B0cOv48#<0!KU0#qeVbas+aPGKI7-Fzq~f+Gn4JTY_C9e9S@x ztPx~CNLmyv@ofJrJ=2rx>w9Buane4qcc3WQJ7n83Ya1g(e|8rl%qBK(&yA}zu|Ztu4s)F%-pTr`S_rd%ve-oiieUgefe=xB1-gaT}`1)E|_$93fI7WS}x73B8g ztcZcT&L=tVCvtXV_eODts)kh*9iCeip?^PT1jEl%vAu{)v|M;;pKY&R(8LMcjKv@! z$#S}4*1(r=>!vkyb&YOr{`BDIo90ngXEom3Il9QuRC{PQj$A}>ltd)-u&A z2d1@}#G0AY0GBO_-TlK%-Ew_&OyiQ(r64$=7+QfL0Q`ab9TVL)W@ zlebqlrYYLM^y(>jt|Qn#A4qMhpqced7z<{I&e=DU$+En8hMS`@`wtt^(n!DZj*Hq+Mv}W-{8qQFFQb<*lZ|bOi3wF-Z%};) zE{v&(OZYTD^TV(C&Bl%5_wDN%1McU7act2duUAsEoi=vbD(wt0U`KqgY;vqlIs0)W!wn!|#lgH5(RFZ;-X=F*vk7A~2tq*ae`*zR0 zLyYP`=)F6?9Z~>yeu;SE#ATN9*FvP@N1M9_@lE~U2~dqlkhFr-z+C$k9F}k>^M>0{ zv$1OdxWVod{(HtLSR!r9WE!-;zvOuKNHzha&`5EwcVko$=JyF;{??M2Be#0K6qKzE zOUluFriUutXop&}tYd6mud^yZjX}Wo9vjOOT}aVl?`TKUZ}jE_nc9GF_X|$=09q*7 z?L=}9o%C@1E93K}2rd*}Q&bI3PXT?RbHczjiJIDto5(g5pmG=2gTU2NXRxyK@PNa9 zt^YCETOm0mux@x|Wr8?uP@acQ`TVvWsi4x1%i145s9a`Hgcx(q8?eD`4sr|qQ-qDh zK#2APrAweuG&jmQR76Qk48qF+{Z12pI{Gtlh+@?!V5z2;kBmv<|Di&?oc@!1e-l%> zfS`amuW^GY*=7k9lKD}_HpRQ=?PdQ4ezQyu7PM$_O}}Iq^~7T&)VU^6OW6Lo@)9H! z%tf=FCkzdYpPyGx8>i85Et?dHUTbka->QpM^*-B+h|Q9b`f-F^A(lBG75tJUCUILr zkzOdoOFJx!5QZLpg8(;0NB8zz>Dq7C2JKb+<6Wu~ozQ ze=8fAq2#`zIs?WW`AvyXg8uJ=ppQBN#f8niH0)=Sf>x|S3fIZyyaJ^wgh+&uzZTElNOlFtVn-TKe_MgfbNB5QZ4`@n zsDVkA43hn3_1lXpBp=-8!p>~O7tag-WmRgmE?L)>=qJfFF#jNU0d$j+UGhviesK8P zOJI??H_U15;u$!lPv-YI-LqLF*->_XgUNAJo4%lGNlPO@uv?C!tHEkqNo1z1_}?Y?ZIc|q^W>DA$ejIykDBxIRJSs#%~hv~Fq!M_6RzXdN?CQ~cEt8! zkh<0bmNUYuD7u()=waTs#C^sxFyslM?HJM;FgGQ8?=QUOxF|fPx|L!%=wDwU z9XRNREK+(xGYLdPN1stp!-2Qd{eDPZp}&4xCa+M&MJ12*P0U3g+;pmjS%eYU6|+U& z{kpe)zZAXw&QIGwvY5^OEEY)R=g_3DpH>#{#xBZG%yYfcwjqRt#c+K0gtRu+xCUuV zwPeP3vzm9CtN!whof_hvIb909kd}eV7!@lki@{uuXL?Zf_SbVFwJ~cs0-WxikKS+A zGbr^o1d;l`go_~V4m52V`t-;qL0et@m|iE;x$I{UAqHa7zVYZq<6eH3POUrOju)w{ z0C1Y6p;6(jHH4#)a8Jc!&Jz*4Fx1$;yMc`uJDCU!zSG(pO(`ZgpwzHrTZ@|ef#!pH zq!9RgOvP(3`Wr(SlRo+d)ik*@d+}t*|J`4RQi5e~Vm;;X1BEMj^P24@ep}@Y@d#D6wH*uH@ zssr?E3U|AU*cJ#1&~hXb0N=0i8JAQtk+q*oG%)X8n8fcEeU{>u{giEc(59Ht+N26@ z`l`2a-y3@K^ks^+jD+k&_p$S8dd49BhQd*ptihm~i1k?yv;-bz)@D-3zWD_|_S0w+ zPGH3(g47MvYg{hSO+Oz$E|DWiy}-u@3R0H*^1xH>&i>*`b29aNrXGwClWCFXes-Mr z+fSGXitV<#9a1Q;uG}k*Ixkyy>*)RINKn20_tCG%qlO?hqS$t5^fKx;jUAk6$v~V< zY@vH_U(v3mL|e93wXQhJX51!~l;NpQ2Tf!GH+~{AyBvC;E8#MFg{d;P(&?T7yUgcF zYF>YJ1rDN5NA6095!~|p0wU&qZn;(3to0q=#M4TwUVr?Ge{_X8l-O=z=DH746kR<( zy7#kpa8ymPEZXZgNa7yt+y!2OE3#^h5@A6e2L4)p*C@ z+#fw&_=&dJlQpq4vj@5xmmg}gR&toXn@Jv!-#CwL{BIje8p>qEzYaMyHrL~JUwHg0 zHD=Q=ye5B}6gx~!H{Oel@5*fHc@8+)42+$AeHJ@-IGO?Y)_lI0w-4C=cMQ_JUTWz| z-g-IRl2sTz6nl1BS?f9lK?0a+ZE7uT70Qxbe0`TpHidFyjOxbE&ide$*(F5&7GJ$3 zcKBFqCQu_|fzOySuG@IF&;B&-qdodrD}-jQ8H|dw%qLzYwzuaQo5o)SrJ1Hh%l4 zY3Q~U0Dc^B3W(+ty|bFD-lYqgiw^A)@;_$l8JYhoGFhT1^iuS``)%}T2v33G?WHk) zrwaOqxkl+*?;YRLTe?pT0i6%m`B&3#!{7Q{+c;IWJ`}9TSs?e_Eg^In#SglUnsx83 zE{-crP5Bfs3kc)P7qL-f|Cdo73q5i}II`nItMzFLHoovW(Y}&$^ai!T#@lgT1RD<} z&{ax4dYPQMI5i7p)vGrl={A-H%Bapaa)n{IcaZ)L_qQFB`!@msnD~lHfCim^ho>a@ zHx)CYBvI2Cvs9#-@e?(6*Gp%Wj!>Jr`YIV}yQUsC*c0CTr#$s2gg^Q((~F?g;3`yT zfO3(nHKh2Z25C)Q3{9Npc$u?Yn?}1eQ!XOboeAbQ`!+~bzgx0|W{F6is=%L9S9gn& zax)U-AH=47ow z;%z1#X0*Pevv7r$^+|5p%yzoeIDuu2Ba01B$=Yr6Esd|ft=_TZ8ErKJl8SeE95*z=NSs>?+$^yMCc6BNrm*p*U*b~Lk3%oy*~D` zguf*7LcUM}0TxnrHUt$xB!@%WP!rk_rj6s)lkj;?d)`jQHsNl#!4*i`SNf$nk_n#o zsG4Cc0@uLyP7dt(Y`V;8-R=|!VMVh+i;VZR{{mtES-C1A_37t(BSP~49zgUa(fB}U z>x~y0=4WCL@!sQWo3HJDt3wB9+O>vIS<%InB3r#4tIzgN2f*el%K72iSJBaf1KRkW z+tX^NGk~+JzugPvU*2Fw*Rl8oVcFp_gAU)!jg2qS4Hkm>zZx6+Y#soXn%6hz`IgWI z|He;(&;)T2(s8n4p?O%qA*a2#7qf&1 zJ~h#Uw5>E%F`tVon3N0LJ+aU|N<)dd?a8U-@QlodO|sL)8@z4#@PK*GT)Ko%EVM#D z2A)XQ9K5^?18K9mY{h~k1Qn8NID-`Qe$}41@$#%t(bxFABL*hMzfYadLhiiJGRd!U zodQDjTa3)x3=00WQ)Z^lF1Lz#2{QCNDE9OtioGxaUiOB!4kNw>q;IV8js74BHVqcq zAiEd4z&Q6kNA$i(lzp81`YPJh^Y6Oo{2P8mEZ#W0@#`FZO|h|oNk?d?-wDb2>d7Ea zEmU6cvUn&q?)3g9wmmzXZz7s~wa@k@P__8aQPqUJ8W;@%J6=HYU${ZU+5YEF-F?Z% z@1QLrW(p^Lik;H@AfuK)6`I_wpajmJ;8Ry;?=VE>F>0%vEEs!9IYeWaU>Ip)h`H|u zYljzFc`B8%`coI{pPiuFTMlV8&fH08q!S#h)4F$R@Yk9!E_y@J-S)?D&pOUUd3itCu>HuvH+o>O z)b#NPf|~~_2-?c%Y6WiIwi`mV=BYJm)7K$uE%z(yI=fMPJ&6s>kF#I%=oHo2dc5pn z_~j$`s!*8&=&g~hqNrA_I|&$8%l>fvxL>duM$~Tq+dY0F-#1Mac=pK&5%X@PG2V5ICFd1 zec$<3@E^4DIqv^{2==iK+H#p62!ESb=aLXP{oR9%d{(FHZ8`WTqj_nHJ+E%KaHn5m z@#cYM{)vJ@caByK?!x|IFla$(1StuT?gl|61q7wLMN&GJMi42byF*&KTj@qv zdO^Blfn|x^_jo_g^UnPKU}hNx_|EP*=en*>o!&T^Lwbs#)VhP;T=y#cT}|TboIB}` zxp@9WBg5xh%AdYH6_fn7B(q?YU%uQo?IuqCEO8@(azGx<2mMsFl=MW=`Y&@jZyXaX zb&|zjP;qL)@n*BHwrf`Y-p%gz>G&)Q;#F`b@Xy-t#Dh>by~HU ztUA+I8d&Y3HAeo;I??YyAUv;IU}JL@-C&u2{gfD;?1^0>B;0U$uI85t$_xBoCDHCU zd%br-bC;Qn`NNx_f~lR{I;*-tYQbONysqY88*1hyq7lJ;JCEtRGetmr*8y=s$X1HS z5D9lxCk3s=1Dzv;4t31ztd6;qzLQjj`p)A9=Qh3HBMjGdQJK^3qa}K;AJP!b$oN=$ zWXV-eUPMLlwp`1rq*N`j$4^Ge-;LMsGq~aVazVkb#o~3+bL3BVNjJN=`1e{(`nPkH znXhl0z`<;j_URfOBxwgJDvPsx^Gkeoxe2dxV@SJSjA~2*PSA02f}3}Om3JcM=)Wc2 z`F|Msvw|Nbe9CX8T=0jV*p}z^wAeg(?fMPA zuQ2>|HaPnWp=m|iR<}oWymqmvu?nh6?DoS+qtD zCbfU?As@2JWyDIHS3njd)Ghm?Zz0=Beq@@^|4wp5)>U*CJ|VprTg7)3{KTRAu*+Rz zhI^3XypBP6sf#_D{R3wq(Q{n#yZdW@!hI{|AAf6V-%>aGWoZ5k`mOb5att|W42gza z9>BKl(xE7=<8Y->tM4+yJ?O1O9>Yt)!w^ZGKC5iMaY6lcK?lyc&fg64h~{SXn2cLD z5y)AF3+nBkd#7h)tPwwm<`sZiKUm0Zwv5up9;`Q=0-fzCqaz1Rxk~ri4Wt+8Dp$E+ z>1z)-MMHpA?;-5Ze+QD%V7~Eh8S(zLKAS}ODX{&nB zs*)5jo31e(e@goGZFc?Gu#f7i8mULI5@X0s;r2sI++Gph)1+*JW>kA27MTc7GoI^NHlS9eq-Hw_7|Uq?uoqfryB0)zL%%1E1Tt# z6-INbgB$ijLNhuXT17+ZI$Y(pNaJ%Zqoz6v|k)e&1qR+_LwLa^84F zEO4hOC2cORNf73{EqN@Fn{@;x&qcrN{k*;s*!ZP>q;aux-*M#LD~u7@9<Js2eN6 zt($ay>ZKCinScIqQZ;P)W1wDg)v(J{xVf)+gayC3x4Tlqg0<}yv8FB`B_T;?edvEm zF&qYTlK-oJjZ*KPeCAe}mRD{9@h4@DKB?x1TAK%!aauuC7QYXR)K%>7p=iKu)AAFn z*QrWHoQUCCbCRc>%C0zWrZfA@@U`P?*xy$$+0Wtx6P_`13o0$0M(ZKphCWjXxJ zBWoR7&3~*vRI@R3kgq0M-G#oMLm9Q1X1tL=k+rpZe(eRc0Irm&I`}_Q&gr!eZ2@xKkLZHN> ziHJ_D44?l@tjI{CCShZ4GfMjHY|}f9YK^1XI?`O{p)C*EZfY^w9$A+y7r+iA?2g(?np-r04?LdocuYjoxE?R#?`>(COIhwaj}A>=mEQJ^`u4cVco{mMB}ppN&+l{7Wb%9Xhl_9+lD{wOvb0? z%JQ`K=oB3vW1wxY&O(0oA4{+$`q|_*2hlP-S*#gLCJ&H8uFn^zh*`7Uw@LlSf7uEj zIXR21?oKO%(c^O7N7zBT(f|xvv|g8fw5>;2HJ@E}iS~pp{x}Wh9TWU@qh{t=3n{8E zNs!Ckb?ZLpcs|dtA0q*>w@&n7AUbSO#r@eVi6>yg9_2kJ#tGxq*ePxtY^L_o~25TeM)#LsQjM*JC0g zhojg4&4bdtB^3ow9>)k}rDLpBis|ru3mcZ6^#57T6MX+O>_#N)Y;cyAoU)F{NxR7F z2ohT64jj+*7`?3DK5_ju7$9sH5ubA5ayM_=Xz!zrp@`P#6N8aHp^hnBh z*O`#thxMT}v{^hfgkC*8M5*4s5-BkcyBN7>pK_W_@oa3Y*yg!qdiJ#dp3KqjVCYTJ zmW3`W&59c(zsrLv0T>39UAyumR37$gZUj3?z7-OqKP~Dg0CBSm(q>Nf0S#9w)kL!b>aj-^5|$aT`q0EOfOciYlH;1 zh=>RfQUP1>=G8g-8g8?v{fsvp8kHZ)k;n4VgWTx(z6m`S*Tyk_1nj2cG5s=g{hM65@+o1} zsnf!_*R>f#AmaB|W%0B{kG1Dv@~oin&dkWUicwu-%fHtgnI2jI-I-{b>fF3e&9#Qb zoe#Gp7PT-u+iI$`skv$LfjRS!lKFhT*VRAUE+uD~l!p17CeKB3=A1$hc*TYLOTMNC zeC8;Qx7|o)1;>xG0%`c@C*u?89vv>_cMBf=;bNG3ID~VgU)A0;VkRXRd;UA!$g$Hz zAa`MpKP?jsxVN+%Ap+%7)sYg$4EgyS0O&F0q11qq*~Ds)iYlhYx`|oX^g@ILndOo^ zGJS ze0?wZ$?JKZr>C2*E?*W|Z{RBVASfOg%J)RkzI%6sc7UxB^)tqHUteoKq|468US_5- zaQtLLn6j+9%(u4bV$lfw5!f>DWc%3bd-_x$yyfHX5ngfzQ)eN0_TOuckYv9~is^wc zgP@;xpYT@|%Ga20jd(!oFrnI&hW|A3r}L$i-{gpYO0rLRv7L=J>8s{Ikf<4lRZuFJULX+Dpl zFL3W4Ke-*3_l=QetybjtW4NajF9@>=22>8xohnoKDk)=_j4DErA8X`@#$OY<& zpIySP@%=QI?&eET)|Fqr6K|#HENrU|YV^0<(MN6Vmb>HfPFR>cZFcYJeo0A_%T|CY z>&E=FG7U|7vRg&YGi8S(+Mn%0e|Hm<-xTp*-AVy?2fPp{%vcOY7;nvGwe{PzTL|ng zY*Et+&yX-$MP)=Tr4^bMRVbT?ZD4I$?*`#@*SWX+@ctAoUht7<-ws!UibYeP^;R#j;?0V+ zq5@XK-;lwb0fr1!ihHEUua>ERubln}kp27jG8|$y%v3cs&#;~jGB%uV;VPykGZ|^d zD$HT(=oLf$A3TSNJmP-V zy{B#d)h!p%%fn}-6?LY2sb^wJb(1_@@dR!`G)-v0UQk@t;?AnFgShIQjqL3Iyyxow zW46sVPPlEuzO3BdX={d4s6psEAA@3k zl8Sie{zsVar&srK>okTp`FBhBOn7$(2!iJ9dX4=K)u^IoJpYx4Dq}R0@#WOmaUHks zca%wIjQ?@%eYU_8!t#lbj!>S|@dGzeQBi#JB8H)1xK6qA-ZQTI)!LwUck`+FZO@W1^zGW$x+y zO+$+M)Ne;VH?`C?sTxAlGgKt+MBZoRVyFex;L>99O{}Mh2cp@@_AuANkfrNjp-g=s z>Y6UQEdGGEA~`dws>9<$3tRHoAUr5b>YBjOccJB0VnXjE&N`D}%*8g~N16*ZKU6*s zb807D(`Y5IHlwj9&V?L*3f~u8wRAmdgi)Zx|CqpY8?{H1l|H$54oJe)>@nwr>!zta zH_5w|AAciVHxUDMb&vij=E@+rin^MBMK5Fi!r>aW|wIyC{?wcl2i{N{C;w zfD|D2B_#q&OvLzwob1a7=enE}^#lbM844ls7P@_|8{anFB7PGHl$BTVXQ}FPSd}HR z?+yp}fy-VJ-7u}-qW>{ipZ+&9f>m9U%=mU!du|SSdr(rAFD!AFNP-%Dv2PAPrlqSe zylt4)5N6u%R?;88Ek6yxwngs5O3+`@>CxsU=2V7wJ=r8=-T!b2Ko6)rVm)+adfh zag0OQx%+ zA}5V+ngm1npp?*}zA;R34}6c6>SY~;=9)iH~B5KI@S%|8bpT* zG3hYMI~qa>uIY>vIRa{ks}x{{cwr*Iy6VwSNhjOw>&9U@fEh(9yDyg!Cn& zaxc(LlD@n~D>llJZdsGGUu|^!twjCh2D?r}Umi8JmAMAoTXk;lhWvy?S3hrM5xH!3 zOE$myJ3s#=ZmlLXw{NM4^xJ|F!qSa)#+He{!`UV+qg>@456uHl&}BO9UC_$Q7uh*F zjvrXj&}1IZG)R1nj}`YIlrVuU>VO68ur$905nH>e8{$Y}pPA`RR~;3Vl!WgQ2vG0Y zg0ZBy zkWH1p1Uzaxh)@D~Tc+^2p`tC4!Ca;hzR(`tx)NQ^EgXhzA}m*s8q;|OQTlh<%hCKV zJfqk+!>d$0tW5Lzo2r(Zo5w9*;ctz&`$P7SV-me0RBPj5 zgW;(;IaEfUzWm8kwm1H6?}E#3vg#fJ9~xEkT%1Jz;?l5ell{@j4^H~ zioNOAY}5C6b-F$A@q=5xm>pNE%>Zia$e+K8iDZ4-2&E(1*@quQb_5VwlCu_BgU{LB zU1;aLIX(T&o6}#amd1LknUx{A&*qjSO@QJsfjvn?G=oPni^O7DD}lcIi+B=3Kn0Aa z>)W1YKHXvKi9Yt_q+p~y@$5f5G~L#XiPMdcoBR4O6tf<9Q@ZfiR-&lfJcV>;;@gay zC03?7(1?_=t()_tjyJKCNtZyP1qKVEaqB65mN-R{$X(BJDyK{qwlw`cjP%S5VI_*% zP;fFADC={OvpX1cbR%7RPfqeryyO(=o7^{u!E^!WGFrb&sopgP?hZ(Vvbg^K5glNj zdp#x0Bxw1vxKmWE7yV&^0F*H`H;)3yC;${6%s)utFt*RJ6&PADtgU4pP5lcj!~EYR zuKuT8CFYG;{UBXxyyTxi%;abK(z{HDhbCknN6Z^O-F?AGZfHZq75qx@3i2dbheP== zGSuSU@$jDD))bXIYte`DChr|$u%8dL>oK)k3^+9*Uu!Wa z`tnE&=1(|RZgNB(`^0e9vR4u!K34SA+rCU$4~TQVPF)$#RaCOko&BQk4n262*UDVe(q)(o_mwiM|g*UNk6_ z+reUT{85`uwDa~&&KQAji2crm{Ud}WuB=cabf}ot%kHtuIO(e*oFP>#E>VJtyJHn^ zI%|HrjUbyu4YcdNeq2egc9dTe^jnL|+B~hJZoRy5foxQ^cb-!t;@req&${95T;hjx zM+GZ~y87=rR9WF~MBRr~^f_#H+nz2t>2QZOxkYBjNl|myMK%Zo8WP!Lzum*H;P(I<7k)7lnh>^SLMHHGWBQqH;^dw?*l1_oPpUbds=Q-~ zs4x}z+pKqP{Z~9p!A0`*_opFDitn^a3+9ANz5*vj<`!EgMCw25>i^GEF@5b$7PHh% z#KgLMbiO-{_vn1^qQnhC0Q!g5&nq+VcAJ^|NHd|7I_ zU)s8IxgOuFW#`}kY|_j``4XMbk+r-dOinJ^-a2WV<}oLR0s*%SMcGsqS1~!UET-^J ztVFE3J>&~7Ej2ZtS7nsSZn`|uvN#C*-oXN(0rS)zg-*1^X135vD%evUolc6 z)~Fx^$(5XGN3l-`e~5DStaeGc83NgXFG#;QUE~?8AYC#}QgM1;aX-znz}AFMRE7mt z_|X5`dJC+6Y(`Nt_|;s}J&}urL7`ne0Csgv+X_D$3aS|h`6t~XflF`<(UOwM+<*Ay zY7w4z;gzOkpvRuZgg21l&@j{o1PZM?oQ~#*3l%WLX34PscDy}=pPKHgD&t3Y$)G*?!orZVb_m%SXDb zAr~eCgM-Zh81hdAur`G|wIdNg*U#vx1+%5@)vv;t!n$RX zaUhK|@;w)_)D?{9_uHR{YP-WKjo1wA`Y~lsp9XNMQLDlWiDo0qK+i-ggZA2yWt2LP z(fcU*zgaD5W3P3qe6CsAI84obGxFlzf&P1KHQ-g~x=k6uSCahMN&51#Vyksdka%It znKCx|oiAr%>VUFSpQc~*1ZS=9x~z+HnVhNE~~dfwx2P2wf~KZksQ71#fqCE z;a>H4VT{Kb<9NCo;Z@Gk<(yhvYN)ExYA>C?@gcm8H=BQ=2lj)mTqK9&`hkc?=+uCy zm&5FtU**umNpbPZzUoDzcGIj3;K~{~L_HE;pl;`qRC$LLOuMAo7yn*CrYP=Yx3nQ@ zuSH*kV)wVt5|=iY@m~N{0tX3zE}NI4)eUEDN8v&6oyh6u)^&qyr$N;vkH@YZ!hKA_ zMrNUqYsdD1DVWb=w)^5q?h-H5^3Rx`+oYZr3U{1WEbWx5wPti&c2gveP>6hgAyEX+ zT>;+2dLgL2ehaS0Am_q~L`HCu3y7vG#X8y~ng%;2dbB)JGbf2s7?McNx4Me=43~tm@ zkJpSpBh5KTS!=B;gdW5e7AG{ww|M+$Tshsa--O??km)m~9Nr6mhznHJ449etec)#$zL~FuTZX1{(ppKFdp{QusxwsP0Tv zG&%^Q%g64D8wJ!|i*BAAovh09Y}n8)xPjt<{}V@RB# zx-_Z3IuevP5S`OB+~nnwq{l|aWBURmg%kXMDCF zrSoaUNU!w-4l5e)*8uKNqPI#B&yGKt8g?YVZvK6rp+)h(lW{dlrc z32U(YA3tbqr{w{ikf>MzJa2>x_KbES#uu<$gYoC2BWC8 zsbWHB`Exvkv}rr)Ha@hf0l}U(>A@Q26z_NF%E((FAY#$2u;YFFYY#KW*wt+L#Q!j?0eSwbHjbPGnu~ zs=V2B%n9U1|K7SBi1FXvGZkdfJ!u;A3l(oL+Bj)w&oD;+a-2Fim#yw%$<0r&hSsyT zXo)%h5Vn1#q^O=KlkgY)#L!=2tnTX}`=6cX_}Tf&0c@7~Pj*|b!ds-FZX+nvBhc;G zLba)rz%EX=R&}U^G5YSC$zmK;0!m+bE$cYto-LO0XK$B`AFN0rtj*; zCY;uHpLfRYwu#M+r;?hWuXQ7wwe{EhfjJjuoF$ch+8%Iakw-8$I2`fTM4pbMwUEBv zsI04p^V6c46dNHn)CFYFiWI)|YM$H8(q=0meP?S#Ky^tY#49cLSwH*^+db{d{kMr& z>Ffn>KS&Fk6~tYmm~e+(bv0Gg@DbAZqn3<2h?YXh%)2-0leKXLVBcH#qi5suoe+?y zj)e^lZV7UXnckP6T*)eEdD$rWa_t*CjM>#9;Xd{?=f=9^&&ol?|ISy;v+?S+s-Y(M z%xebNSmm$l@9QhU_zt?Il1}Eu0Aq1-g{2s)V1O0nqh!i4S{PlXsiK}3aQsFK=O9qdz&2WPmL*)^;75h=>SO_@W2Y;8lj|CM9;2f` z>{?v{5=|C>*X;#PHOD!zFTyM61-!Ax9Ai>|D7&8U@tZb*dcvlD5Wi%-*jhI;ygO>w*z>%7`pjTWzG>W$!=j-#*Pi?iOQRK46`~1?Ij_pXd&^+EORB*?bIPBIaR-le= z;TuF2>r?HS+IlXuo1^zg`#qVK#1}{Nw`Rj$E{s?pZ%eMzkIULoV|=g5q)S z3^5vEd<~CpPpSp^#rz;_rW(Q63Jt7Ryf2J8q+M)2#h68{nT<46`w@*MkB^j_#F82L zJA3yoFEiNM_Es6r8_hXHrOqF+L`Y|hdLC>(sc#UTom=L69w!4Uvo0-Z{J_=JE>#HI zb9QpFO9oC^aEQg{BpR$;8Obl-d;S<-SWO`3;HeDmTKf9Z7$DZ#jKcgXp(c@rxC)FU z%OI;~nbhuRRK>{qL=@fJAaUXz+Vh=_TY(7(1G}De8@-QEjn z|G?C<*c_v510JQnI==eZ#N&UAH8yRdoH{AM^8lszR;i|~PNpHQs>QnV^5TL;&-UWt zr8J^3J>Wyk8GNihZtBBnE{`Hn`dt2nom)BStx-}lAG2^(OlV8YP*MYsRdJ9H^(K1< zH*8zWRMQ$wHFB}FJyyh*u~g>#LY#Wp5%KNW7nJy#EZgsoyw*~ZAn2NxG8#C~0lEdo zle{{&tKb}!$<(&j(}Ex%v}l1}a3AcMDH3uxm7e(?lmtYs8{sO(g8bqz`LG3l_CPV#~RE$`+gK5cbVpQNQEgx|MHB~Hw z-wa?PTRl6A^y}!GpHHS1uBg_l5Rnuw>W_L_Tm7aSS#!bSpn7FXFmX(fT}(yB6wZG# z^#??fK=H?*KOdi8d!RQJ<-kU`{Bv{~u69f7=y|3B+1oSTnASEjlS-q~brv98-e|3O zpuouvBxwGs{yZxb%V-(Y3f&EB>xoJX&@6R~pbmkJ|2|HvfT?}!C^hU%I9ymz*kW;{m>Ef)Lc`e$A`|GG8ClPP$97vm}UTpN0~ZV&Po?6{HgCz)3l z4VSw~=-Ae0io`ov`UXc=@Gbvd3e*|wWTyj8gzT@p!P?rgh8!)xoM|l|ysT6@I zhv%2rrp?9{CKwCcHT$+#aN3=+yd%fhk6!Q#+mk+A->fKvikmMSeUtrZP|@h-laz6w z0-)RBt}fmo%|mDtocqhpWDT5csfSB96<|+FiI!zrubGqy9pC`49*GjXxF7^f14NUD zmWmF$fXvOl<7G%J?pQZon#nN<-_NU0I1E3^cFcl`^Pajiv&I=|`ekqy@pdEApN35nU@8dMosj%b0 zqe6`upAanyN;`U$V5%bi!n2Bd7gVDA;xrecS)&q{F%Lv%X5>K%BLE59lhag!mXhd^ z8o4@ca4~^qxc@QMXTPBs6!l8`%g~TzfL65Is zI&7tck|7CvD--7qY8Ks2BKZqDZxcUXzrf#)x;g2g^Wuh9z_O(&zZHaPat=-+jvv@P zh&mb*qtev;Zdq)7968M2NTB^21Ua;IFCSJMu^&oJ@#t=%G|QdJzX3}&h$N$Gy}$Wd z_vsV-ui$P1T@EeR7AjzUS!{IwJpFv@(n8jVlosOC)O1(r!<#97+*lL7P3BdsSw-^# zJDS$l+YyJoEoDmWH^8N4=RD|$nmIb&Y>?jMpmYT30v2CIgWA5b)(j5tE3 zp?zEwE?{Bb@><8e`_Bt=OLz6`$P?-Vgc6qSe$g7eqF%Pw#MJr=7_B#d@qsQD9iL)6<6MMgD!OP&H-e7*uJyqX$*GLSHt0CQ%=Fomhn%=% z2?`#5@5-@xSI}lk)=8A*_jSTED#m{oaT%qCA_V{6?{q&#G47AFK91_4>hptSv!8Wq zN>4*hLxcSY=W|@$)=g6U9|h`V*?3pwad<9S)2+Z|8J#Gx>j3%aWSzK zJLldO7~G-WgDcI=fb3>H#TrORgyN>mg&Mdf=psG;9yo4UOJ7rImM4!TwYs|`fvN?r z0|Ax@R#p;ec_&&7DVtZdEVl*DAPumn$Qtm937^RHrxl`Fw*87js5BI~7O8LH4{ zT(#t~IFF97|Kr`q|EHUy{mdWEJ|ugUDvh82IsUDoNc{GuaeDkrRaljx?ph~V6$ALY zZnt8UE@8&2XxcBu^teVFSdpxX-A)3Gith#)9Z3W5F^{|v;z((b5w>8M(`BZ2Y(;sHo^&`+A3z*`pA3Zjc6M8(-=mHGZ!2pOTqcwU||QV2O2lOBRg z-{Kx!cXFQs38KY(rLHxkToCzjz_zlr|KEDI_B->n{l#)iWo$EY)yr~pyCT1hKyUq% zF)F=b7aV7!_vSZB-}tnO2Nuo>Yrp z6wA9EsOPTc?wA>nNYXx_ioybza&PbBC5Nz{9`jv2WPWNIzfCLv{s~8UTS`7w7`6Sf z69Pw1kVYy%Xk|1$KBYn_tL~PLw4)0bl0>h>wdd? zTnB2>_;d$`zP89X+>=7g{R^JjPzFI}`k9_VOuQLPF@y-Ojg6#~H=~}&-&=Ew&G#sU z5o2g%7KoQ3?B+jxnA2{Ev*By3OP55DsOp zDf1X$^c5A$#0UaZCUCg=2|fKDn{n{Ks^Z8_WQT%6O4fU;WWmJsqZyo(p3Z0qi`Lj+<0s^5T^YUIEc2s@-w&0i196$J+ zyRpW{%)8a+r7}FH>(A+7|0HRO!mge=`_j!(us*(e_1y-dL1^*mpKk?JUhSuaPS!=SHcb}MQ7X8kj~T1$KE;2hx{=ek|nHOxHItoM(@_uBB-m>0y8kYVTv zbmFR0KOHKDA<4+X z#Ww9AecSYIwhNh@b zJ`yUteeP}L_ZshEKnWg;Y0!$^k-@sklG}$NEq3c+^16VCSy|z%{U=y%0erSY;xXcD zTuD6qZbZuxKVf^oR!2qP9bcagFvwV@*n@)y4vUS0U8}r9zwxZQSs&UR*-aiiraJkk z$&gR4{7x>9K~odt`4LGtWlX)Bnz83gsje3SDDO9`Vn+t6-MZIrrg){`Hb zxj_R1`bL`ZHJ=7cnHCt_LRNr;kpi3_tq5N_6JPTlXqv5nJT^AupwxKvTFp00wdf^q zi;W&=V_bHJvOr7^WM^O zS8LIQJSQ;aVd3WOX@UJ|F1?CIo;Rjg1_02vR#v_Yilwshtsbx3i?R}UJbB;_rohY; zes{@pZ$qgw6ymtBZ`tI9xh9fHuOSV2`=jFd$AWDOHeI3Iisy0ryB?s>^X$&=t61tz z4v4vmrI-%d2W`zyKcMyBrvQC>f?P(EOCWp1*CWU^73w$L?fpL1clv~%VNl52@aO)? zU-4zL773Fq+6r*$RCGqpK<0JqW2j87)*1H8T8(uivF3AqKAuybx8Ju|Ry7`5wLyhD z+l;g#XJ+g*`pfzp8suXO@@+zAQkhg9>9O3gFl_kmhM^DtcYzgg7V50X3%Q|Py1*Q0Te^(6oE%xKft!kdeu8(I$s*kAlC^c|bTtLB?N+O`1UHSpfuXa=gGcc!Jqk)eJ}enupFhE+SH4*>s|CFzbtLA z`WRXlC->1ds?ET#$}7W0(#_Mev#ZOG>2CDb$9A_h+-h}Y`SGzJ=#;hNL@?_nd<&ma zXx!2!zWgOZL(lY0$%|vKZ8gldml_+dweD$qPgM{5hCc~L{&&PL=XH%JYWEzp5*fv` zX-$k7W>lAG-c#cKGi6S!S9f=r7AI8f!_tp6LaBRJEA+}5SZj~gCNLNPlMxFHa#KPo zb8@MvFHopxl1BgmUX4Ndv(s3aO6ae9>q>zZ~`W< zZXj$X*JbSq^ez{Cow+c1ADkG#pR(rv*O&TKQ`NqWxcycbwizaU$q=3p!Mzy)HC$Ue z`4Sh$U(F%NEclvgeW^ljf$dJb)mH4M`ylK|;5g9EI=5Oi^o z=T-}Bzyr0p0NL*8=tm+&!J0sT*0nwpS5-CJYcGv%EeHDu4u8X@GXLF#?17ap+t=J$ zOY%YJr7~M&P#%|LOO_>7oo}L;a3%X->?^$G^LlL0wKbxU`-c|?Ka&C4gk}s2BSCG@ z`Oj6pgyF6@&awK+ax2w;{Z;1GH>%9$TV2j8pF5AqMgop%H_P{!x<$d&OVoqa`Tg4I zSt^v#z01@E_2IY$q~Hh2a?1Ll8wLw?=jz3FL_X#(L=*&=KC4v!2ii6MZ(^}pF6^kL zqXRk+VYW2A+}u7hPwSaMD)t9Yj7w;@#kcFS57P_dUcTbvkJD|Y-+cnN0yxt)uQJ!D zif0+9js<%H4w&sx5?P!g;%Qgcmp%R`V_s8hj+>{`dy7LLn$Pd(=tk1-Vk+x&kiF9T zEf^pb<3cVwsd7y3=!EXL_6`(dV&2MRF{vo#gD5nwr>)YcB!A#EI)FBzyTUF9lThFY zRsk;M=V4*2AUGi8$8Fc?`A6|3%-U$f%cnDvJTP^}Q2I~jw;;Hoc8pIkKZBwxeo!I} zUt_aBeBKNH)%Kqr^DQs>baUYxA%j=hGOz5!7!Qk7nc|=ippIxtu1kg&7z>BARf;7# z-G_VKcM}}Br5&`%F_af4D;QwWFESLLuWXeoe-K@JU3s-}=eUpe@G?Z9D2{gbQdgf^9s2eB{E;jUm+`!u?K`d9cr$Ask^rD9zzS|xuZ?FO z(j2{-@1J?=F+ShFoWWq8+TS~SS#d`pKf%;G#U^ET53%jh^2|O~(^6d>T8BNWsToK} z-_F54RjEhGuORGLz@tc20LcBa)xgz1Pb_uSN#9kgS`FVXzv^NxstpB3^bZ0nH;_QG!EMNz4ajhL&bMz7?lD^^5t~4%!9su!V zTbMLT+rJ;_x=ZqMl=86myj0>UG_0-iwR(!X?`!p|`f%OU+zD{xSFQV{q@*?mH=f{U-kH7N@Dv#36@T(Em;2|; zqaSCTTEX8`NQAQTKM~}1s2ng)7S8aW8GH0kpPP9Q8$G$DisX>GS^ATEg=k!c`Bl6= z=zpJ_R*~fyX}fk|aagC6lB&av^f;WIn6)9B3A~$(c^2k_Q@(PCoe~$95n0isAS_f! zx^k!I@BwA5Ff%^x{i)|eoSCY9XS?m6Zuy`U2D#8ZzKqdE7watX7Hoj6L(rZ{7U6x% zQEG8Al`ult@so3^6|5$tHzb`fa z3*u5u)5ZGoVE2XvOM8jU$x(8|QsdxDBBQOYYe%Qsc`~4{-F8(`u5c(a_cqWb0}3-c z`wITY4;CHDO3tJYuGeAhI(N$j0bvF>_HYgrUt$HNuF(sY znmI5oxM4K6sRlEGbu);b|2P&s3KVSFBYCR zlS7Lhx(S6F8Jcx}>RUSP#I`~Hxx7?qNYgD)(lM@Z-N}`IZBA5O z=&Y(prsVWtpIK$9@n<5&+IZ$xzKv3>0#;8Iuig8v9D95;HBxU#l(?sx}5tMYO6D1+Hyd5bAhqQa)!G7e%l%~IR4cp<0q^V>=sbbEgJh8y1B zruMe2GhuE0LAyBj=Jt?>4O#1~9XHCY2N@ksV}0-*x?4-Xv)dzhU8V1I4P@0!U<`F^ z4S}bDOKErO{;D{7aj=n5HOFC8FA`O zH+u;ye>6@3nYg%qKsLwo!+l!%5c(kv&|rg9N+5<6OIwSja5Hp4PS#h(s7}TY2bJov z?UtBT8B`6bI37!k*{A))*adO06Hc9;5+I@P@$ik)q~8b-h|SrJ)|Dnv5?%vDX=xJv z@mu4}l4M79$?Sr(nU8Jo^-;&@$q8FrjZ1IdcU^q4$WY(WlCOK(-0)pnj~|*#3RoWt zboA+R1wro$ijS>J1{j$n37j<2c zCYY)Kg2%tYrR2|xWF5XiEaS-1U}o2Fpzu@b|~cXDtO`a2_k>kxKO?zY>!Nre6_y@kFSe_G~f zw={J^LlAni47>HYIkT3wbo3ZQ(8_nJW!;LZNuHBP-L`bds>k1K7)vNN#GQ=i5#_S0 zXksUVAjdJvV9U|n)GTTAJBRj*$Hv!tm9Gl!7rHH$FZckK_U~04J1~A~kbcI7Fog6i z5oQA-)`|_}73KBgJ5pi?K7#wV)0?_=zTW|L^47YipVRyQ(j)arfclD#-QSW4H{S-K&cZ^aK%{?hQr1X?@iyYx{C6?! z5VEvY^bZ!XT@+D;`cbtcQJDnSX?WGjh~nzcHC8`(b?R*|86UVttSio2jzqz-ye%2sPH)rkKwd;BnAh5=M-1qD~RA*wXqU<0HKOn^{uc{vch8ui* zLSQM0*R(66;zK5d6^bHNkDgw9Bx{Pl0B3f7g`Lfu=T!lLBh|h;(8wz9w5=HdR(9ql z6$uKC`=MrMYctyP_BKc+Ojn4|m3N-HwnTw~XUhY-yoIKW$*d2XODGtiI+3$}aX3`^ z9l9pCEJhVJU_QN?=us(+O~M6n_Ri6voh3FncxnkfTu4Z22))FK>Q z?6J4SqK#n;TcpYb8cViq%dydn_v*xpZ{FJFOw-i0;VjjA)b*<7fM4$f3R3f5C&Xe% zNowF>7nL2m0@**+PQb?7n8jo@*UNP4Qo=Rd&d%$pyXAbYted~2=idEn}oKfrO(X;cGz|I8Vtf|vYTDWtTz>V<#VXH{Ho zvg9Wltq`I;qz2cZyfvX$QAyN%(30#kX4!Ac?GjW`X?ESv7EUPXy!tEC4GbQbu$`ah zO9h68CQCRwor{qeVD=v3d-yXx_-8J1N6$ZYBzTOZiZM{(RAoquu5LxFfDm!x^z=lF zl;<{OHTDhNT(&XwakHcbYLj>+HFDge$FMJ<|H(2dxr6z7(r(z6)}Tp0;fECfm|S00 zxd4+4%m30?|NP$;w0~4Wi8vBxwB#3olc1wZON>g>thig_y>)d=)bP*oVLEsC^`cI& z?Q<_Y817dmwbP%h2pw7pU#3r8+BzEmr5nHq*BEv~^Lr@u8%4A8;=S~}gt>TbeFqL} zpIpwf0#qm)Qs<5@T|4AJqANvH*->q237*%ZCx+K_8vb#;mf!*|3?e#n;{BDQM zPWv$OZ^!KCm1%wd-wdEODPSr)RoDF`^GX-?cteV#}2Fb1I`>JGvH_WMi1mpe_DRi)v-5_LZ(o z{)e)Bg!+DX;t?;F%T@s`v31R72LV=c$l0j!j?gmwWxZ&oDIt+U)EXkr9ME|tn%`&i zaw)>)x^fq9od++=S8qIMJqGYS?KYc7umTQW$pBT@CGviLNrF`yxR#|>2Yb#VO5q<6 z?Bh>oe}#CQx~5~bEN{CQaJJF7ZRvt#Hp?=0Dk+s~HVhqGhk?~MunDWDGxGc<93RNb?r;9n%OK}OW7agO346(%zO1&u|uJb;ev!SaYNEIMXyB|Lj-9ET= zW`_~_`U689l;G_;aiX1-A4>f7`qMKeM?et<53 zd1*0U@8S{dFhfS?sDlYn&}!R@l-X`Wsx1}y^ox_;)8)=7q)%@<1@*Stsh z$qF>YWT&Ti&R+b2z~0(YW$xUy{Pfqi#Ef=O9Lx75U`wqHN}=6};`vVuo_1r05YT@* z$o)Ax11ul$$tEiSup&D4rO+@rfoJ$&T5_j|G5UxFn+~smBDx+|wp+gO?2$OSS7Dab z^hOqXG{w~hDX6KW$U?PUb(7ZJ+jn<-V2WSd`M+`R>wQ%Ejo<;Ivm7Y^Gzji@_4rP* z^)lL1{M(7AOIMqUz;-%|BVG0ocpF}?-&gfM*a6q!`MFK^`;y+ywtnvL<{ekV@w}8g zOb|FwvjSRkL5-9W#;)Y{NmD1+rUSq?4@;6Zd7v=ij9t@VyepaSNpMoBMslt+mtS&v z>P8OEwW(99KQZvv8ZPYO7m2Mffz}zu-WqOzJfdN!huL@|dp~&JPgumfjjxig9`Wky zEZ1VDgqEulsjFU&kA%Oz#IJI|YC-bNU#p-}3an?TzIXR~t>3pE=5=-IeA*8D(yR9C z@>6*2jVXaoK{FgZAGWK$8oU9TW&Fz;QQAuCi1DZ`&ymg$!dt zJSuS#z7mi8KNJ;a;-!j$i$FLR4!uFs^3VLV+yD458-}O84u=<;{^%>`i3Pldtc4 zzm#^DV|Yu?IsH%(9iw38whgGHusMJHuj#%iUc+(8Hi~LspzeM z?S}~+UC({?ToItLwp4j3=f_8QTDJ54Ez5y%J{6BklOY~ob#P%$B|`Tz7R}_sL@|w? zl!eTKN}>wwO&>r*TB(kGVv(3>milekMmjO>7g=8=oKa$Zu5If1jYN+=UcxYX2e7cC zRTmo*P(A<9ZpcZ zxtrTMYyh^NH%K45A4zPd>vMHJXMhCgW@>AEsr!YE=>2zxbdBi}>9}65zN_nG?#Hp3 z$9)szT*MDp*UR;tT!84eiCJ0nJbS)^M{34Z=iLK>GA2Ajc#DUDis*BwUyVh*xR zd!y~ry8A?RIRvX!vX@1_o_Rl5*T_+&DMUXRAT@_DEzy6Px9x3W%9~sK3$3dw@(e3M zPlvp85N$B=bEpeGwG%9G^H&sFKMh@Dy&sk;QT~kP6MM?Gui20uti<_F!>NcqD#NNp zft67!Wn&SlDtN*96d1jdByDvZgosTdB=kmM(iH&-UnEHSkMNqAvX%U3mteqj&NC(i zs>O?uRS0L16?RJa!REn1bLKt#1mLL#MC6pEXo!e%t*-Z|OCTMfjr}>YGM^G*9uq73 zRP#~!5pl{1QcC&MV!L?&G=+5?EmOcBM+O*@09$6ao>LoZ+bSjWPrzJ+wUtex^E#i| z9Ibh1wf@h8+oX4G{r!hnwvyt~5b~tQ&#Y{E_k)$(^qh;5VWQi?2%?XtL%#P#PT~aE zII-81NZ{U&Uhx)HkAF&bbVCzp2&0rR%oQ#2j!>2d@r}NIYn8h@opVnILUH9v=T+d$ zzv{G%gz@Rst1FuqAKgPcxAWJ_hFz~ht7z0~(*e_>X0=Kn9&%&^<*hGH*H19RWXOnw zvxhN)G&4(v<(@~(3(zpB&T(&A=9hh|aBhuNQ@w&( z;RRxJ42dmQw^Rmb9)(LN_}hkqdo592mnLs0`)}%OEob-W5DCmP-njeWkAto0W7ntb zt=Epb*B~#R?%1AZxObwDN58S9?rY&KE!;{vd)v)dn9|O_ql79pB#9hNMavlqZd|G~ zwJIRS$G#ajz_)jjOptJwblafO>cp7l~qX2~zPF}nr? zxe=^D@?r`4DBV;SiX<4#hnVE5K<%N7_K0!$lT<~rhbQ-jojj<&AcQW+kT!3|#(XdQ zmE}Wq%d}Ot-n#6vi}oo#H7G_>IJkBcmDVkm?Gpv}j%KOF`To^KxP(Q>`|25Z=y@ti zq=hmvGn$S1wYsStwzC@QjuyM*3YZZ)NO~|C8CJ4d8bYZ3kW`+-;fS9l*#FlA_rN?Q z7W}8ci2nV6VCL#5!LD)(4jocSa7hjsgzP{4@C<*oZ)rYP171yFMfCn&caBvv@*f~6 z?~sDBGe62kBDCN+4Yq;G23*#SL;Kke|6f$Xc5N=s1*by3qTh^gjwiMcQ* z1+!@r7*2aFbkTRrZk(q?I0K)S*kXJN(-2eD%FE|RV{8Oxh}@6(m=bt1^Zqy{x{8l| zM~&@1b_kZnCH_P#g?6I(seuueJts$|%^ew`)Qg%;!26}+j3^6$EOfiT4FyRqbxSS# z4)!H6UeFS%+t!c@irXGSJFBS-MxUzvo=w`_4ZptZ2LlM=gMij}38V{XX$|Y5zKzwz zu5LvnK#2V5^Y}9E;yjF%?tJb@wfaq1(U3@@ZgrmjhO`b$(LRFkDx`*!ow zNRlEI_|`o<p^*^5zcvV;}j zs!`Ey1N50ZW^A}jnUf>+!451;;W?TlXc9{qO)_RqFK;HdoPK=EVM$|4H(Z;fJAPi-yc;y zZ7+K0j_zN9;ls_sXr@+*iGgQdDYc10-bqBk@A%m}adFti*(6`T9~ni`vavE)&`>5C z%gho~V=OZnlfXg!|8RE6QpSou9X0I^S*ug%NNP{iE`SO}kHjnK2k@4vhi^7o8Qbe; zMa+=NH}W+q!N7hN9qVSDd8|we@KmICuRT9Q{C44_2!!gPlloUqUCk@W#cN`1b2Tmk zB7Wm;b>>V){>^{VzgHbV7{2it?~&*c4xqH)QU|+9y9y5YgvFP)!|RG;bU5@v5(mRh zzKDR%T#Zx4{@Fox-tpAp6&;;{4cAw&+vkM0Aftc%-Q)#HB_QLfH+l|c%dMmn{w!vx zvs*MRvvRyquw>dUBqE4p(Az%j!6Hq)1d>yShB>#PAIW-F!n~esA1Ip0!uOt@lD_v$CDX0}EBNWl zN9@>8;wZd!up;!kDy%`%?$8QA-%k0>gDeEFMP421{e=ev&TKLeyH!DOW~GVs-5g?8 z6OPGFuHSCA)qm`0l?{5;J^QYJ4M%6055z)LNIKX%AE>#@>jgh{AYvF?eld-#*`gMH zdYh$0FF=KO)Ij(YllM$8^S*kCgsdo!Nsz?Swcj8+Ji7RKmW{P~F=1Zvl-weNIX7qb zb>cHH`vbsnUiYcZUL=x$zY7?v0b(r*P{Y4X;QvcNCj-*B%PMHfD`-f*%^M(TjNa>W z3|UJq{pu{?td3x7?6ygIjXJ6_rB%p&!u}XK@;}3!y%qE>XD@J;!%WO)XpcxJUG6Khz z5h%Uks;ovlzb>HjQs>(*o>g!0I{rXJsk)-ezlthPOzsce)|mQGc)sQ7t;zEGZyOmk*~ zASoe7;yMWqUd@1OGGbmzez!+z8|uK`7UcN{%?Y!#=PWA9^wbB9)j9`3C8&e7 zv4(S8*VDD{4j4Af(04{?n#`_l7Q|{EyXaiDwi#XYvhGwSPkvi|x;@XKMEM4zCUXZEJe|1Zc$GS^Lsh%KX`|M|3{xB zC-8>8RHL({&VUuvYCFvw{lKUj!%$q*Y}*F>Vd+b-Su6|VW+H7k$s3hSH}?>AGjnyQnG9ee*IB_vsz*A2jNxljQP zhD*ElvMPl9suv8*A522zyRwnsFJJ`!q5F}AY;IvWHIV&OI*ZTxY8UbxnEWJs~P4gr$we&z*;v}oMaG6Y@Z2iZp7zJrlbA!mUpvYAAni%J09s*Oa7wM%2c01ClQ^FHv;M8l?~7$D}-rzeLf2Qgb5X*8Mncb~%0~z@lb)@d|G#T2}GZ_#%X=(`}01 zEVs+)a58o4rTd<~$d_+&EJ_E15*%sW7{3ADqg*uRR!8(ep!X?h9qzCOePo_~{9353 z=mIvk5sH;R*&Du7tAj}O>#wSDVRY5!B;kSHvn-xLz+jfyOD(#O-!&90H$s6ce)FiW zvZSnn5xoKk3({n;);m3tt<)GDF5i9c4vy~I*E{@rJ-ZJ64AKKybr%~#Pvl0~18a|2 zMe4z1DJ<%UK->J4E#Cg`=E-TpXFhCtXC!P_D zpIrWJ?}o6U2T<0qT+?Ky)W=KnqgUs7`>bS2&!%x=s74c>opE_!s1}Z0BMZ!R*8fe< zO#dsBbyxXwX5BxLIXFGhl!xTBAdfOxogVgUrximwi&HSWw=t z6jMT{EHv@bXp@T~I=pX`sAGZkbY*I%PPxguG|{A8lF#viz*X?wyC6z z``0D5@80bji1&sVoaHo3HJagkoZr_&Pm`jG=Tjm{h;Yy_iq07Pk^kUi3xq~r+|^yo zaRckY$qktGPTx;Pbiv?PRZH^wP6%`(}Zp&N()yiexA9syMz-=nTm!6-w zrmo;I(E`~QW)A6Gu3+Lk0+^h^r9)rMk|LXiB=_E~yHRiy%Rk3Hl5DC(tMq{}cB)y1 z+i)ptfYFZ>jZ4&vdNgkYxkqBaJTNgD-H2AgGQe*C?Hug|)b;5|@?yMX23f@^w-Mm82D7A2-V?BIu#5#TSMS--6o8O|1essDVs_x{H#zjB+7 z=-|hu9Y4jc&_;)xD*BI9sQNV;K^D7OH*WycK+9`w9aXysWWNBG1e8bC2dwFwj zG@0OHbK?;@IuQrBv~TEVlMLImOWEVCW%x=l;V}rcSG$f@w5z$leKV=k4slUSfSrwC zxc7gAE41GKoe-B`|3d;nBJ@X~JlTy*NHpTjmGY>wZ`ZwL2;KekPp$|Cxg547E)8De z@xp!zJ-4KO?1AI!e9okSI_+`l(FCE?9PXtYiA!g%DmAGp=A>-IOf9T_O^qG=swFAF z(`V8mRU-gIeFQ4ry$UA@0rOf5aL<1e+;9Kgw{_A0>0`%_uc8{RNk#!;!>;C%)Xw>J zq#>#S*RYvf%wS3@vI0Dfk$>5(nVb^KvlJ%EiS!!i3m(Wee7So_4h6A3nUo55X&U!P z{3Kb}{Zsq`3p=$*znt>W^uQ zIK6ZUkryr)cy*c9N6|!S{>ft|7G_~0_g;)Gv+_*LK73=czM^d zWJ<;lBe^gk`lFq?7r8ceTGLZ|q~z{GS%`_|?I#hZ8Ol4OZ?`*s4#Znl!s(0bOq9XL z{s>b0uJ11ziWo5b&^x}1I90D{#kc%ZP?M4guUj&$WBDPLxGhDAnW26yoSrPj8^liL-VTIGjMk~jqb#_|PS|V(7%m!Kc7p0om5OIh7UDK*{f2?>J}VFI z@`}A326r#lUV^XcY$e$ri%Ioeeys` zx78D2`Sy~hi1RhgqLzx3sv zomDTVdIoZOxC_UN-d;(vLO5wSuLnIGF>u3m<|?!!_DI;K*D`Ck3RnFL(}mdx|yb7LFyzwnTCq)l{YguFe@^5;qXpS8W!5->!9nBr50QRQPLh#8p z{hXHT*eT1VgT5di zkZzku>0J0>r#c<*#$X$@x;yYv;QkrnmrV0HWvxWTmRm}1>)^el(IckNW$4anQ5k() z<2VXc`a}Ao1+IRdsYaSO&IRmTz2K_h@(z1=B4HpEgtf`fl z<%h{8R1X9O{tAJkqrXyq1Yt^WF@ZfkXGuPz%93)g55525Q9x|aD4_wR2 z>>G_(^Ry#+jBKu8utEIV_k0J>K|1d z6NGFUW>E+?zSX;a@E*#FD>*~tN!P6cfCK@s35eCO<=G3UJ zOcP8pYtC1PrwJHKbpz}N+dx}Y>t~O?wC^1)Wil(F@aNC6>1mlFf~wB4S#iCwdCo79 zd?n5vzA5ZW1I;Ev)fZzoQqXxn$SN6C&v-cc%!lL95v{|vC9Dow32#(ZV)*XJ*$aR& zMil5X=K^V1Zy5%3C7>fDG5_7Yqc{zA112D3@gaSJ;)h4bcMmo1V!lG%B;bOysXp$q zE@=fC`zHc||E>ablbKwi7u&6>;VO3J5Aksvz^A@H*jB;JkG9ApE&=iO&eG!9^nKL4 zy_D7RCDdC<0y;*NjL6&)-{!o0WQyFmyVg^#{&LVf#8N;CXpoX{4vujKWXl3NpuDBa zdiAO!SKcaBtBXw^xMGYJTix9~XCW081QQYjh_Zm-Fl`bOpD_DsxsWq`3X5)u7We`gIXR6_4%&Q+}yz? zFb}^%JFYYoGRZ*72S3_NXUXUpnQH^6-TDG_34bty-FCxlJC}TpYs(+#5;nf%(M`Wo zMdIYr&W)r&Og7mU*-?OI^8LoL!!P<{lxqJC>*jt4FFHBuRamSL8~|EQOduRIa5piV z1MG(mAfH%PjuM|J*U`~2bim-L@FJ-xqlBD8sqjQ?RqaQXojBxW>NZEjG%=H39{Sk?Q$CPPnL|x& z48NU-1r8~4XV6)BvCu4sZLT)2SRQQ8oHmc0%f&Gk)lD1V8djhpjrcZ;1hAPjYJ@l1 zYBX}ED5NK4|DnFZzLBh*-q$Vy173{j1<_NqC7`iq``-k=5;dTS{*yJgbs~7`2ae%_d4_>dpB>Bj^tqihhO@!rf)Fp;vO1Y*8zpSKI_#M z-{-!TwKY88F5$7JNNZ;He-ijF4=bJUHd!8ns^Ne_ek6Y+Yt zM{^;y!48g{qEmt$Y%8`g5!LO~DK7RfMNw496~(p_(G&&FwWdQ(nHj z)%Iy$hAOQee}-Zcy*nn8m=}v5N75y92imrya{2EhkEb7|{qpEOH#1z;)-fA*fqD7F8UXy7TB*h`Xx!)AtZ#S8L>(9G(PAMzi<{2K#-QUZ+_?jZ2-X&AN~1!I(;047-W5RabVSL|2sy8c(id6$rKtD<{~$vSO1U}*Fs_vzU> zf*sn3UvKO5o|=~+X||iK0;FDzdFKf^dJio8r>$yYfQvLKzgklRy_-mU#dh$&eM{xP zrT=w>hz4eo=**JlY3F@9sziH}ge}$THu0rQ<_lCW6xBhLe7)L(Ajxr~9!19M$de+= zl%$<>iR#voAOntL*SH-k!&c8CnCv^j={;^W`|eEKp&mA!q z+YF|x#EePZ`n!4OvwQuU)n>R9pCDIEUVVWbsIL!>j@Vc_5bZLO)y=}1i; zDD8oh++wS9c<0=2&ZXa`>EP@fF`FT7t2@xHf@s&}$&(dX#}Ei()zERF%@&5%FEyk^ z_V>>a;rAv4#gpDWn)pc`a4&{t6$p9UD2bTq(PA&i5o^Y&KV+_xLym#w8RT%#hb9{g zaf=MOyZ#Oo5aKvqjfiyBq8e+Rb2bwMUio%h(kMN)!LPR>&*tAsCzqmK}!v*?d;GpT~>pIEXg+|-3T^A zqSr0l>#KmN-Qyc_Y}_y9Mp&x}GGeg+!n^jYY=Pk4HaEZ673%=z&>j6=AO%%R%LquR zl%yW5-`))JDVf8`Ypv}XSy^F=Qjr8Rq45GJB`X^%B^8#ye|UO|8rYpnx=IiUA3G3- zs=fJAIxp2dR1V}zeKn3Y|9i1s>a>^3oemtw zS0P1543B(Uy+*a0KZAX|6z!zFglfzjzSQNamO8>TQKnJ@Tt4$Iq8cex zYP8ZiA$vcExJyslFaCbM!Th(|yqx~8tm?WVSP|FCMsLThLbCGrP@A=I8g_3K0)Lo~ z(?i-7ipAPjeorNScOFwn0r4{su0Qt(r_F=SVZQy7%s|o6KK4V2HVXyj%~F<|@TD^k zwpIB_#%C-J@GZ+~j?icCzRAgus4`D(dYei35E*+gH?2$~koM+&-zIqC2wi<5*YY|x zYc3;ho&t8o0ma%<%uxG5+K#*fWVQc2pp4E|K+jlX+`K(3Uc0T7 z_@w&_;^yyjX@(~jcC}F05&@MN^B-JLbxmRHZ!T&gWnGxlgaW}3qe!O?M~2ay!ZIF+ z6KMhz6UY@W9sN_-*)uL#uy(kFq&r@$NiK;5hrULJM1i%loZ*B|;@0d(E6(MEnEFKc z%U{>b(Uwy*Z5>cr7*a6hk9vz>ngzf#VrTfV&TdW1WirUx6#oq7)~NB6EvwQK)jt{2 z5ENZgBy~QeSV-9BN>rd=`B@C@1LI6Er_sje{BeIzWjWZV7{*XlH;v(os6M%=dMScW z+NzkumZA2!j>PE=@dP?iG#VrmnYG;ch@4Wc8GCSyi*#kDJ zf4)t2Lo{l(yPAq79QjOOnV8|Rn5OuCgU9R0uRpJ5GbNH3xOy4%E*1!HsbMu9cCH>5 zQ?g@l+PMq}$~iIfxD7 z-ay|)rD-f9Fp?~`U+L3WyC#lgatffv5z16&{o(tZbJY7Bse5=n zJLRyIJ|dtp@I-Ss|90wfuEA_Z|9Elfw10yLs8Tx~AAos-Hi)_rfQf8Psgtb((Sf!M zl~YqzURLA4xOlzo)&JRhXIR4nt<#`q*qm)IWX-Lg3q?WH5+M~Nw;8wfRibFm@fFD4 z;ozZo;W;AiSPb;NauU%Cp2Q1XR@|Xr zKPbnrwV<+fr6N2HedI19c%XG!$2p>xx!wbN)tB+<5IWtCs|mu@PX2a1-GE+ms&vQi zgg-WwoC>q#rn>ybUJ-mVg7W1vk}Tm#3;kIRO!h?g*f)uN9K%aGojfK+hPqcmZyd?_ zWC&2I;wsT06_q;9iJ4ieW$wgi5be&|#rw`^sgnBDHYq<~jf6AX&bnxlDA*2?=Hp?AqZd)`Dy;p#UK1ps zyti^})Y>bAx24kF17L(oteHSwK`}KD5FBn++$@+_XblhnDyuyiVO^!vTyWjDy*R2bc1{t zoKeyqqo-L3s+!ijT84SBM?|M!6dItA@zkp0)W?=a(u||wQD?f1CBAtuYH&*qRcWPC zO3bz6qYNRQ~ zic1Us)Yg;X|7Fb7NJ^V20l6imAWIBxi)3}#ADJD?wKVg0o~C>RQqOv*67Uc;Znh2C zU9b6ZJi6TeTiTVs4fiQ*!)@f^S+}33!qc2)e6`i*%n`*5os^g5rK-;i>x{c}8=AOH zjra^%vXz$DRaEAP?$V?I_caDOMmKx5E>CWBG)k%~qvPQPApi&ETK)X>9~CYPsEZa) zX@0YY{6xy5PQfNaPP2;{oZyx;8(?R^q6I(+KoJXQpa!Eq00EodN1Rk@&5IG#0IL;( z?MmMUv+|>*e4ZPdrEq>#AAXerzx-~(jb%WlX2n#EfuTM0-Pde$Y;)Dn6Y3zZ@{(4C zJUc`tr^vR3A-*!OXhN#_l+Xgf>Myo!g3-K3r|_OUqZu+(yqu-_x>Ym6RD|Sd<&?sL z*EqGHA8=p6*#jGe>wly_8Fg0LpoW;5?B`nC||-mIB`Az4_E*v{91X+&3XC&7xs z_1Z9<6Ef9w5Fk^^Y^FF-GfA zaX-rCJ|MI{PBKyc?7`??G_TO-?$D;rj33H#TmYorj4v*RrXJ%7E0_a|Xs&PE zR%Mc%JjL+_cP$efQ{^N}1d3oY<#&@Tp=;lNU0_ z+LIINR=P$R7R%=!H(CDxAO8rtXL~kNCVcR21iW5v4g~h&?i}wX?b&1J<43WiY=#BT z3CpIu>EhG|tpP*kQUPqBtJkPb;j#jY;7RzL83+8f%H{ImL=p_j9~Ylyx=%vIg12(B@XEeGou8Jk&8 zHs`XwOU^sL*gMaJR&b;@&Pip-O_d~Nvp^g?8;<1;}_1v0fqX% zeZ-jn!{h-XP&)OweX!WhpFC zz}66q?ejEQ%@OvN3n_Fr#4cdo_Cth}xa)-7$oL45<)&?a<1BnB7M_395p?M-FHY^Q zVQU`UYi5_nQwEoP_E7o8A&4Nk*i#$J+i;{M%(K-E_bKfVa~T*3zKue?(nIptoebj| z9r8U<>+%-4cV70{?~wL7Pf~0nn;{|#+GnJ4)X#F%#&%EYSYA-tp^5p75Hwar4R zmXhj6&3PzKzx7hAT2P5t+kQnwkhGbiTdRuCPct^)XZqqKjemzhLTyl;niZxP`UJ%j zyA>i43rDhVvNnlRi->meyJ_~F*GNWeu|Ph=!4YSAYE&bO#xUV~xL)U|qCCTd!(~nl zYqJtMEAhy0N-7k<8Fm^d=er z4Rb|+uO#8Y%6J$oVYO_L ze@jfu?Cvt{W0g~C9oSZ0xEOU@v*P~7QH`NmMf)*C832m;C8E5@z!`T)D>|TZJ>CN{ z%6}-JSE))hF4AE-4dG=*adI%1^m89Mw___cWKD6`BQY(`o;%No_HDkuUu^I)0?w}g z;D}KF@7U?cwcVelNG1AnS9`K5Rc6~ehjI+VxvqqxB;G35VEeJP@M$_e-s@#V5ibFI z>Vs(q>q@@aeIg^J4W)1Yen%T@Gn&Q;Y2jaaUg8n<;4K`ZX~}$-0H@Fe%Za?)sF0J@ zrF^~aPT~AW8DShH#=BM0b2c4uVgDr5T1Kivxq=J8Te-Gz% zX^_bTEBK9W7M}dKv!cQfh%vtI=RkTuB<5v+T13S--Ais(H|g|9b&*GxM_n}zXu@rR zrU_Z4KJtC!Sg?~}Vgxx53FQARLEvIdV`Qi`W8c>bMXx#EpH#1fJq%4fXxGWqS9{FuFDqLSY4;4Id`o}R<3EY%yTu>Nid0ZUw zi1&bbOqhXoj(XyuBKv0CJd9yZsS1mDqV6RR;aDXhZoQ2oCjO0O%7GE}VTR?>fP`l( zw74?c)7+v2d)_}7H;ATvLw10XGy^PRp3hrseAik112|l2QWpYT`gQ6Q#j$iAhkf-j zhw7La8yk^#LB`!6OW?IouQ^rkM(gvCW`SiBp!7k7>vD{4`q~rl?77HxrtFYCB?aD% zVr^IAp+eX3TLoKznQVB(>g@V{KWHWmh(1|4X5!~HY10Pe(%!QJX~YhUZ#=q5)`-L7 zC1z#vExw-KA~j2;Yj{tZx9&O&V9$ZR`uoW=o`RqMQy+`{?=BuR>e2;p<1U+5L!1wz z`Vom>wh*4OZPNnjtp<|5eT42_H!Mar$ztlyu=8CE%dF(-om?sylCW#%0^+8B$a`Y8 zA3DicC_eR5%pCBjIm&Rg;pz;_Sa%~h*L^hCg#zNcg9B`nFCmLnI)jcXqAdq5L*6ET zWU_91dH^};Fr`^mj%?wxLicf3qgTM7Ax8SW9od$ef%lx*oa#4;o$yEcz!LxZm>9V> zk6YX~-`qh*oJ(V4*<>N!%lvcVR#9$w=!Tx)nlLXnL;WvV=bE9$aM{3L`xmgW8p$Rvhqs(hx0)$@_4$M^m{o@xE-#` zSXT4pAu`dPv-x4=@9Vf_a&+r84sQ^y@MmAsjK0&-pgwu=D9{r-B(+2tmJ28V)L8~X*vQ}s5A*%)t zOXzbD{1 zuDKVY&3*+#QU^lv%RIX*%I1w+ln#@DD=Pl^KIZ&o1)>@Qp!?PXA8oo+<V{!^5QjED+}uUsORqDq14;>{`S^Z%tPP@N)R?J5IcH1;MVG{4jbR_4tW5wE;wB zwz{69s;D?TUO-m4Slh<5x!$udZut0@pSB)oSYfV`~# zW#MZ#3Hg+YkPI4|;>Mby-gJBB{BC(JN`Q{W`@WT2aK%5q?-f=EaJOTR_oDV4V-z#` z?8lw|@ESO`>v+C_j}77<;ztf<-Fu4G2>cY>4@ zYDj%6&sM=R@pQRI^F+tSdY6p%YzUe;2z-$TNB~Y{(0S-8*l#VG=&|Rnv+bxWy&G~> zW4Kgwg{fM?FwwBzzhPL^9Lih+evNB=yIkPG*)N-Qfp9ZVI%8h}K)HI&B0eFZ_z;sF z0VnW=qwf{mT8Dc(Dn$G=_pQ~^N~*{zbd#Vhjo!+I%^Kgo4DmX7)3FO&)2^!(+r zn4Y{u#R+~IZVSkvsc&6lJ7%d{*Ud)WNAwwlFfVH_hj`!og?-RVtaSzF!9KczeHo>7 z+~Th$(gHnGkGu5!wbC74yYr?SiVD^EXR8W5Ekz$=q2~$2d-vFrrNdS)_7~6Z&jfg7 zp#BXVr7b;C)74Kd-|6mar#%{DFSr*!_MkdkxhnY)7Xtzqq&)42>Sm?Z4-pn>WRE)S zeq64FEwAo;Gp(D#Qw>A&?D0bLGA{Eof|HVZ?k0R;@6O75Sx3F~J}++FS}$!?G*(wa zg)#j78JUGznNXMG?jov!QGkw-mD)VKI`47tjbk6r?=zh$1Nip&CiBw^a+tZ zWu|uCL!U%pzt1v!X{#+^In11DBSW5RAn{X>jMw-i!u{?s;Zjdhd+jxuS>(b)o;{gX zFx_{(&e~lfYZX5m(N{a=xu1TwVvQmzaC-wwX^;&F1^`|cccwH1SE`;F{ae=j%WGY| z0YBK$L%ViY{g`(*5QIa=Qth zXlM=io@lg)BIB>i(QQ9XwB5|VP5X~>=xF^}V{PUbXw`}=K!shtC^dwq1^Bj?vTakZ z4=}s>;+~xY7c*>YrmQ`IK-xY)RJjCDgB3mva9aKC(K9J6nmcCUWZ&4twy#S0ytohn zyie5=bnAYK$~###U5lato}F^fizMjqIa>O@UXw4oXc2DC z)I{e)5Qbr#28B>zV&$Z|oG482lk@uQAXWAK=@57d_f_68wUk-^%$h!TPBRrA@-Mitccl{y;{$aE=m+9caDkhf*@ zO^fW4s5Di{-jHEk0hKco9&dCwx%P=C%4G`JT-+6~yX(AYifv#fENm*FldA6kGQ&;o zk8s26&@7@Jy{1EKtB_Q^amn%x=ucfj;OIvYk>pz6{t(zRP-q&<@->LP?aw8~#c#Bga+EetMrVm-w~4>zhi`P+Ep;i?~7(@Ik1!k7(B{j10U7 zgbN4XUl$)fN$WVdx&l+gFh>fhmbK`uVwdkd0!1L2lXf91#{BY%ivPH8#G?K;WN{B} z=Uq5=bulh-a;3S{c}ITTV|iG&>x^PI7(OKE{mO+k$MUR4>PDJ5`=tjiGIRciWw~|i z9UmCJ?+^z{Ljo<3`<;xR;#hGQw7dCLoy>zYrSOgdvhM?WlkLaQFj|LU+|&q zX=RU^>VUzD0}x$d+Mtn`Kc69)K-|5(k=yVIIuC?}Zbvkr^m%+-UVyjM+j{#{Ur*hz zyICyx(;%KW`civY-C(ulIIGf$St=L8;61o`&3xR0>Y!jDD5?AFvI4kOEhEldA_+U% zK?KYYqFHgVnxRv%3(?GxR1i&<$i~;RUsRQW1xNl;3@@^4SA`KqCRujilsD^QyOhQD zqhmRB@JcYp_GK$m$|DML)q%md)#U{Kh@hL^RuKW)Iyah=-H1O7T#yGvH)38oFq+t- zSNPCvb+hnprnRL*kNG`C`K2>EfW0*t*D^#$<4giU>{-=yZIzO#Uegi`Z=w@DT01^* zm}z=$wlMQoGjH;!c-8N@Ang@!9;0iY8!GS8&;Ba@t(}Zt%9_BL%npx|jO+|5o{kFZc<%sb+Es zmSAHG@J3&{bg>9LD~J0?z&E%U7CTnlc**TN2NL<7Glu7G=_JV%U^F5L$kSV!Fpa*L z;An>9AdL??{epB6)meJ?HTUyb(*g{xUa&8vhceg@RQUB3T^s<(`)Dq7#S2?c4T8$nW#l5R!1OS)6K zyAZzU*5{ol;aTAe`+qPh{PDqn)OGOGhl=DwtZo)|Gs5AV$QoAhnD1|qkl7F1;d z%;CT*@0$)$>i9C<%vqzJc*U2lJee-;Jo$`VWMtyq4|{6ryEs!j7Y4tbI^EX^MUR3+ zzXL|G#DVDSX{MnK)5sT(u5~wGDC+WHbY|+#nE)I$WYBk5GpBuA>EYfmAG^eLXI_7{ z2Sttb)t<_W!^A0cn<%BYZ{)4Tpf|+Itb{r1+ifI}?X)wc*a@|ID#6auutG?v%inty z?TYGZxW2?OKmluIs{-$)Ng~14rs9VtG#2ukF8z^~sJpHMrZYjQv{Z|aO)($Q_QQGTW;NLS{1{#McbXLb{pGnInw$;_Cm|o*{Mugh)5X{I+n>6g z&3yZ?#EOa);!aaB0n5ZZkQnZQz9`cIKg)LCu3rU~I`OUtv?$A5F4$$iBsVT6GQX?f zcMD0CS($yxHf_^E-nIQhlW7@aU)m3Wr1|$yiFq`a1V1(aIjN=wR~Ad;ml0Sr_w?X} zGp9k!dz&2J6ApvZ0aMqGY(^=i67$!lS9UDIM{gh_Ect(4X^s#f%zA8{Bxc+`XWMl3`NXzhIes^zXKI9xL> zKV(yR{~kICpXtt_y6U6aaJW0~p)7`hY|v(?|KY9Ix^AvmhCngW%o+S#s@nPXLjPeE zdM|*z?cSl+;}itAaT*$nJpnky+?v&TDEO$iw^5R>vRr^V+}+)sUqHx=+^j}Io1I^< zkWm&iTyJlEK6^p`?ujR?A02(o9m4)Sq*Rt;V7f)n31W`qqMYFw7Ma$eTT&(nHCZDUFu~u9PMDK*kT}k2iTc;Rfr}TdtU-894 z6W9i8n}W*2@&>rkCmWtbV{1T?AsVEbsAU~#^k2Vz4r8QsGIJ@lOP9xrSO|zsRX{Z| zpFZ4}WWC3)dG)a>u8M@l59hrP12?q%TEA{!kuKfGz5G~*+#rv-jS()CT5();``1<` zoHB&940Yh!7z6sCANk*TM_1SPH8Tpb7!2sNpS}>ai~kA%J2|pK zkWAicu&Sp-23ozL100yn@;jO=H5NNZ7y~(ewB?fAxwx>OblkkM{VVh=AcNOk@=V6@ zJ3^gpuYHkya%%Db#?(^&=ZSawJ*UPc4dypr81+l*cy6im*OiLZWv?uD3#Q&pZch2E zk4N!paAarw+&|yGxO>~v=7$I;2T2vRZi8!qQv-*U@s$xpX)8Wg6)*%MiIK!a5ihrn zp2`^C#{fxA@afQgL%6fti!iCAsQ9q?r~>w)JP$Zj|D9tVKXVo?ZhD=Km%>TRDHHwn z`Thh&ju%>Hz)Dt(`VuLRwMdg&*cdp~A*HNYS;ytS1E4BcDvO&Ey18!WT~G+J;*0SZ82 zoH>g1KjziedyRNKS*l$%>{fr4ZkWLPsk5JJKi^ zF}(KaH->h6P44Euc^JX%%AO%g{AXl7wYsXVV$s~~IDhXm`F1BYM;xn`wDsM%HwAf( z^OYCG@)_L)`M4&D@QD#V5Kn$CT-?v=5NPv8c9lJQCBB&aa?~wfv6G7DqI;6;H}X9U zQ61Z_?hGA4qqkY2=T)OwhpGw2WG3mo8I@plVY#^BYa^+`Wg)R_{zZgJ7-MN-Gg4-=VUIMQu%!h?kRWZdpu-Y-?nfLBT8Xh4x?hdduaH;?H zGnU{%KmsER(R5$zFr}5(I*E0%kQ2egI33Tx1y+H0hWFH3KhFah<1owNCmjNsa&?&4 zGLyq`%Gl8N$6y~*`K{LM-5=C98hogdW^=1uJh$(U^`u|24PW=;63j3W1lC4Yuc7(c z(9I-;$hE0=#9%bRSy7Yg2m@6dOKH$Q3ZH20RJl!3u_7vO-5*f+{b zyT5{$C#&I>TJGJG<&!su>*=MrTQ||WdTrj>{r$)Wo(H>~>-vXC_-tLCnbG4|{_CcX zS%rn`D2#4=?rgTF?K2{Mjw^_M8rMrZvVd1B9g?$p<7en9W%oWo((6KqUex6MfUz~6 zag$qZ_3KLg<3G#i{_d=XW1J+$EBygve^`5NZ+oIkbG_nm9!E-l>R6(Mlw?rH`ue37 zeS!6nE03+Nows^I$rSHbJ#?4>Wu^b;EVEwaIrp|Xs@lwUL2nwV8ov7Pj7<|o{TYzY z@BbNg?K<+ak8(ZwP1##ZuB9RtAfEF3I9lvbwu5I$muJy1S8?MY{qJ*Aqxrvq>iXFk zz8G`y4J2(FDdz^Y!y@~YfqhkDN%?!b0$Yph$j8mDu3&E2mx6q8Hhrb4JsGrr>ZwIb z3vg7$4Yuw@LV`ph2XRd?(fI^~N_awY0mFVX_8#@|MYdw7=35>fp6gYrYh>V9d24GI z!!La9e5<~fA%~oi`v!xe=y7uQ9H^nUrgLv-0Zsv~+kLJJppBNf*RLVOOBWX&M~gGv zkS!R`>0A^5t{?xX($(wm4_bhV4h?4OFI_7fZXK-zR_*Wirj)>x%bun!-%Sw7foi78_5fi(z^7_iHtU7Hk<<2kbI)4u8pGuv5tt|A^rTWsAc+TVaAlMPHhJ_rk zGcwaf*wQ|m*`1x4nitwWH;FA@In0tju4}|e!gQ9|(K=}%|p<-tn(6y@pP@mDxx z1!v0zEpory8J1AuO?GYc&zclRn4UV88ZIDHkhXrJAl6xq7t`NYHQ2d1RQn!L(R()k z%y;oOlArmu+)AWlj*g1Z&)}hFW7KIxgzAP`aX}w+1-VH53X6PwVhbvQ`133SRKTA9 zbGOd-WP||>CMs%}FLSiVVRK&l)6LBLi}yt6jdBMEb(M6DPLVXuZ=#W>8or6yzi1Up zThNkXp*H74N~2~Ql%8ujZMJ@$g3L98E+dk~%Z#VS7e8Nd7N6D`c^PcVrTLE}8!O_hx4t|ffZKqRmom;~*`RsQ~ zR5#QHo)0#i7g!GFU3ybgF`hSN(9;m!uIy`H$XmmET&3;<1)=-jrTlz+QM*zlYy;Cvzi z=3UjT&iCkygJ-rQ8@7-pGR^HXAEE0Fg@+x{TY1RhW8{o9fe_D!*N0GUeGJ)rvx#;V zv`jkNsq>p&gWixZuWmOemhH)E|@myaPkYHUFsIP z^;vcHd737c>x2qifY@)3%WW{xFJF-Ww}<2Ze2(s2UO>iqQZ@Q z6BUJV@W-pGr7onNQAk;H4#I;BufyiHeRBG+i445-4>x+u_%Sk;m z*5r?#66L28hpcH4=9gMJNt@?btbmm))T)_KtFn|YeE7sDS=11N_=S{ZuF8l+0#s6_ zG1|3`HnWmgEf_}-sd)xF^!S^aPhMqHjI(b1;%mA|wsZ2>rV*Wd^hX1tzt!0=zAEKD zi9e!p)Lxrd6kjm9Pu45&Z@hC4P+P#BkG>1Xe)|64P5W|#1l+@6(rac?uod-F?G%Wt zvnYkZ*M_E;5UZvP7aL|+vx0nkFsf!cuRABa74Z_u-r>i(;LaU{Ekn+%5#@#55 zPbu`liV2APaFDLIb#OR_`fuhQH9Q_M5XXW-n^zFq{RRAbIpA)Hag;S^HSnirP)pA` z1!M8-{Je#T?orR(X3xN%)ExNQU?j2Hv1!14&4~@wHFv~&mF-2tUa+?XVcpc-nd+zF z{1O^7c}1CDM|!=FGI|9QGUtKfieiRfM>2o&8gsXawNqx(w{B&wrmNSvI}GQx?|~x# zet1U%_1otGoWj_D4Dgb#6Qubp zk@H}Tn}7DemZHlbcX$Ua@|p$d!k`8koUPy7%*IX}^{o%3-#)SyzU;--4(Zu>yxE1IUT~ zPA5-+g}Uci-B4MyOfd!x6Cok%M<&|To$U+?M9nyJ=14WzXuN)iYc1jx{dJ@LFE)l{ zmr}hCiaEDUFFts`tQOnl!g0OAqzpqb5JhMuH#Wzf^gOadK0QF%zStf^R;uvrYWh(t z0XuxpDOMekhaT6K`8OZ$DvGXr#8BnT={b?J6FyFF`mY=Q;j*T?l}-cuA|rC|p;+$C zkdj$O#t;ckCyXDuQDo*ZjO4)=Cx%tW2Dqyqt&yf#Z5z?$dz^pXlV{4$KI_I;{H%i5 z*^V%Re7fVLj_^C~zBFuWgZ8>J@o+2+Hjoq2Mr|Xu{cXBsg$MZ9O@eV$eqTAOl zLbsJNYNB*lYo6Q6=<#Xy7C7#Pltz{2O$Mj&hWF1Nrwwl+0V#AP%d}3*qUkV#7s%s5 zAttJc&$8{&D7NQD^8uae;fSqJ8C)6@k3I1bN+ZPD!N%XC8LZUM$;eEjIArSWDctP7 zh<7y7oHp&K98hw;V*QoMOd;mV=W%?-4hu2m&*||CT`w$jlox$a>b_7}y6kQ_o)$f4 zzN-mXx17{D-e106;yWI#4|_xLDpM(;0={}=e>t4`A=pxo%|mu5aPK+ERVu$)l8BSG zrcD$F#|umO=rZOk7f@aV{@P_KNzp_=HR@R|Wt8&{LX-vQ1CXT0cnTisx7k@LNffy& zjw#k%u+u@+s`rootek~d|GkjE1{R?8?JF&98(GW5^%|G}Omu!bA!q(7tvzPH&USA) zb3Y7OFyk#FYsDM<9a~Qi`+@07ZcHoAWgh(O!0U*$Ag3(j%` zN`9Lack6~%pd1S>>25Z+NC7KS0ZIG&`=0vi;IMg!F)#BX4El4oPBHgq99G$aLtUI&|_@(g&@hCRc!Jey}{18?nifuQgvx}rhL zvhYmfAT^m2k#hh^1-Ayt>ILtoN4bCiyH++H3$sp^KWK47KOPo(l;}i6NUZ4W7lN1R z&O^pErV-D)Qbb@iC`L4f_%7Ipj@na;h{4e@Yh`=A5e0!pR`9P9isqEx8;49KKK@2O z{JXp(pS4ce8RL=7kuS^+!`An_ZqpKD(HM{ zZtQKzYR>4&S6q||ijTJfXDCK7;VlC+3+xC9w$GoxL8B<8P>hV~-f6aX((<$Kz8cf; zU7`ywB}WwQXyy6g{d@syO<~Ek+}kS9rA?UU&fr8IX`&d__o0-I4mVMjM#8xe2lsyR zvXey?1c$HAN=2cr0_$%a{7?fnmhUe?kB2(kge016ayRyS2E4^N_jZxUYiq~y-6#JQ z)POLL&h;vT99GsnJ|14Fy#u|C`KF5SckwUP*(R45wwou_{sz6)Fply-jy$~5|r%yrLLbbT&Z47>2jFKZW; zhTF7+diX=O2>j~hEE@t?b+SNcaC42&L#bJp0KVn z63KOT_a50e`wGO%uLG~_Yv8)gJ4iNn4Yq$ttGIU0%hTlP$1JM`xMD7)ob3R zM^5-G@$)ACjgdYHNQZ39CsRb#Whq#6D@>UT*W8WN{F5F;J9tBH4bJQQW_Y`Z%GcH1 z4_I`Gc&_`FFZDs9^<);Wh4fYvr>MUbg&ri}3m6OWf9V)cQUEo`7~BO6fDIq#8#?zX z4mTdUI#`J0D&2%m&on(xb(euyH^(cIkuEESPfm(QXz3lf@(<5UBSI_W{_+G{ZPLH| z=|WR2!sJlddWoIJPqFrYAKaKRS>mI{V=}IO(sDM(-$%)gxKmJwujoA*>8JHhtT8&&L0z@=>`E!tP6iBHyu2QpJ^ z>r6p-Sk&UqP3PTk2&Lgc?4_U9vJAI~S^&AMiwoaKm4i>k<8J5Ff z8FOb(cFD;yiD+8cBESH9mjWD#*MF6)S^EDyth-zhaqvA|_|C7*BlQYIuw2gPH3TSf z&G16qKc$x>orvibpX2jeY8xUq=xa=&k3$0p=xcwKv86EQcwO+rM$M(gW<3on+y>bm z*Ox&v9eA>Ws5VmlkJkZQ+FtnKnb>xXq6KM2`XyZvr8tC}o=}hHqHg0Q-HR6*vhG3I zr*=3L-EJAWZ%hk5G7Vbww}fOu=_^y@*gSB;wNuA?27N;~xF>W<64jDa&rthUjzmm( zGL@@llFUQj^-KrsOk}T}?VUYduKkDP9P__yu_rL8nY5`-=u{;`OgJEKQT$!tf6ATS zDITC#avQ(ONfRQYSh?p}2WvHoc@rehn>b_Vry2 z1n=ZJiEQEzm?H{`SmgXK!4xTW(fjMp9Eo{pzlZOP$MoT)HY*W11*NmMw=B?5%~|Gb zRXGHpg5Mh&OUGInTR^&QtndNvrR2O2+GG%|^yQ_J3~x(}1o%PYhu zc$}PO8+z-M+3@M23!x&K?|x&4X4p5#E*Tm{uao_EwHJ#PC)3$JUr}w)tG%;Xx}#5* z%GXF^_ijeyjQo%h>M-+}Vk@6no~1#v#^=b|$x23X!09*_|GI^?-(=8@heam;{ga9? z8NIu1$9sWY+buoEA)FpHQgd7Bysx{O`6UZHiF`X9bZzt_p~~Wmacv6_e#lQuc+rtj zD~E`*cGQSG{I2uJc_Xe8J*rxy)VjC4Xe#bgnk~|akTL%A4-8)+Nm$|d1cFmRUm}T` zYfIK_Iit6iP#mqI&24NF5AUiES5W=8L$$|Bg)Yx)P8%LqO0TCMj~|m2wK>xjy>>26 zJ8v_WW1C_M7+cSOD0Dxf`Um>=L^h;coAf!iy=R*J)7A^|9N2=SF>A6mbhyN~U%b?_ zG1RS2qJ;^~Uakm7#loBpbS-~c$!k@ZFOlr}lw$-PkQ>bV`}$7!VohfFcwF)c@vTZd z^oGuMb@n^X!V`0^Xm}~xBvo9QB9z;W@pqcH(i2V-%hDIIKIL5Mu%ae zscZ$x;GGR#tvL^Wr|$+HA9{`t?|(i9{3Pp?)zf zo#%GG_j8uotb~hRI}+U|ztq4%J9>DIR@y)ViN+a9+RGiCYr9pYN=(P;PVvs_N%!Z7 z2zjq>1Rf;pmy0f}5{gY--~HFs*}WQ&phyeMF-wS@DCr`IooN1q4}ZcJ(paCbb{<+V z$YPO|xFfZMcW7b>86&?;gz0_q=Y@B`&%$xd7^*Ef_&1@3z4`8(Ez>PKn3V$;HvDf` z!ttb(HJ_)SsqVbIzg#!QXXKin>%ETP5|#@x3w#ry+9*+0MEN|9R`#j6T{#w1Z#ju~ zRVi}r|N7_1!m&(txjFo}CVYbN1-x`TapGw|_gos~5;-h~W8bc5 zvCe>^6p{Zuguwr7`N1Eh5RvZ+hSQn(+vEj_jj5gqw4q4Xbmf#=CD6q&E0(t+A2I?9 z+@lI{Wt5m>0>XRs-=tL-uw4Q-ePjJtw5 zHL8HFxm@5KDt*_?uFBUKI@vM+7E3X|{_BqP>EBTQJmP;hMer&II^=PS28Bb+H!+iD zMsIANL}TrVf5sr|dlFF}g#MP**^c8d!lyY@VNJEQktuR4oEX)M#}Lg59pO?4gKey! zKgcz{gUGyZ7?@3c`=mrpUNoxu9{F^~+RWHbQehgTj6Z5(*bu%0qdu}d$|GBq;kTidvEXN9&ZCeVBN8xxmS1>Z3rjwKd^Lyai+`H!cNu$ zb{$mlpGIzesd=1x{BrFZ(vb3a({sa?4&CzIEMp6zL2xabNioKji3w|;!fMnpO-A*r zn-C0i!pV7-RGf>~-OST?kFHHZRIM^9Y#%5{klx5{o>1W%v>L1HZ!*fMzO8@HX^wl` zN?9cPr|aX=_E^Bu&orMoUxE~^L6=`IXt&^Gx$%MMYDnK9;tWTrVqKO-$cc-LyjC}? z1GMk?R4bjNw5*6WmqwnV`fT>)r}Z)wKPxaaY^j-U8vGDmo06~+=Zr7jT9fcRargI* z0ZLqrDJ5GbLm;Ln*C`a2azZCb!>N1ALK3@NvFFS_H4-rQu*}qr)msN>hQdNM(7Fq_916%P?LJ!oBWZB9o7r~v z0Zt6yv#0YvIech!5HCX)d7Oi)ko1Fj)ep}*W6HL3#)h4w8liLZf3aS6%GkMOpI*4= zCBOH*2vpP~6L3Y^%SmQ8qF7~~R!#e!n3AZo!%76aizKp?O0+WtK3MI;W$Z9p4iAoh zm-axcn<8Sx^Dz#D`PP^Xy|&_*|rY^n|}+I2w8{@)8e@BhfT z70=DJRq-W0S*vYiekvRkb&!xKZZ0srx%tjd;@8HStD=X#ji~~ zEdDqi{~}>VAEg$zh83RvkO*Z>1!M-%6>uOIFz;LaNfLSeCEy}H_9(OG9Id&znQ27P z$klb$sQp=-nOa5AdR?SM4VUgn@L>bwpZY-7G<)^okDy*p{kTo8?^n>OzqrI%w?tG_ zEcM;ry-b_XbXu&c%gWxAm6gyZi;0c-estTHHg5T#CF_DqTaLgm#DIWE`^_`v`-$X* z(CZgde(vb)+;zTrU*#(6 z*y<_7A%%XZ=~v z)SxIxWkb*pgmd~>Y$%_+vKWvq=!|ipY>m~C^6m+ef->u&<~jiX1N$e% z*Tq*?4!&8DL@l1R9zR@p;6#tdY=gMC57!RV=1-wQr*2?RlFDYd0eGW;uA^1S$Des3 zNA>WGh}Cv_|FX5QL#|~y{4aG?Vycw=8XDy{B2~fMGL4PcdKMDQkV>0=7q&%Xj!bhp zgomvhh19!osz*B5ZU%#)PbAITwItd#>#nU9kq3!~;TnJX*Q(At-aRw_{xEm=)tXoi zH#*R>)DnM0hmX9@OsH*3FXjmO?L6$rR|32nhnMLJ3}8s2Zq(J$CBpOVDIkvptv<84 zhXQ$TRu1L#?!}};-+vla1xagr8)<{S5Z^7ld^dg5Xq8~rUls8`?EdpckN)2q{c8@~ zTVDe`!7H|LYxtdhQZH()CjQfp*Ow{gpUbeC++^0s;}X#K>xy)EIO(Ec%AeFIjWt~R zMi3~zlNV!Ib{mfPln>1`T6C3r?i`4K>A2(h2=*=NP^BipP?jUSSg;Pl&6cl$CQy)U z0j?xK*tcQ!-VQU9>=nvA<;1o3DS(ouj3%e1=-`n|*E4z^Tu{a&tS6T8i|}Lkg@s!q zWheu1Epfbp)r=It~$#owT8Y}NgZ47)5Px@Rp^ zH8cE=5AxlVsP80sEZxKvDyXM+SNwragTAa00q>R#e94?jaxq}*7K4V1d$6xPGawr{UxBkFI3PMqU>DZ=16bly`0^uhAg1~P?j6{IUJ3!_9!0%gC0`4Utv&uL7DxF~7ku#evUb^rf>=i4 z4tW(m5T>bRwvrrt6_7B_WHmUd{+_rq)-vf$!k)d!RnYl1)q6+{|9Nr3-rKr`?;qM- z_v97#-$g`^1V5Qb6#9+KL!c7#)(H8feNHHXM(PNWy0s}`EL9R(9KXGs0A#aiaZVV! z-iZTKh%KIo*OlmVW+a}1=Z+aC1Fl!{1oat(CXKO!Ja2NsI}&kLzRA&F3bsCR)*1S) zOiIZQp9~;2!}EDe3>v>!$wis?T#X*kn%XCHvT#pDW?JDK@hPI%6DqF@P{q_=d??}i zrp9ut{kxBR(j01=CC5WsVJ7sYXo(*+Sg2zF&QE7{l;Cu<ITl zi`PcH4d~tQ35X0nN#`Az`9@|+a&}8{y9-wERNJ0)#){W*6HI4Fkn*%rHR9qVh45lM}N={Xc|sM!1hrpx*ofQ;E>@HSWB-o|a*L`0lfqGiT%_dB-iCotlODgz;b?F(;nm6`vb z%BBCefiIlincQ)Ws8_Q#9&Lp2CH6M`s+Rq+Yzi8S{Nud()z=SKOPE#|-=q)aRu;?! zKRJ2R|JcS$^gsCW{Th<^V-AWCcYy;|-j!`$>*&BL1KLMZZDI*uEiK=mrpv=wQUMN1 zzi{RdSR!}aI@I09+sj|QR65b$PWlI?01SjQp55sAPh^AN+BQU~Dy~FQdtFU!3kSIF zz9s(cle3Y@V+{;j9Ao1w)V3JlXY;!Vl(wu9uN9OtCDT5M+Qc4mlpS)n@Q?B0`7`)M zhpgxib}E16=r?J@eZ7bru?EL-8P=TGrE8%?+dX6v9F~fai--C?CE?#LJle*7(e=z? z*>Z0-&`KalV_H_}2`V?aO{p%}IHefmC~)+{;84_h{!RO;B$5xuNIxa?bGq1bG4Sch zBUb@momJt?N3>~IU}x_?DK z&9tJWNdSuGyKZxf#A;7^+c_vXDY1kx3}%Gx$1qq@*kOlgyWUa#@Db7+|H)Fj3dWVbN7xP-Z~6 zljht5wN%^aE-$Km*_87^{rQCPKO$|En|?~9w!8?T#OkA;ssTa1ThWeqhpf0A;7EYD zZF%|09#F$N`wncuo=UD`p#)LGt}Y8e6=0w5KZj1$|2<@{Y{leoH|L(rbwg*#mB+pa_<_oVz-&#! zF)>Hd7CNE$0F?+vdTxH)cBdWqA<-8TcjHF}96{(06a^u&rejh`aFLlJ-`;eZRnkmm zDXY6*V8&=C8U4HqX@=9sp)5%0iP5yNSamP7_}4F%1foc1xN|0Y_<7k)Iynxt9Wj6vjm7}x~SV}AK#ONV!??A zi5OK!18uwFbnFrw`C-AKujX0$h#WPn`%A=_i4KF&P02Nocs`#_Hen~m4|`21dVd)e zI=_5J8HZUn1XtZ^eEj9SV}1yZE1-i59+sf{`&WRMGx|FM{Ahny0J4}|GtZD-Yi)2D z*7RJKLCvU1n@LyoKUiwww2T?_^tl2g7(@4$#<;ZxH|%F+nQ@i_Cr|YHKmtAiv`3~M z4mJ}|HETs&hH4I!9Ul#?QZC^712#EJNbER9eSYN7^}suMp0C`4PYLx!QW@S*C~NwU zQ{wP4MuIDCL{m!ry6)`t2Wbg?O{=PJ72F_t1Go@n)&;Q<4fw&JSkIB214b1WeRa7pgKv0}n}$cFjl$Z$Cl3FAX+160RD}C>9u=kZzhMn=3R&z%7eXByq<0A6a~ zjA2(VWk%+LD5~S+>pSAeXXF7#3VIg{z&JwW^?FqWy3Q(A?yLqYKoeOxV{>CHPKkZ_ zTv;kx?R6Xj_md|TFAFDFImm`O&9f(TC(U2#Ja?>Y!J+r$cVS%lh)|fS$$-GfLLqzW z?Zk8-JS2_rteMZ%_78(*D)QD9Zvj3zA~TJ<()q>l5_)B-+-P8^Druz5aLf_fPDRcL zGUs)5?F!O`zKA=?%fW;eFF9U$IzoX!%3wwLd|6WlNlTqF6h5rCTo$5P4c*Bk3F?l= zE;120y-D)K9GQwSXJzhPP63r>Qg?UGONeX;{s40Nl6WZ~bt0#eg=)3WQCgje2+m4E z+z^ifrLS|FWfwKU5G___bw!Ko{OX3E4!{kgq_{y@Z})gA)KX`h>xHCpjYIhJH$MCK zNU2!iFb-?2k@F#0TB-rw1reM5>5uV>tQ>_hoBqC4j@w%)EgNvu13gIXY8bx6yV7Z6 z0B_K%2C)bEl7?1Ft`tMmKZ>E_(HtHJBGRW^dX`9|BCgT}Tg8YGE2Gaxg%WH<=?>qo zeF!~3ox>wkqT6!)?qvJ+bA$^fN>@@G2#pUboEk8ctlAjsTlF(RKWP=&rqwFSd|@M( zybg%mYG7K)o{v6PJh<a!xp8O79n4Ox{tLBZrp)(~pCMHn;L*V4-z^dX@yq`{@|0X7L>C7QH>8$UwC znk0X;)oUE-qV@hU9eMZGGZ&PUlP4k0XmMMLKj3|hdBi)S2Xh5RN5N;!mkDR;J#T(l zprpL&s4hg%7h_{h|H728W3*z}UuGunJ>Wd2XI1JW4omqNm;S0b+bEo;47U$2X=Vm4`s;%z0!7PI+CU`*hY15h_Q99Z=HEPVCu`jL6X$_hlWS~}utLnT;>pUlL>~}q% zkVC6-1|Z77!S>4y3l3wchepPJ{W{@GM~mhmqRnzD!Q`MizkkW$Hg5Y@&;YoPl2oH4 zO|x9&87%oUhfGt=QH#0$R2MMHiI!I7m&3q{3PL8#)52yHUA#<%q+F#5MxQp(23498 z|5ryB`d>LkMT1**Ct;G4|1g>*Pmf4|^SRg_-L6Mlc)s0_ZxSTrygHv;ETg=hsr$%S zJa-wfP_77#Wv(>-i0otVfn>F}tt)?7tIYM_#J^Z;ELG_7yM8kdZ>zUg>UnSkxW*Dj znw#h}(1K$8CUDFFJTc>@ZXPIjnrokISCIv-{|8F90;o%Xk_tG+s!|(GQ{y`GE+p}R zW5I8tXIAy@=H}!jv+b-hB|YE}2GeMQ1a_H#_P|7agn+36*(6kB!Y3)3R`XUAlJ&1J z5JV83d-Amyh6cB&uTmebR_dkA!$Vg1w9pp(;f~ z48Yg*wILIALGc=0KmVRi7n)tBN)PffZI{PNp!@E;xAA>eT98k|sHdM_mt>R=M+0H| zfzI?TuSas4OPS^jWwO-KU)MBI>fD#Z&8`8e3oJxzx{#>`Sc0aLllmrn0D_Swa)|mI z(frQr;?apE?6q$)WjL4p$sZLg+)^=~Wjw7GXI5ib871#kyKI-Vw8qcE=i!ClnRGGXy;jT)e#@znN1#&tPtpdsHUT<|2lU&d!jzxui|&@hYk6 zx~8VSuG`yaOYYa|fd(z3z%P9fd3mbAJbq~_-x)zul^H#dB6R7s6EoK3f;R0s>B2xz zPo{F7WZ}dzL>!9(CPT+;m=e+{H&iY`DzrO}{>IRUviQ>Sh5hM2+Z?$H+BK=RvF?nn z?^L{zTdliHn)I$X^9u49Wd*WXb$s{*#cGz}XIF7R`svvCu4TG#659p~rgIaN-?#)W z9&SHn|3iHLe-EH>RNt>Am<}_Mt~$4hzIGDdCkn#Fxy;F+l8F?(N@h{s00!qldN%Rq zQAHLn}m#%OY5C-$x64 zaQ6yAZeH(upq5yDF|j!+=qgA-I7$F09j$Jsq&iIHZVJ47JenE`{&QZt?OEEtzF9>j ziM83(8mQ1!{s_EobJCpivtGpGi7|i5y7;y#H5m-Ll>Lo3w+`nHv9D1IU{{9_-`BgH z{|Avc`@fP>XcLNQ(~uf`6FSin8R2J(Y)Y(a%FQ#uzspQkRyp%V0R&yM$2JrAjT~w> z<{-!UKM+6J`+rbGq9Zk=T{fVO3{=oFeo#l`LiBK1OtA6c zL4li9MUOj^r$vR2LDadQE4%0=!x*cWxWaY(o{^ZB*qOkR^Yg7TV67JHT8(li=4>8H z7S3NyUt3O-^Lt2?b?K({SAVM9{4U)5u4G@~OuhM9Da-vUJ>q>NP2ZYL?yIzzWvU77 zv=0$n*sGT#bPw9=zT+N~unNZ>JDzvqq|_+{FJJQdwtS<@Fd?XsK7wke;47oul@3U3 z$;HK%D!dfV7#^;(Gf^@nYvZ#wGtGe1BF;DTeVlkZ(9V&zH ztjsh=?)SD0VcihQgtmnv?bMVY#~yJx-X6vQoZ(IZ0TDn{`9~iHV(QC7swb&O7DN%Q zGj~K8^UjW*V>>%vfGYqJ3KUvUIlFyu(jLTB0Rk& zH^nSGeg*(Z-JY4KIFv>3j|WP`g%&i$ZR)MI6T|1RA;>8e+>)5jDGU14-ZLtQOOdE+ zk9$~_xXpRM{mCjeap5s4I;MX?JGyZ4U`i>1zVoV8ca&Msoh zD399mnAfFE1Hi0bC?0*Jm!|>mZ|kP1>i?@m6aK$@M-@zK7rnS~!lScJf$+*7?ubp! zAjwXG#=YP^2sIlsXn5f7+Pq6)XzQ$iX!52(LwQ_JG8z+TzI>HbV3Aq7ne-a%BdDy1 zSWi@A)o=e{Gzo`Q?J^dpL5aW#1Dug_UZ@Yx%66Lp_hV3yDPX>nty2T0Vm%-V&Ws%n@cZzp8uD?TSGBG8!A@rKGGC`+_Hi*B~ZQWksFw@O!^A}PWElPtaD!R2)# zyegcv@+3lNXpB`8kR8j+%MZ)-m^&PpTZYse!ENik9d~Kd&78`^;J7aAU!=bz37h<8 z;Yc)lGcKE~w`8eD3f#H2Ryd%WH2^1>!fkt39_ak65Uvs0#fb zo^f9@&Ee;MOuf(gU3NQvh&VkbRDFt5GdU+L7$85R&O6+GH)+|QM;KhfC}+5fon$Uk zx@Yp2pC`$zDn)Lw#FURzt!jpNeOXu2rsjE>4H)iKHW8aTR-f3!t73+{DsO-PNdYtp zG8IP(*VmT-W$xbpC=5T*1L0l zqFGYm?WC3ocj=99X#BBtPG-CM6%n6@p__%QO>Zp+(dGw_Z*;}*L^^~6O;wN0i|e=w zeGrHQHm;HYRU7<#*C(=3JI|*46cs15SW>_@+rGy&mdJj2edUO_7=Ls#V%TiNxoHi! z%D{haM)uruv30w~0u2s0{Ji)Xo>kbWY{M?eY8UcUeSYr}3rR@O;NkkzbcFZH4?By+ zC>hdL!j$I1%I{bx{)OJINf_fPgsJk}*^ZfSDFhm)_1ueuy zB_v50f92csJuUN7c2k4R0L8`iPj^H^eK&-kO=j&X&nKoQAh#=Pml4J$8D%hmsKi~@ zI=YO*l7r24NSQL6Z3+E#?K*2ri<=Pw9_?+D1~EgotAJn*)}D|`j=h~gix@C~6Pvz@ zWQ%HRdf>*JDC7u0+N`u4)BGSN)yfkP6~_`Wab)bjqt|?>oREj+@Rl0UIO!2u?l`{M zST*)&J3pUmX%gjGkN}N@1aqY|&U2JaWXb>8Z zlY29qy8)|`x=y+DW0ndHy}Mez;Q)bpP@V;CDcu%(j-}a+t?|r%?b|^UM82GW2mXhP z*!vowNKOR{^}9Rh17@t~@srdVz2p5cEB8Sg7TjunN|~RDxYiQ+AkNA{IGXnIUb2e) zG~oG!+^iF82U`qzZ)wNsWV;dHd>+ea+|hItZ_DgryI9K%YG>cV+z!X-9KNY_M7IY3Aw$33RGYkTHP3pD}KtTC!jqL&VzuT0cCD2~( zEKt!P$i3TOXmeVJzjh z>>5aE%mBJQNlbIC`**Ts$L#ur;)NadT%OOxBi%fU$Lc}&yGYt&93ChQ`ALX zvee5bZYNMcWIXL6#XE{*kK|iX@pIe~{SQy%0|h(;Pj58H%vwjT>%XMQI$jGk$%IfE zoVzU{xw({yA#v)+qN_`jYJCavWxsdHhqnC)>nE1$ajnoJ7spF@qEkT|IrG|@w5Unn z>?+=iw0hc`-Vm2o#h(iI+0Si`ieL!teD(1p=~{gg-Eek4gB#L@ES^sR9GzUdq>=BY z<0{!0+h!8ptmoB+<>=`<0`%x3oBEVpZeaL0c}@M=t^P^=o&Gz0vK*fSIuIh4*G@UR z^=od1fMMjvT{o7lw$`p;a584YqCKZtt{RCxewH@Fj+=n~Zp}O{(%2_Ur1J#+~aXgJE6$ zL4N-kjMM)2246ru)oW0r3CXs0UAKo_+<5C?2{h`8({_DcO>x(Yzx?IY@cJ-1en+mb zQjIvdG6ojFJ`DBq7emla_|ffa<~$r`2i-Ng&+W301-Y&JT+iKwB?u@C^gPr&uqgRm zk9MwuX!G)IVL%iJ-rYI?di7=y)y;F!8;AP^VpGthi)2Z~0LeVf>xsh~d$3R?^7vQL z5((IPyvQ{o8kJwlt*+tW?!JvHVB|8_{^~t0f50^6J?320Y%~5wXp6(HaIc_5W~XAl)Q))?TprWX%uPj*IQURc%3pXUI?*FP zUYZk57-z9~t$53-plyosTkIq(yRrAY2$h3*s#u+jA~gCH>zDr@S7#MfXS6NpjRb;g zfZ!y!yE}p47Tn!^<4$mgjk~)A2*D+|YjAhB;NE}Ey{AWye&Y!qSY!Qb)~x!fkX~By zeULQ-%nnuh;T`c{>xojmWe0u=F&WgUhjoL4CyP?ROm<&MSk>`(WNm>bd`+Uq=B+M3 zln1WlP^9GyK!jsKLv|7ze^}9}RO8-naxhE)n0~u5eE#q+Uqc6g$XgPfx@)u79TYB; zjpOAO4p8b_UhY2OwLX%u{%m&C0`#6MCyMKsr;Jd14TT5H)CtbRkkeBnAgeC;);uu< zsGbH zhcN<`jDQjaEWJ$^MXco-^xi4z8Q^gIE8bc!sg{{@p%$1-2dZkyta(@MM1WN9lmyQI zc>dkR#k5Lpo?g1|g8J$Mf@7R+-tQ&KlTr+$z<}}OlALnm8)W#*5y>&El?s$sIXF#u zItfHF2E&Qa0w{Qjy|qvm6^|sY7z{OD;7$zuayqZJ{Rpgya2a)SsS!K2`8pGpnfNDG zz3wK1_ofDj_mOhm_&YDaLSmZ90B9eshwScbb(`t=L1;j|@7h+_%fCLmJ!J2tW!o2iNxwnP&>BmP|U?eMif z$RDfr7jvAmLMf1AU1I(Ko+t}sw-4EIN^(Ilu^ZtNGV50p36F8HAlHhRl_`$QCQMufoysW!f zzqu_?IbzX9ME6NeZ%zv^^ItAek%-as0cFtu$jRnc?(*s6u?tH-bI#a(_rB0T>{}Jd zHsCuirXS(9Q&qj(c=d5*(l>0@0T$*>4wukRUS4?L!0taL1_U3Ka3bF&3%8hsN09(r}d8+5bkN5f1%kA#}PI8#*f9MZ-QyNujpg%6FEXDGpSu7&IPPqPd zaH>Yt6-vwnVr8(9nxKE{=1K8%F@KZsXIe(z!^FOO>3EJ|?Y@|6Gjp4-C%bN^;l@3Zg!YnjNspqqyI@zO%R&jlg{4q#rQ0*;Oa=v}K z$i59h@=%6ertGQw=_glm3AR8}O!_N-?z935$u|dDl_CdPA~zJ_#6czg2mLRIwvB(i z;`fSVNYR?PBK}y?MSUkEz?Uj&%bw%i7HLiTBW%#X7R1Q0106wdC*-Rh7a4k`yxFO7 zXUEq5J+jx-IOfX+6VMFUy}5M>ffSS(#b2UNW(8Ikrb_NhoY@=fdMECDd2VAhh$4?k zl%?}y$UgFYAHR<`ZuTZn35ziCjhkfKo5z1(nwLCK`3v!C(L)k}hL-W-ve3>0?wL{4 z?%e13e+_#tpg+6WcTc*UoZfGzK!?}ay3od1y8tjB&hY|`O6Db4#WOqwoBoU5G1KY3 zHSnm}K6@Wu_1|9J67=sMa*R2z82TSyd=uN&o3AiIZhD?mY}=^B{7tc72WR)e8lRn< zS{+7@vt#{jT;EOeLuXzaTic=rR&bF*q}7@lTNMK9o$2X6vr_U%9PH(lD>vTcsZ07q ziuBtMUjN$G;<Wt?Hmk2>?bL~)Q$DP;1WBtTmG$7z}H9Dhk_0qY2 z=kPGB3a}Oc2=rH>zZ1eVz|Z%ALXV+S!DgHptT|(Vh40RH{qFKwy>nQ-^Y4dFO|_*A z&#ao8m}_N1$_cnRxC(kx&HSXI^0A%_t$05Poaw%Kv68B5UK)~kdKl$=aw4{Ng)`eT zgR_woAC?+r+Fx(qN5km+Z&g@N@)d+l+M&IUS^VAJHI9eiyJTgl(?Y^Dm_}(*0-)32 z)19-G@)gXMa70wAWzn<1P09U)6xnXD28?ey)!36C72|o%zw7$H$I8z`Y`XjI0@%V?T>2@DS*Xk_w(w+FnTF?*;4ikUm`qVxa;F+~Aq1CrYluRz`}H$ea9bu54bbcy|E=>m#kxdk$qv&If@Jb$}S0vn&$ zl{QgZdSJ+4Aw<=vn$u}+L81n{hgq7Ti#Fp|OlzAdLeGW~bq41faV_Qd4Y9t73H5AI zf&bVT`&c>mZ{o-J`s94-mj4)*O#T~Ci9Y<(3WKY4r&D^PLi;nV z4t9T+kiAGw%c>%H{mUV2+YqPXroALeo}WNla=jG_^VeI!hc#pqUU!}$Z+@YN@u;D2 zdOgs@b~H)^C=p;u0X5HU&iknK4^dp5ee>?V*Ykqit!p=OO5e3`C;&t+C(m~G?Yr!! z$N9ze7|9tAwa(rXt$iDA7c^j3+?D$jXUL~6?)qpV{ z&${#|-L7P3D_Bl}QESAh85q<}s|TwQ;&xD*qh6FBN-2gcjAeCa#07qFe_J~l%}DqV z-;4v=pLDc&C*jGt8iMKgR^D*=W#_C9#r1@T=-eH;aC(V8Jz&UN33@J_(o*Y4UA5fA zWy)K&dMwa;_wb(7Hid^wEFI+NE02=S?5iMlu{qGAg*FJ|Py%Jwwz5u8J48Y8QS24j ziPninJp5F$6Dl8@JKm8Z?##}rC8NhR(i$|@(1-6XWD`x&UBIQglS8EXNaMLyY+o1Wlb>@t^W=O^4?CbUoX% z75MQ2f#l!=jx{i4mTT2(jXDYgp%ZJgrS{M5RKrybi9{^^KNC$C|D(Kp{x6rn0^kxn zby7cWaP>=9yziPAL2Z~*LM62RLjciUTzS;BefEaEu>`+4#V_34*TOlVyNWMp7X4{v z@ZyiAbVV2~0_Y_%07~tV%x=XS)>;;H9?|DL9x8Y((6%pd4k(Y8S3-B-=is;7iOci1 zTA>h@WEa)Tq#FJ{w3iDswv6%nm3_gUos+2g88)0Np1|M!=Pw=S+W=Vw#>>kqN}|9) zF1@Em%y-ZHl`Iq<9>{e!`VF{Uc=>MJ)z#J_xQD+`30)$*zAC)J0)mmy1^gTOx%+(U zWJ{Ok$mS*#z)0{*pYYzB*@UF`8^^QY?!-&5qZUSmgTv#;nnV(nop~vsST>-=Y~QiB zUf+>hUkIz@DW&nHs6vOZx$<^~Z*q%stBn8UZ1Li;N5<7059##pqD%`Vo(hlj#xQw= zz11HVls*b95j6?EQUXK&(UG?a?U-aGDY8um-R|_01X#mZk@tl~4n!<{=WfQr%9596 z|0JcHsc7k~lZi5f2#L~px}p}11v^gQ7Iiw6U-HwI4NaIUB(s5sb0U+lFetBa^)vs**I~okca?meB(~8em0zhS zE)h&u#JosT(){GmG`Tb$kI5we&@eGCGA~=g#+wBJ)H`N;6!()U0swT~t{3`*hWcYp zVzJdF=B7NKlVjGh4}i)5qA1_m+Zg}t0)worQ8!DnPcP-8p52LuH)(H*BJ1hKTzBwx$tRNs%?Y);YjU8NEeH@BeK6aa?dG|d|xZy9X zfQs+*pLK$7^*)B7@{J=-wHMnp9Dr%`)gbI&<+ov_6a@ot@77R{#3=Lz`N5dYgrCQv zBEx-tTWmpGH{S6P_>X8&_uutf|L@;Wpz#)wMDmehIa6UpiUBj~F;biKF-|w$A2pm%^;ZP@VL2uVsdz>J*vEUn6)$=KpaR~`<3)$) zw7L@MTD&gSJR{znubZ3if6B>W0WK|~Rp6PYeZ|_)YD*j_Mp=+BykH=b&=-&?h zzpNqhC4ptMUqYgh;7q@}vUXu}{h4B?w+vz1_1WvrUfXB2bsXmvovUN`vHpoEWhZ*L zY?83|D1WM3R-+A84}#G|8u&iGs2b0*A&F%)Aj$P!838R!6s^X+iZQ@@-$iYcHS5hW}a7;s4)f#Nwz7T4Wu)OP;Y8 zAyHv826x#{-S1rhjbbS`c&wu7jB_QgV2cY1s|eq#{n{;MNZG}zbN50S94w7IJ>qn* z$zT6QMR>k-#yBB(ML(|j+MDwn3+Qj_F+eQdrholyC})GC#slU2t*fyhaqD5fV;tDK z95oz2r@TG*^&jiK!TskvdT%xQCUA8=Fxc4G?&#{7t zs6YtzUjOy4{$6Cx8}#~fhkf1*jmJqi)k3>-8W6tu2ay}ug}Ajptpa1n)m&po(pVM4 z`PTD>p#J0Ox|y3>N@LsUDbS%9D3ihjep?gJ!3af=++OIa78%dV7~Bp1O$-11Qc|v# zhxhtZ%K21yYmAv;ZQ9RakjD>GFz0YwK_>q#1{x@(YiG|*4g%M-^ONyPihQ#>8L3M? zcPgMOvmjf=(r|5k#!u?bS5mIML zw>y}mF(Hp+aBJsYTcWBc-6g}I0Oj981^mzyuSyCMtXQ$(j~xDugnOIMDn@=i=BB=$ zDZWzVnzWid971e{}w zqRC)0?gOwB>*mJA{Yn$xuzcumgN-L&_!{*1oXBBeDDgZo9~WgtjHPpg_pyRln;(B_ zS|)V6?NSeax{4b-|B2^~iN&O>s)QphjT7Y3N$o6)nyH^kk(N9x6($r)#Z4~<`BQ)C zk)Rf&MN^}g8uoK_@)!+>k+i>}bLA)pn}qzyK??=mg#q7z`?`OQQ?<0l3?nukW>GS$_$%9PA(0*c+G z`zXB7wZQW$@J0ZB+xl;(S`*-PvNR9SIA142|81&OgE^A*=Dm=|aKXMO_RlDzPSYI2p+m3O$e zywg+Y9}sDY)gQ$x9E93t8sEY`#9{e^uZZCdvO9|%62{M> zz`1H^86DpHcξCE4Ed&AE3AdO4RZ1KipA5l!> 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 z zIvv--c~qJOBbDV}4R+>hhTd~M+qlafNj+>fRZVAPcK?JXm{0uR&-C6J9}fQcE1YTZ z=pt@E)iB|Hh^mEa^q=Xc0eKlIIRSUFrL*DyaO`JW&=9|8o3)m6j@It!x`s-&12_ut z?{$d=EO^TloN`=F?ghhFgZ!-c#tnq-S^S>sK_tHMgb%w31Xl1nXb-7$ROFI#Mz6iE zq4{#082j^$CqpE)A8X?l%!#y1EFV6@(;>+|pCe;SQu;c~imhjzznGOm-pUQ0I<`Gh zp&71cpjNZ8sV@Va;>^*86A5 z;m^y+;Z>p5GrP)u3s?TdV@$k7sB=to`M$xVsCetWO`sm6)e3!>kuj@Ti#}SxLNHw& zBK{d+MQKf+v`BQ$WRZsm&_cv(!Gj3v%TKO4GGcvpAKG^6>(xEO72Gcj z`9T|fxipwGr4Wbmrb(fhQ3#C63DkzSVcM44%Y2NtXc|I?=zeQD<|i{ijOmX`T@?NP zoH<^wA9*Q^gu#e07{eHy8Ð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∾5u1Q*3r6Mm12dtUv8)Q+iT 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 L8VXh5_n-a?*a^^y literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/18_qgc_radio.png b/docs/assets/flysky_a8s/18_qgc_radio.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8d3475ebe465c1c672ced6260c280bbc6ddf0f GIT binary patch literal 146870 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 literal 0 HcmV?d00001 diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index 193dcf1c..c7a5d484 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -11,6 +11,7 @@ * [Initial setup](setup.md) * [Sensor calibration](calibration.md) * [RC setup](radio.md) + * [Using FS-A8S](rc_flysky_a8s.md) * [Flight modes](modes.md) * [Power setup](power.md) * [Failsafe configuration](failsafe.md) diff --git a/docs/en/rc_flysky_a8s.md b/docs/en/rc_flysky_a8s.md new file mode 100644 index 00000000..3370f809 --- /dev/null +++ b/docs/en/rc_flysky_a8s.md @@ -0,0 +1,107 @@ +# Using Flysky FS-A8S + +The Flysky FS-A8S receiver is compatible with the Flysky FS-i6 and FS-i6x transmitters. The receiver can output both analog PPM and digital S.Bus/i-Bus signals to the flight controller. + +S.Bus is the preferred protocol for the receiver. + +## Making a cable + +> **Note** You don't need to follow these steps if you already have the right cable; read on to learn [how to bind your transmitter](#rc_bind). + +1. Gently remove the yellow wire from the receiver connector. Use sharp tweezers to lift up the plastic wire lock: + +

+ +2. [Pixracer only] Remove the green and brown wires from the 5-pin connector: + +
+ pixracer wire removal 1 + pixracer wire removal 2 +
+ +3. [COEX Pix only] Remove the green wire (or blue if the green one is not present) from the 4-pin connector: + +
+ coexpix wire removal 1 + coexpix wire removal 2 +
+ +4. Use side cutters to cut the Dupont connectors: + +
+ wire cutting + wire cuts +
+ +5. Strip and tin 5-7 mm of wire from each side: + + tinning prep + +6. Put heat shrinking tubes on the wires: + + shrink tubing + +7. Solder the following wires: + * black wire from the receiver connector to the black wire from the flight controller connector; + * red wire from the receiver connector to the red wire from the flight controller connector; + * white wire from the receiver connector to the white (if you're using Pixracer) or yellow (if you're using COEX Pix) wire from the flight controller connector: + + wire soldering + +8. Put the heat shrinking tubes on the solder joints and heat them: + + shrink tube heating + +9. Twist your new cable: + + twisted cables + +Connect your receiver to the RC IN port on your flight controller: + +
+ pixracer connection + coex pix connection +
+ +> **Hint** Double check that you're using the RC IN port on the COEX Pix: +coex pix pinout + +## Binding your transmitter {#rc_bind} + +Do the following to bind your transmitter to the FS-A8S receiver: + +1. Make sure your flight controller is powered off. +2. Hold the **BIND** button on the receiver: + + bind key + +3. Turn on the flight controller. The LED light on the receiver should blink fast, about 3 times per second. + + fast blink + +4. Hold the **BIND KEY** on your transmitter and power it on. You should see a message saying **RX Binding...** + + rx binding + +5. The LED light on the receiver should start blinking slowly, about once per second. + + slow blink + +6. Turn your transmitter off and on again. The LED light on the receiver should glow steadily. + + steady glow + +> **Note** This receiver does not send any telemetry data back to the transmitter. Your transmitter will not display any data like RSSI and drone battery level on its screen. In fact, there will be no indication that the transmitter is connected to the receiver. This is not a malfunction, the controls will still work. + +## Changing the receiver mode (S.Bus/i-Bus) + +Connect your flight controller to your computer and open QGroundControl. In it, open the Radio tab: + +![qgc radio pane](../assets/flysky_a8s/18_qgc_radio.png) + +If it shows zero channels under the transmitter image, hold the **BIND** key on the receiver for 2 seconds. You should then see 18 channels appear under the image: + +![qgc radio with channels](../assets/flysky_a8s/19_qgc_channels.png) diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index f6cf1405..c55bdf59 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -11,6 +11,7 @@ * [Первоначальная настройка](setup.md) * [Калибровка датчиков](calibration.md) * [Настройка пульта](radio.md) + * [Работа с FS-A8S](rc_flysky_a8s.md) * [Полетные режимы](modes.md) * [Настройка питания](power.md) * [Настройка failsafe](failsafe.md) diff --git a/docs/ru/rc_flysky_a8s.md b/docs/ru/rc_flysky_a8s.md new file mode 100644 index 00000000..99ebcfe8 --- /dev/null +++ b/docs/ru/rc_flysky_a8s.md @@ -0,0 +1,107 @@ +# Работа с приёмником Flysky FS-A8S + +Приёмник Flysky FS-A8S совместим с пультами Flysky FS-i6 и FS-i6x. Связь с полётным контроллером может происходить как с использованием аналогового протокола PPM, так и при помощи цифровых протоколов S.Bus/i-Bus. + +Для подключения к полётному контроллеру рекомендуется использовать протокол S.Bus. + +## Изготовление кабеля для подключения к полётному контроллеру + +> **Note** Если в вашем наборе уже есть кабель для подключения приёмника к полётному контроллеру, совместимому с вашим, переходите к [следующему этапу](#rc_bind). + +1. Аккуратно извлеките жёлтый провод из коннектора, идущего к приёмнику. Для того, чтобы вытащить провод, приподнимите острым пинцетом замок коннектора: + +
+ a8s wire removal 1 + a8s wire removal 2 +
+ +2. [При использовании полётного контроллера Pixracer] Извлеките 2 провода - зелёный и коричневый - из 5-пинового коннектора для полётного контроллера: + +
+ pixracer wire removal 1 + pixracer wire removal 2 +
+ +3. [При использовании полётного контроллера COEX Pix] Извлеките зелёный (или синий, в зависимости от комплектации) провод из 4-пинового коннектора для полётного контроллера: + +
+ coexpix wire removal 1 + coexpix wire removal 2 +
+ +4. С помощью бокорезов обрежьте концы кабелей с разъёмами Dupont (чёрными): + +
+ wire cutting + wire cuts +
+ +5. Зачистите и залудите 5-7 мм провода с каждой стороны: + + tinning prep + +6. Наденьте термоусадочные трубки на провода: + + shrink tubing + +7. Спаяйте провода по следующей схеме: + * чёрный провод приёмника с чёрным проводом кабеля полётного контроллера; + * красный провод приёмника с красным проводом кабеля полётного контроллера; + * белый провод приёмника с белым (при использовании Pixracer) или жёлтым (при использовании COEX Pix) проводом кабеля полётного контроллера: + + wire soldering + +8. Переместите термоусадочные трубки на места пайки и прогрейте их феном: + + shrink tube heating + +9. Скрутите готовые кабели: + + twisted cables + +С помощью изготовленного кабеля подключите приёмник к полётному контроллеру к порту RC IN: + +
+ pixracer connection + coex pix connection +
+ +> **Hint** Убедитесь, что провод, идущий в COEX Pix, подключен к порту RC IN: +coex pix pinout + +## Сопряжение приёмника с пультом {#rc_bind} + +Для сопряжения приёмника с пультом: + +1. Убедитесь, что полётный контроллер выключен. +2. Зажмите кнопку **BIND** на приёмнике: + + bind key + +3. Включите полётный контроллер. Светодиод на приёмнике должен замигать с высокой частотой. + + fast blink + +4. Зажмите клавишу **BIND KEY** на пульте и включите его. На пульте должно появиться сообщение **RX Binding...** + + rx binding + +5. Светодиод на приёмнике должен замигать с низкой частотой. + + slow blink + +6. Выключите и включите пульт. Светодиод на приёмнике должен светиться непрерывно. + + steady glow + +> **Note** Данный приёмник не передаёт телеметрию обратно на пульт. Это значит, что на экране пульта не будет отображаться информация об уровне сигнала и напряжении на приёмнике. Эта особенность приёмника не является неисправностью и не влияет на управление. + +## Выбор режима приёмника + +Откройте QGroundControl и подключите полётный контроллер к компьютеру. Откройте вкладку Radio: + +![qgc radio pane](../assets/flysky_a8s/18_qgc_radio.png) + +Если справа (под изображением пульта) не показано ни одного канала, зажмите кнопку **BIND** на приёмнике на 2 секунды. Должно появиться 18 каналов: + +![qgc radio with channels](../assets/flysky_a8s/19_qgc_channels.png) From c7828557cade80775c74415b637f44950e297891 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Sat, 16 May 2020 15:49:38 +0300 Subject: [PATCH 02/47] standalone_install: Fail on error --- builder/standalone-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/standalone-install.sh b/builder/standalone-install.sh index 9d9625c5..a10f65a5 100755 --- a/builder/standalone-install.sh +++ b/builder/standalone-install.sh @@ -1,7 +1,7 @@ #!/bin/bash # Perform a "standalone install" in a Docker container - +set -e # Step 1: Install pip apt update apt install -y curl From 22d5a356b6f43c7a37f6c8cec7b81fab2f54f0b2 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Thu, 19 Mar 2020 21:44:16 +0300 Subject: [PATCH 03/47] clover: Update ros3djs, THREE.js --- clover/www/js/ros3d.js | 59075 ++++++++++++++++++++++++++++++++--- clover/www/js/three.min.js | 1571 +- 2 files changed, 56357 insertions(+), 4289 deletions(-) diff --git a/clover/www/js/ros3d.js b/clover/www/js/ros3d.js index 2a607c25..ed82246b 100644 --- a/clover/www/js/ros3d.js +++ b/clover/www/js/ros3d.js @@ -1,52 +1,46023 @@ +var ROS3D = (function (exports,ROSLIB) { +'use strict'; + +// Polyfills + +if ( Number.EPSILON === undefined ) { + + Number.EPSILON = Math.pow( 2, - 52 ); + +} + +if ( Number.isInteger === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger + + Number.isInteger = function ( value ) { + + return typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value; + + }; + +} + +// + +if ( Math.sign === undefined ) { + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign + + Math.sign = function ( x ) { + + return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x; + + }; + +} + +if ( 'name' in Function.prototype === false ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + + Object.defineProperty( Function.prototype, 'name', { + + get: function () { + + return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ]; + + } + + } ); + +} + +if ( Object.assign === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + + ( function () { + + Object.assign = function ( target ) { + + if ( target === undefined || target === null ) { + + throw new TypeError( 'Cannot convert undefined or null to object' ); + + } + + var output = Object( target ); + + for ( var index = 1; index < arguments.length; index ++ ) { + + var source = arguments[ index ]; + + if ( source !== undefined && source !== null ) { + + for ( var nextKey in source ) { + + if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) { + + output[ nextKey ] = source[ nextKey ]; + + } + + } + + } + + } + + return output; + + }; + + } )(); + +} + /** - * @author Russell Toris - rctoris@wpi.edu - * @author David Gossow - dgossow@willowgarage.com + * https://github.com/mrdoob/eventdispatcher.js/ */ -var ROS3D = ROS3D || { - REVISION : '0.15.0' +function EventDispatcher() {} + +Object.assign( EventDispatcher.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + var listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return false; + + var listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + var index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + var array = listenerArray.slice( 0 ); + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + +} ); + +var REVISION = '89'; +var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 }; +var CullFaceNone = 0; +var CullFaceBack = 1; +var CullFaceFront = 2; +var CullFaceFrontBack = 3; +var FrontFaceDirectionCW = 0; +var FrontFaceDirectionCCW = 1; +var BasicShadowMap = 0; +var PCFShadowMap = 1; +var PCFSoftShadowMap = 2; +var FrontSide = 0; +var BackSide = 1; +var DoubleSide = 2; +var FlatShading = 1; +var SmoothShading = 2; +var NoColors = 0; +var FaceColors = 1; +var VertexColors = 2; +var NoBlending = 0; +var NormalBlending = 1; +var AdditiveBlending = 2; +var SubtractiveBlending = 3; +var MultiplyBlending = 4; +var CustomBlending = 5; +var AddEquation = 100; +var SubtractEquation = 101; +var ReverseSubtractEquation = 102; +var MinEquation = 103; +var MaxEquation = 104; +var ZeroFactor = 200; +var OneFactor = 201; +var SrcColorFactor = 202; +var OneMinusSrcColorFactor = 203; +var SrcAlphaFactor = 204; +var OneMinusSrcAlphaFactor = 205; +var DstAlphaFactor = 206; +var OneMinusDstAlphaFactor = 207; +var DstColorFactor = 208; +var OneMinusDstColorFactor = 209; +var SrcAlphaSaturateFactor = 210; +var NeverDepth = 0; +var AlwaysDepth = 1; +var LessDepth = 2; +var LessEqualDepth = 3; +var EqualDepth = 4; +var GreaterEqualDepth = 5; +var GreaterDepth = 6; +var NotEqualDepth = 7; +var MultiplyOperation = 0; +var MixOperation = 1; +var AddOperation = 2; +var NoToneMapping = 0; +var LinearToneMapping = 1; +var ReinhardToneMapping = 2; +var Uncharted2ToneMapping = 3; +var CineonToneMapping = 4; +var UVMapping = 300; +var CubeReflectionMapping = 301; +var CubeRefractionMapping = 302; +var EquirectangularReflectionMapping = 303; +var EquirectangularRefractionMapping = 304; +var SphericalReflectionMapping = 305; +var CubeUVReflectionMapping = 306; +var CubeUVRefractionMapping = 307; +var RepeatWrapping = 1000; +var ClampToEdgeWrapping = 1001; +var MirroredRepeatWrapping = 1002; +var NearestFilter = 1003; +var NearestMipMapNearestFilter = 1004; +var NearestMipMapLinearFilter = 1005; +var LinearFilter = 1006; +var LinearMipMapNearestFilter = 1007; +var LinearMipMapLinearFilter = 1008; +var UnsignedByteType = 1009; +var ByteType = 1010; +var ShortType = 1011; +var UnsignedShortType = 1012; +var IntType = 1013; +var UnsignedIntType = 1014; +var FloatType = 1015; +var HalfFloatType = 1016; +var UnsignedShort4444Type = 1017; +var UnsignedShort5551Type = 1018; +var UnsignedShort565Type = 1019; +var UnsignedInt248Type = 1020; +var AlphaFormat = 1021; +var RGBFormat = 1022; +var RGBAFormat = 1023; +var LuminanceFormat = 1024; +var LuminanceAlphaFormat = 1025; +var RGBEFormat = RGBAFormat; +var DepthFormat = 1026; +var DepthStencilFormat = 1027; +var RGB_S3TC_DXT1_Format = 2001; +var RGBA_S3TC_DXT1_Format = 2002; +var RGBA_S3TC_DXT3_Format = 2003; +var RGBA_S3TC_DXT5_Format = 2004; +var RGB_PVRTC_4BPPV1_Format = 2100; +var RGB_PVRTC_2BPPV1_Format = 2101; +var RGBA_PVRTC_4BPPV1_Format = 2102; +var RGBA_PVRTC_2BPPV1_Format = 2103; +var RGB_ETC1_Format = 2151; +var LoopOnce = 2200; +var LoopRepeat = 2201; +var LoopPingPong = 2202; +var InterpolateDiscrete = 2300; +var InterpolateLinear = 2301; +var InterpolateSmooth = 2302; +var ZeroCurvatureEnding = 2400; +var ZeroSlopeEnding = 2401; +var WrapAroundEnding = 2402; +var TrianglesDrawMode = 0; +var TriangleStripDrawMode = 1; +var TriangleFanDrawMode = 2; +var LinearEncoding = 3000; +var sRGBEncoding = 3001; +var GammaEncoding = 3007; +var RGBEEncoding = 3002; +var LogLuvEncoding = 3003; +var RGBM7Encoding = 3004; +var RGBM16Encoding = 3005; +var RGBDEncoding = 3006; +var BasicDepthPacking = 3200; +var RGBADepthPacking = 3201; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +var _Math = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: ( function () { + + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 + + var lut = []; + + for ( var i = 0; i < 256; i ++ ) { + + lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ).toUpperCase(); + + } + + return function () { + + var d0 = Math.random() * 0xffffffff | 0; + var d1 = Math.random() * 0xffffffff | 0; + var d2 = Math.random() * 0xffffffff | 0; + var d3 = Math.random() * 0xffffffff | 0; + return lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' + + lut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' + + lut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] + + lut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ]; + + }; + + } )(), + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); + + }, + + // Random integer from interval + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + degToRad: function ( degrees ) { + + return degrees * _Math.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * _Math.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + ceilPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); + + }, + + floorPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); + + } + }; +/** + * @author mrdoob / http://mrdoob.com/ + * @author philogb / http://blog.thejit.org/ + * @author egraether / http://egraether.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +function Vector2( x, y ) { + + this.x = x || 0; + this.y = y || 0; + +} + +Object.defineProperties( Vector2.prototype, { + + "width": { + + get: function () { + + return this.x; + + }, + + set: function ( value ) { + + this.x = value; + + } + + }, + + "height": { + + get: function () { + + return this.y; + + }, + + set: function ( value ) { + + this.y = value; + + } + + } + +} ); + +Object.assign( Vector2.prototype, { + + isVector2: true, + + set: function ( x, y ) { + + this.x = x; + this.y = y; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + + return this; + + }, + + multiply: function ( v ) { + + this.x *= v.x; + this.y *= v.y; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + + return this; + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + applyMatrix3: function ( m ) { + + var x = this.x, y = this.y; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ]; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ]; + + return this; + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector2(); + var max = new Vector2(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal ); + max.set( maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + }, + + manhattanLength: function () { + + return Math.abs( this.x ) + Math.abs( this.y ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + angle: function () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + + }, + + manhattanDistanceTo: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + + return this; + + }, + + rotateAround: function ( center, angle ) { + + var c = Math.cos( angle ), s = Math.sin( angle ); + + var x = this.x - center.x; + var y = this.y - center.y; + + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author jordi_ros / http://plattsoft.com + * @author D1plo1d / http://github.com/D1plo1d + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author timknip / http://www.floorplanner.com/ + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Matrix4() { + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix4.prototype, { + + isMatrix4: true, + + set: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; + te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; + te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; + te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new Matrix4().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; + te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; + te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; + te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; + + return this; + + }, + + copyPosition: function ( m ) { + + var te = this.elements, me = m.elements; + + te[ 12 ] = me[ 12 ]; + te[ 13 ] = me[ 13 ]; + te[ 14 ] = me[ 14 ]; + + return this; + + }, + + extractBasis: function ( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrixColumn( this, 0 ); + yAxis.setFromMatrixColumn( this, 1 ); + zAxis.setFromMatrixColumn( this, 2 ); + + return this; + + }, + + makeBasis: function ( xAxis, yAxis, zAxis ) { + + this.set( + xAxis.x, yAxis.x, zAxis.x, 0, + xAxis.y, yAxis.y, zAxis.y, 0, + xAxis.z, yAxis.z, zAxis.z, 0, + 0, 0, 0, 1 + ); + + return this; + + }, + + extractRotation: function () { + + var v1 = new Vector3(); + + return function extractRotation( m ) { + + var te = this.elements; + var me = m.elements; + + var scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length(); + var scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length(); + var scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length(); + + te[ 0 ] = me[ 0 ] * scaleX; + te[ 1 ] = me[ 1 ] * scaleX; + te[ 2 ] = me[ 2 ] * scaleX; + + te[ 4 ] = me[ 4 ] * scaleY; + te[ 5 ] = me[ 5 ] * scaleY; + te[ 6 ] = me[ 6 ] * scaleY; + + te[ 8 ] = me[ 8 ] * scaleZ; + te[ 9 ] = me[ 9 ] * scaleZ; + te[ 10 ] = me[ 10 ] * scaleZ; + + return this; + + }; + + }(), + + makeRotationFromEuler: function ( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + var te = this.elements; + + var x = euler.x, y = euler.y, z = euler.z; + var a = Math.cos( x ), b = Math.sin( x ); + var c = Math.cos( y ), d = Math.sin( y ); + var e = Math.cos( z ), f = Math.sin( z ); + + if ( euler.order === 'XYZ' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = - c * f; + te[ 8 ] = d; + + te[ 1 ] = af + be * d; + te[ 5 ] = ae - bf * d; + te[ 9 ] = - b * c; + + te[ 2 ] = bf - ae * d; + te[ 6 ] = be + af * d; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YXZ' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce + df * b; + te[ 4 ] = de * b - cf; + te[ 8 ] = a * d; + + te[ 1 ] = a * f; + te[ 5 ] = a * e; + te[ 9 ] = - b; + + te[ 2 ] = cf * b - de; + te[ 6 ] = df + ce * b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZXY' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce - df * b; + te[ 4 ] = - a * f; + te[ 8 ] = de + cf * b; + + te[ 1 ] = cf + de * b; + te[ 5 ] = a * e; + te[ 9 ] = df - ce * b; + + te[ 2 ] = - a * d; + te[ 6 ] = b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZYX' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = be * d - af; + te[ 8 ] = ae * d + bf; + + te[ 1 ] = c * f; + te[ 5 ] = bf * d + ae; + te[ 9 ] = af * d - be; + + te[ 2 ] = - d; + te[ 6 ] = b * c; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YZX' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = bd - ac * f; + te[ 8 ] = bc * f + ad; + + te[ 1 ] = f; + te[ 5 ] = a * e; + te[ 9 ] = - b * e; + + te[ 2 ] = - d * e; + te[ 6 ] = ad * f + bc; + te[ 10 ] = ac - bd * f; + + } else if ( euler.order === 'XZY' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = - f; + te[ 8 ] = d * e; + + te[ 1 ] = ac * f + bd; + te[ 5 ] = a * e; + te[ 9 ] = ad * f - bc; + + te[ 2 ] = bc * f - ad; + te[ 6 ] = b * e; + te[ 10 ] = bd * f + ac; + + } + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + makeRotationFromQuaternion: function ( q ) { + + var te = this.elements; + + var x = q._x, y = q._y, z = q._z, w = q._w; + var x2 = x + x, y2 = y + y, z2 = z + z; + var xx = x * x2, xy = x * y2, xz = x * z2; + var yy = y * y2, yz = y * z2, zz = z * z2; + var wx = w * x2, wy = w * y2, wz = w * z2; + + te[ 0 ] = 1 - ( yy + zz ); + te[ 4 ] = xy - wz; + te[ 8 ] = xz + wy; + + te[ 1 ] = xy + wz; + te[ 5 ] = 1 - ( xx + zz ); + te[ 9 ] = yz - wx; + + te[ 2 ] = xz - wy; + te[ 6 ] = yz + wx; + te[ 10 ] = 1 - ( xx + yy ); + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + lookAt: function () { + + var x = new Vector3(); + var y = new Vector3(); + var z = new Vector3(); + + return function lookAt( eye, target, up ) { + + var te = this.elements; + + z.subVectors( eye, target ); + + if ( z.lengthSq() === 0 ) { + + // eye and target are in the same position + + z.z = 1; + + } + + z.normalize(); + x.crossVectors( up, z ); + + if ( x.lengthSq() === 0 ) { + + // up and z are parallel + + if ( Math.abs( up.z ) === 1 ) { + + z.x += 0.0001; + + } else { + + z.z += 0.0001; + + } + + z.normalize(); + x.crossVectors( up, z ); + + } + + x.normalize(); + y.crossVectors( z, x ); + + te[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x; + te[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y; + te[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z; + + return this; + + }; + + }(), + + multiply: function ( m, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; + var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; + var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; + var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; + + var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; + var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; + var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; + var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; + te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; + te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; + te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix4( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + determinant: function () { + + var te = this.elements; + + var n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; + var n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; + var n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; + var n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; + + //TODO: make this more efficient + //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) + + return ( + n41 * ( + + n14 * n23 * n32 + - n13 * n24 * n32 + - n14 * n22 * n33 + + n12 * n24 * n33 + + n13 * n22 * n34 + - n12 * n23 * n34 + ) + + n42 * ( + + n11 * n23 * n34 + - n11 * n24 * n33 + + n14 * n21 * n33 + - n13 * n21 * n34 + + n13 * n24 * n31 + - n14 * n23 * n31 + ) + + n43 * ( + + n11 * n24 * n32 + - n11 * n22 * n34 + - n14 * n21 * n32 + + n12 * n21 * n34 + + n14 * n22 * n31 + - n12 * n24 * n31 + ) + + n44 * ( + - n13 * n22 * n31 + - n11 * n23 * n32 + + n11 * n22 * n33 + + n13 * n21 * n32 + - n12 * n21 * n33 + + n12 * n23 * n31 + ) + + ); + + }, + + transpose: function () { + + var te = this.elements; + var tmp; + + tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; + tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; + tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; + + tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; + tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; + tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; + + return this; + + }, + + setPosition: function ( v ) { + + var te = this.elements; + + te[ 12 ] = v.x; + te[ 13 ] = v.y; + te[ 14 ] = v.z; + + return this; + + }, + + getInverse: function ( m, throwOnDegenerate ) { + + // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + var te = this.elements, + me = m.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ], + n12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ], + n13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ], + n14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ], + + t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, + t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, + t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, + t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + + if ( det === 0 ) { + + var msg = "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; + te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; + te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; + + te[ 4 ] = t12 * detInv; + te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; + te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; + te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; + + te[ 8 ] = t13 * detInv; + te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; + te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; + te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; + + te[ 12 ] = t14 * detInv; + te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; + te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; + te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; + + return this; + + }, + + scale: function ( v ) { + + var te = this.elements; + var x = v.x, y = v.y, z = v.z; + + te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; + te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; + te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; + te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; + + return this; + + }, + + getMaxScaleOnAxis: function () { + + var te = this.elements; + + var scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; + var scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; + var scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; + + return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); + + }, + + makeTranslation: function ( x, y, z ) { + + this.set( + + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationX: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + 1, 0, 0, 0, + 0, c, - s, 0, + 0, s, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationY: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationZ: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, - s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationAxis: function ( axis, angle ) { + + // Based on http://www.gamedev.net/reference/articles/article1199.asp + + var c = Math.cos( angle ); + var s = Math.sin( angle ); + var t = 1 - c; + var x = axis.x, y = axis.y, z = axis.z; + var tx = t * x, ty = t * y; + + this.set( + + tx * x + c, tx * y - s * z, tx * z + s * y, 0, + tx * y + s * z, ty * y + c, ty * z - s * x, 0, + tx * z - s * y, ty * z + s * x, t * z * z + c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeScale: function ( x, y, z ) { + + this.set( + + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeShear: function ( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + compose: function ( position, quaternion, scale ) { + + this.makeRotationFromQuaternion( quaternion ); + this.scale( scale ); + this.setPosition( position ); + + return this; + + }, + + decompose: function () { + + var vector = new Vector3(); + var matrix = new Matrix4(); + + return function decompose( position, quaternion, scale ) { + + var te = this.elements; + + var sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + var sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + var sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); + + // if determine is negative, we need to invert one scale + var det = this.determinant(); + if ( det < 0 ) sx = - sx; + + position.x = te[ 12 ]; + position.y = te[ 13 ]; + position.z = te[ 14 ]; + + // scale the rotation part + matrix.copy( this ); + + var invSX = 1 / sx; + var invSY = 1 / sy; + var invSZ = 1 / sz; + + matrix.elements[ 0 ] *= invSX; + matrix.elements[ 1 ] *= invSX; + matrix.elements[ 2 ] *= invSX; + + matrix.elements[ 4 ] *= invSY; + matrix.elements[ 5 ] *= invSY; + matrix.elements[ 6 ] *= invSY; + + matrix.elements[ 8 ] *= invSZ; + matrix.elements[ 9 ] *= invSZ; + matrix.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( matrix ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + }; + + }(), + + makePerspective: function ( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + var te = this.elements; + var x = 2 * near / ( right - left ); + var y = 2 * near / ( top - bottom ); + + var a = ( right + left ) / ( right - left ); + var b = ( top + bottom ) / ( top - bottom ); + var c = - ( far + near ) / ( far - near ); + var d = - 2 * far * near / ( far - near ); + + te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; + te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; + + return this; + + }, + + makeOrthographic: function ( left, right, top, bottom, near, far ) { + + var te = this.elements; + var w = 1.0 / ( right - left ); + var h = 1.0 / ( top - bottom ); + var p = 1.0 / ( far - near ); + + var x = ( right + left ) * w; + var y = ( top + bottom ) * h; + var z = ( far + near ) * p; + + te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; + te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 16; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 16; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + array[ offset + 3 ] = te[ 3 ]; + + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + + array[ offset + 8 ] = te[ 8 ]; + array[ offset + 9 ] = te[ 9 ]; + array[ offset + 10 ] = te[ 10 ]; + array[ offset + 11 ] = te[ 11 ]; + + array[ offset + 12 ] = te[ 12 ]; + array[ offset + 13 ] = te[ 13 ]; + array[ offset + 14 ] = te[ 14 ]; + array[ offset + 15 ] = te[ 15 ]; + + return array; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Quaternion( x, y, z, w ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Quaternion, { + + slerp: function ( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + }, + + slerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { + + // fuzz-free, array-based Quaternion SLERP operation + + var x0 = src0[ srcOffset0 + 0 ], + y0 = src0[ srcOffset0 + 1 ], + z0 = src0[ srcOffset0 + 2 ], + w0 = src0[ srcOffset0 + 3 ], + + x1 = src1[ srcOffset1 + 0 ], + y1 = src1[ srcOffset1 + 1 ], + z1 = src1[ srcOffset1 + 2 ], + w1 = src1[ srcOffset1 + 3 ]; + + if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { + + var s = 1 - t, + + cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, + + dir = ( cos >= 0 ? 1 : - 1 ), + sqrSin = 1 - cos * cos; + + // Skip the Slerp for tiny steps to avoid numeric problems: + if ( sqrSin > Number.EPSILON ) { + + var sin = Math.sqrt( sqrSin ), + len = Math.atan2( sin, cos * dir ); + + s = Math.sin( s * len ) / sin; + t = Math.sin( t * len ) / sin; + + } + + var tDir = t * dir; + + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + + // Normalize in case we just did a lerp: + if ( s === 1 - t ) { + + var f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); + + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + + } + + } + + dst[ dstOffset ] = x0; + dst[ dstOffset + 1 ] = y0; + dst[ dstOffset + 2 ] = z0; + dst[ dstOffset + 3 ] = w0; + + } + +} ); + +Object.defineProperties( Quaternion.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + w: { + + get: function () { + + return this._w; + + }, + + set: function ( value ) { + + this._w = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Quaternion.prototype, { + + set: function ( x, y, z, w ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._w ); + + }, + + copy: function ( quaternion ) { + + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + + this.onChangeCallback(); + + return this; + + }, + + setFromEuler: function ( euler, update ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + var x = euler._x, y = euler._y, z = euler._z, order = euler.order; + + // http://www.mathworks.com/matlabcentral/fileexchange/ + // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ + // content/SpinCalc.m + + var cos = Math.cos; + var sin = Math.sin; + + var c1 = cos( x / 2 ); + var c2 = cos( y / 2 ); + var c3 = cos( z / 2 ); + + var s1 = sin( x / 2 ); + var s2 = sin( y / 2 ); + var s3 = sin( z / 2 ); + + if ( order === 'XYZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'YXZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'ZXY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'ZYX' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'YZX' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'XZY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromAxisAngle: function ( axis, angle ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + // assumes axis is normalized + + var halfAngle = angle / 2, s = Math.sin( halfAngle ); + + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos( halfAngle ); + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], + + trace = m11 + m22 + m33, + s; + + if ( trace > 0 ) { + + s = 0.5 / Math.sqrt( trace + 1.0 ); + + this._w = 0.25 / s; + this._x = ( m32 - m23 ) * s; + this._y = ( m13 - m31 ) * s; + this._z = ( m21 - m12 ) * s; + + } else if ( m11 > m22 && m11 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); + + this._w = ( m32 - m23 ) / s; + this._x = 0.25 * s; + this._y = ( m12 + m21 ) / s; + this._z = ( m13 + m31 ) / s; + + } else if ( m22 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); + + this._w = ( m13 - m31 ) / s; + this._x = ( m12 + m21 ) / s; + this._y = 0.25 * s; + this._z = ( m23 + m32 ) / s; + + } else { + + s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); + + this._w = ( m21 - m12 ) / s; + this._x = ( m13 + m31 ) / s; + this._y = ( m23 + m32 ) / s; + this._z = 0.25 * s; + + } + + this.onChangeCallback(); + + return this; + + }, + + setFromUnitVectors: function () { + + // assumes direction vectors vFrom and vTo are normalized + + var v1 = new Vector3(); + var r; + + var EPS = 0.000001; + + return function setFromUnitVectors( vFrom, vTo ) { + + if ( v1 === undefined ) v1 = new Vector3(); + + r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + r = 0; + + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + + v1.set( - vFrom.y, vFrom.x, 0 ); + + } else { + + v1.set( 0, - vFrom.z, vFrom.y ); + + } + + } else { + + v1.crossVectors( vFrom, vTo ); + + } + + this._x = v1.x; + this._y = v1.y; + this._z = v1.z; + this._w = r; + + return this.normalize(); + + }; + + }(), + + inverse: function () { + + return this.conjugate().normalize(); + + }, + + conjugate: function () { + + this._x *= - 1; + this._y *= - 1; + this._z *= - 1; + + this.onChangeCallback(); + + return this; + + }, + + dot: function ( v ) { + + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + + }, + + lengthSq: function () { + + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + + }, + + length: function () { + + return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); + + }, + + normalize: function () { + + var l = this.length(); + + if ( l === 0 ) { + + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + + } else { + + l = 1 / l; + + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + + } + + this.onChangeCallback(); + + return this; + + }, + + multiply: function ( q, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + return this.multiplyQuaternions( this, q ); + + }, + + premultiply: function ( q ) { + + return this.multiplyQuaternions( q, this ); + + }, + + multiplyQuaternions: function ( a, b ) { + + // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + var qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + var qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + + this.onChangeCallback(); + + return this; + + }, + + slerp: function ( qb, t ) { + + if ( t === 0 ) return this; + if ( t === 1 ) return this.copy( qb ); + + var x = this._x, y = this._y, z = this._z, w = this._w; + + // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ + + var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + + if ( cosHalfTheta < 0 ) { + + this._w = - qb._w; + this._x = - qb._x; + this._y = - qb._y; + this._z = - qb._z; + + cosHalfTheta = - cosHalfTheta; + + } else { + + this.copy( qb ); + + } + + if ( cosHalfTheta >= 1.0 ) { + + this._w = w; + this._x = x; + this._y = y; + this._z = z; + + return this; + + } + + var sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta ); + + if ( Math.abs( sinHalfTheta ) < 0.001 ) { + + this._w = 0.5 * ( w + this._w ); + this._x = 0.5 * ( x + this._x ); + this._y = 0.5 * ( y + this._y ); + this._z = 0.5 * ( z + this._z ); + + return this; + + } + + var halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); + var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + + this._w = ( w * ratioA + this._w * ratioB ); + this._x = ( x * ratioA + this._x * ratioB ); + this._y = ( y * ratioA + this._y * ratioB ); + this._z = ( z * ratioA + this._z * ratioB ); + + this.onChangeCallback(); + + return this; + + }, + + equals: function ( quaternion ) { + + return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this._x = array[ offset ]; + this._y = array[ offset + 1 ]; + this._z = array[ offset + 2 ]; + this._w = array[ offset + 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._w; + + return array; + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector3( x, y, z ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + +} + +Object.assign( Vector3.prototype, { + + isVector3: true, + + set: function ( x, y, z ) { + + this.x = x; + this.y = y; + this.z = z; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + + return this; + + }, + + multiply: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + + return this; + + }, + + multiplyVectors: function ( a, b ) { + + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + + return this; + + }, + + applyEuler: function () { + + var quaternion = new Quaternion(); + + return function applyEuler( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( quaternion.setFromEuler( euler ) ); + + }; + + }(), + + applyAxisAngle: function () { + + var quaternion = new Quaternion(); + + return function applyAxisAngle( axis, angle ) { + + return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) ); + + }; + + }(), + + applyMatrix3: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; + this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); + + this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; + this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; + this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; + + return this; + + }, + + applyQuaternion: function ( q ) { + + var x = this.x, y = this.y, z = this.z; + var qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + var ix = qw * x + qy * z - qz * y; + var iy = qw * y + qz * x - qx * z; + var iz = qw * z + qx * y - qy * x; + var iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + return this; + + }, + + project: function () { + + var matrix = new Matrix4(); + + return function project( camera ) { + + matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + unproject: function () { + + var matrix = new Matrix4(); + + return function unproject( camera ) { + + matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + transformDirection: function ( m ) { + + // input: THREE.Matrix4 affine matrix + // vector interpreted as a direction + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; + + return this.normalize(); + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector3(); + var max = new Vector3(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z; + + }, + + // TODO lengthSquared? + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); + + }, + + manhattanLength: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + cross: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + return this.crossVectors( this, v ); + + }, + + crossVectors: function ( a, b ) { + + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + + return this; + + }, + + projectOnVector: function ( vector ) { + + var scalar = vector.dot( this ) / vector.lengthSq(); + + return this.copy( vector ).multiplyScalar( scalar ); + + }, + + projectOnPlane: function () { + + var v1 = new Vector3(); + + return function projectOnPlane( planeNormal ) { + + v1.copy( this ).projectOnVector( planeNormal ); + + return this.sub( v1 ); + + }; + + }(), + + reflect: function () { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + var v1 = new Vector3(); + + return function reflect( normal ) { + + return this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); + + }; + + }(), + + angleTo: function ( v ) { + + var theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) ); + + // clamp, to handle numerical problems + + return Math.acos( _Math.clamp( theta, - 1, 1 ) ); + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + }, + + manhattanDistanceTo: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + }, + + setFromSpherical: function ( s ) { + + var sinPhiRadius = Math.sin( s.phi ) * s.radius; + + this.x = sinPhiRadius * Math.sin( s.theta ); + this.y = Math.cos( s.phi ) * s.radius; + this.z = sinPhiRadius * Math.cos( s.theta ); + + return this; + + }, + + setFromCylindrical: function ( c ) { + + this.x = c.radius * Math.sin( c.theta ); + this.y = c.y; + this.z = c.radius * Math.cos( c.theta ); + + return this; + + }, + + setFromMatrixPosition: function ( m ) { + + var e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + }, + + setFromMatrixScale: function ( m ) { + + var sx = this.setFromMatrixColumn( m, 0 ).length(); + var sy = this.setFromMatrixColumn( m, 1 ).length(); + var sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + }, + + setFromMatrixColumn: function ( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + * @author tschw + */ + +function Matrix3() { + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix3.prototype, { + + isMatrix3: true, + + set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; + te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; + te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new this.constructor().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; + te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; + te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; + + return this; + + }, + + setFromMatrix4: function ( m ) { + + var me = m.elements; + + this.set( + + me[ 0 ], me[ 4 ], me[ 8 ], + me[ 1 ], me[ 5 ], me[ 9 ], + me[ 2 ], me[ 6 ], me[ 10 ] + + ); + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix3( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + multiply: function ( m ) { + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; + var a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; + var a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; + + var b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; + var b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; + var b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; + te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; + te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; + te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; + te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; + te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; + te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; + te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; + te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; + + return this; + + }, + + determinant: function () { + + var te = this.elements; + + var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], + d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], + g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; + + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + + }, + + getInverse: function ( matrix, throwOnDegenerate ) { + + if ( matrix && matrix.isMatrix4 ) { + + console.error( "THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument." ); + + } + + var me = matrix.elements, + te = this.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], + n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ], + n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ], + + t11 = n33 * n22 - n32 * n23, + t12 = n32 * n13 - n33 * n12, + t13 = n23 * n12 - n22 * n13, + + det = n11 * t11 + n21 * t12 + n31 * t13; + + if ( det === 0 ) { + + var msg = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; + te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; + + te[ 3 ] = t12 * detInv; + te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; + te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; + + te[ 6 ] = t13 * detInv; + te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; + te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; + + return this; + + }, + + transpose: function () { + + var tmp, m = this.elements; + + tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; + tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; + tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; + + return this; + + }, + + getNormalMatrix: function ( matrix4 ) { + + return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose(); + + }, + + transposeIntoArray: function ( r ) { + + var m = this.elements; + + r[ 0 ] = m[ 0 ]; + r[ 1 ] = m[ 3 ]; + r[ 2 ] = m[ 6 ]; + r[ 3 ] = m[ 1 ]; + r[ 4 ] = m[ 4 ]; + r[ 5 ] = m[ 7 ]; + r[ 6 ] = m[ 2 ]; + r[ 7 ] = m[ 5 ]; + r[ 8 ] = m[ 8 ]; + + return this; + + }, + + setUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) { + + var c = Math.cos( rotation ); + var s = Math.sin( rotation ); + + this.set( + sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx, + - sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty, + 0, 0, 1 + ); + + }, + + scale: function ( sx, sy ) { + + var te = this.elements; + + te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; + te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; + + return this; + + }, + + rotate: function ( theta ) { + + var c = Math.cos( theta ); + var s = Math.sin( theta ); + + var te = this.elements; + + var a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; + var a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; + + te[ 0 ] = c * a11 + s * a21; + te[ 3 ] = c * a12 + s * a22; + te[ 6 ] = c * a13 + s * a23; + + te[ 1 ] = - s * a11 + c * a21; + te[ 4 ] = - s * a12 + c * a22; + te[ 7 ] = - s * a13 + c * a23; + + return this; + + }, + + translate: function ( tx, ty ) { + + var te = this.elements; + + te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; + te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 9; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 9; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + + array[ offset + 3 ] = te[ 3 ]; + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + array[ offset + 8 ] = te[ 8 ]; + + return array; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + */ + +var textureId = 0; + +function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + + this.image = image !== undefined ? image : Texture.DEFAULT_IMAGE; + this.mipmaps = []; + + this.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING; + + this.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping; + this.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping; + + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + this.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter; + + this.anisotropy = anisotropy !== undefined ? anisotropy : 1; + + this.format = format !== undefined ? format : RGBAFormat; + this.type = type !== undefined ? type : UnsignedByteType; + + this.offset = new Vector2( 0, 0 ); + this.repeat = new Vector2( 1, 1 ); + this.center = new Vector2( 0, 0 ); + this.rotation = 0; + + this.matrixAutoUpdate = true; + this.matrix = new Matrix3(); + + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding !== undefined ? encoding : LinearEncoding; + + this.version = 0; + this.onUpdate = null; + +} + +Texture.DEFAULT_IMAGE = undefined; +Texture.DEFAULT_MAPPING = UVMapping; + +Texture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Texture, + + isTexture: true, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + + this.anisotropy = source.anisotropy; + + this.format = source.format; + this.type = source.type; + + this.offset.copy( source.offset ); + this.repeat.copy( source.repeat ); + this.center.copy( source.center ); + this.rotation = source.rotation; + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrix.copy( source.matrix ); + + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( meta ) { + + var isRootObject = ( meta === undefined || typeof meta === 'string' ); + + if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) { + + return meta.textures[ this.uuid ]; + + } + + function getDataURL( image ) { + + var canvas; + + if ( image instanceof HTMLCanvasElement ) { + + canvas = image; + + } else { + + canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = image.width; + canvas.height = image.height; + + var context = canvas.getContext( '2d' ); + + if ( image instanceof ImageData ) { + + context.putImageData( image, 0, 0 ); + + } else { + + context.drawImage( image, 0, 0, image.width, image.height ); + + } + + } + + if ( canvas.width > 2048 || canvas.height > 2048 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + var output = { + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + repeat: [ this.repeat.x, this.repeat.y ], + offset: [ this.offset.x, this.offset.y ], + center: [ this.center.x, this.center.y ], + rotation: this.rotation, + + wrap: [ this.wrapS, this.wrapT ], + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + var image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = _Math.generateUUID(); // UGH + + } + + if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: getDataURL( image ) + }; + + } + + output.image = image.uuid; + + } + + if ( ! isRootObject ) { + + meta.textures[ this.uuid ] = output; + + } + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( uv ) { + + if ( this.mapping !== UVMapping ) return; + + uv.applyMatrix3( this.matrix ); + + if ( uv.x < 0 || uv.x > 1 ) { + + switch ( this.wrapS ) { + + case RepeatWrapping: + + uv.x = uv.x - Math.floor( uv.x ); + break; + + case ClampToEdgeWrapping: + + uv.x = uv.x < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { + + uv.x = Math.ceil( uv.x ) - uv.x; + + } else { + + uv.x = uv.x - Math.floor( uv.x ); + + } + break; + + } + + } + + if ( uv.y < 0 || uv.y > 1 ) { + + switch ( this.wrapT ) { + + case RepeatWrapping: + + uv.y = uv.y - Math.floor( uv.y ); + break; + + case ClampToEdgeWrapping: + + uv.y = uv.y < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { + + uv.y = Math.ceil( uv.y ) - uv.y; + + } else { + + uv.y = uv.y - Math.floor( uv.y ); + + } + break; + + } + + } + + if ( this.flipY ) { + + uv.y = 1 - uv.y; + + } + + } + +} ); + +Object.defineProperty( Texture.prototype, "needsUpdate", { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector4( x, y, z, w ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Vector4.prototype, { + + isVector4: true, + + set: function ( x, y, z, w ) { + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setW: function ( w ) { + + this.w = w; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + case 3: this.w = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + case 3: return this.w; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z, this.w ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = ( v.w !== undefined ) ? v.w : 1; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + this.w += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z, w = this.w; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; + this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + setAxisAngleFromQuaternion: function ( q ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + + // q is assumed to be normalized + + this.w = 2 * Math.acos( q.w ); + + var s = Math.sqrt( 1 - q.w * q.w ); + + if ( s < 0.0001 ) { + + this.x = 1; + this.y = 0; + this.z = 0; + + } else { + + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + + } + + return this; + + }, + + setAxisAngleFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var angle, x, y, z, // variables for result + epsilon = 0.01, // margin to allow for rounding errors + epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees + + te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + if ( ( Math.abs( m12 - m21 ) < epsilon ) && + ( Math.abs( m13 - m31 ) < epsilon ) && + ( Math.abs( m23 - m32 ) < epsilon ) ) { + + // singularity found + // first check for identity matrix which must have +1 for all terms + // in leading diagonal and zero in other terms + + if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && + ( Math.abs( m13 + m31 ) < epsilon2 ) && + ( Math.abs( m23 + m32 ) < epsilon2 ) && + ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { + + // this singularity is identity matrix so angle = 0 + + this.set( 1, 0, 0, 0 ); + + return this; // zero angle, arbitrary axis + + } + + // otherwise this singularity is angle = 180 + + angle = Math.PI; + + var xx = ( m11 + 1 ) / 2; + var yy = ( m22 + 1 ) / 2; + var zz = ( m33 + 1 ) / 2; + var xy = ( m12 + m21 ) / 4; + var xz = ( m13 + m31 ) / 4; + var yz = ( m23 + m32 ) / 4; + + if ( ( xx > yy ) && ( xx > zz ) ) { + + // m11 is the largest diagonal term + + if ( xx < epsilon ) { + + x = 0; + y = 0.707106781; + z = 0.707106781; + + } else { + + x = Math.sqrt( xx ); + y = xy / x; + z = xz / x; + + } + + } else if ( yy > zz ) { + + // m22 is the largest diagonal term + + if ( yy < epsilon ) { + + x = 0.707106781; + y = 0; + z = 0.707106781; + + } else { + + y = Math.sqrt( yy ); + x = xy / y; + z = yz / y; + + } + + } else { + + // m33 is the largest diagonal term so base result on this + + if ( zz < epsilon ) { + + x = 0.707106781; + y = 0.707106781; + z = 0; + + } else { + + z = Math.sqrt( zz ); + x = xz / z; + y = yz / z; + + } + + } + + this.set( x, y, z, angle ); + + return this; // return 180 deg rotation + + } + + // as we have reached here there are no singularities so we can handle normally + + var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + + ( m13 - m31 ) * ( m13 - m31 ) + + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize + + if ( Math.abs( s ) < 0.001 ) s = 1; + + // prevent divide by zero, should not happen if matrix is orthogonal and should be + // caught by singularity test above, but I've left it in just in case + + this.x = ( m32 - m23 ) / s; + this.y = ( m13 - m31 ) / s; + this.z = ( m21 - m12 ) / s; + this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); + + return this; + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + this.w = Math.min( this.w, v.w ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + this.w = Math.max( this.w, v.w ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + this.w = Math.max( min.w, Math.min( max.w, this.w ) ); + + return this; + + }, + + clampScalar: function () { + + var min, max; + + return function clampScalar( minVal, maxVal ) { + + if ( min === undefined ) { + + min = new Vector4(); + max = new Vector4(); + + } + + min.set( minVal, minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + this.w = Math.floor( this.w ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + this.w = Math.ceil( this.w ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + this.w = Math.round( this.w ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + this.w = - this.w; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); + + }, + + manhattanLength: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + this.w += ( v.w - this.w ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + this.w = array[ offset + 3 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + array[ offset + 3 ] = this.w; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + this.w = attribute.getW( index ); + + return this; + + } + +} ); + +/** + * @author szimek / https://github.com/szimek/ + * @author alteredq / http://alteredqualia.com/ + * @author Marius Kintel / https://github.com/kintel + */ + +/* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers +*/ +function WebGLRenderTarget( width, height, options ) { + + this.uuid = _Math.generateUUID(); + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + if ( options.minFilter === undefined ) options.minFilter = LinearFilter; + + this.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + +} + +WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: WebGLRenderTarget, + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com + */ + +function WebGLRenderTargetCube( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 + this.activeMipMapLevel = 0; + +} + +WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype ); +WebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube; + +WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data, width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + +} + +DataTexture.prototype = Object.create( Texture.prototype ); +DataTexture.prototype.constructor = DataTexture; + +DataTexture.prototype.isDataTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + +} + +CubeTexture.prototype = Object.create( Texture.prototype ); +CubeTexture.prototype.constructor = CubeTexture; + +CubeTexture.prototype.isCubeTexture = true; + +Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + +} ); + +/** + * @author tschw + * + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program, renderer )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [renderer] ) + * + * uploads a uniform value(s) + * the 'renderer' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (renderer factorizations): + * + * .upload( gl, seq, values, renderer ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (renderer factorizations): + * + * .setValue( gl, name, value ) + * + * sets uniform with name 'name' to 'value' + * + * .set( gl, obj, prop ) + * + * sets uniform from object and property with same name than uniform + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + +var emptyTexture = new Texture(); +var emptyCubeTexture = new CubeTexture(); + +// --- Base for inner nodes (including the root) --- + +function UniformContainer() { + + this.seq = []; + this.map = {}; + +} + +// --- Utilities --- + +// Array Caches (provide typed arrays for temporary by size) + +var arrayCacheF32 = []; +var arrayCacheI32 = []; + +// Float32Array caches used for uploading Matrix uniforms + +var mat4array = new Float32Array( 16 ); +var mat3array = new Float32Array( 9 ); + +// Flattening for arrays of vectors and matrices + +function flatten( array, nBlocks, blockSize ) { + + var firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + var n = nBlocks * blockSize, + r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + +} + +// Texture unit allocation + +function allocTexUnits( renderer, n ) { + + var r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( var i = 0; i !== n; ++ i ) + r[ i ] = renderer.allocTextureUnit(); + + return r; + +} + +// --- Setters --- + +// Note: Defining these methods externally, because they come in a bunch +// and this way their names minify. + +// Single scalar + +function setValue1f( gl, v ) { + + gl.uniform1f( this.addr, v ); + +} + +function setValue1i( gl, v ) { + + gl.uniform1i( this.addr, v ); + +} + +// Single float vector (from flat array or THREE.VectorN) + +function setValue2fv( gl, v ) { + + if ( v.x === undefined ) { + + gl.uniform2fv( this.addr, v ); + + } else { + + gl.uniform2f( this.addr, v.x, v.y ); + + } + +} + +function setValue3fv( gl, v ) { + + if ( v.x !== undefined ) { + + gl.uniform3f( this.addr, v.x, v.y, v.z ); + + } else if ( v.r !== undefined ) { + + gl.uniform3f( this.addr, v.r, v.g, v.b ); + + } else { + + gl.uniform3fv( this.addr, v ); + + } + +} + +function setValue4fv( gl, v ) { + + if ( v.x === undefined ) { + + gl.uniform4fv( this.addr, v ); + + } else { + + gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + + } + +} + +// Single matrix (from flat array or MatrixN) + +function setValue2fm( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, v.elements || v ); + +} + +function setValue3fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix3fv( this.addr, false, v ); + + } else { + + mat3array.set( v.elements ); + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + } + +} + +function setValue4fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix4fv( this.addr, false, v ); + + } else { + + mat4array.set( v.elements ); + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + } + +} + +// Single texture (2D / Cube) + +function setValueT1( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTexture2D( v || emptyTexture, unit ); + +} + +function setValueT6( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTextureCube( v || emptyCubeTexture, unit ); + +} + +// Integer / Boolean vectors or arrays thereof (always flat arrays) + +function setValue2iv( gl, v ) { + + gl.uniform2iv( this.addr, v ); + +} + +function setValue3iv( gl, v ) { + + gl.uniform3iv( this.addr, v ); + +} + +function setValue4iv( gl, v ) { + + gl.uniform4iv( this.addr, v ); + +} + +// Helper to pick the right setter for the singular case + +function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1f; // FLOAT + case 0x8b50: return setValue2fv; // _VEC2 + case 0x8b51: return setValue3fv; // _VEC3 + case 0x8b52: return setValue4fv; // _VEC4 + + case 0x8b5a: return setValue2fm; // _MAT2 + case 0x8b5b: return setValue3fm; // _MAT3 + case 0x8b5c: return setValue4fm; // _MAT4 + + case 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES + case 0x8b60: return setValueT6; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// Array of scalars + +function setValue1fv( gl, v ) { + + gl.uniform1fv( this.addr, v ); + +} +function setValue1iv( gl, v ) { + + gl.uniform1iv( this.addr, v ); + +} + +// Array of vectors (flat or from THREE classes) + +function setValueV2a( gl, v ) { + + gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) ); + +} + +function setValueV3a( gl, v ) { + + gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) ); + +} + +function setValueV4a( gl, v ) { + + gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) ); + +} + +// Array of matrices (flat or from THREE clases) + +function setValueM2a( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) ); + +} + +function setValueM3a( gl, v ) { + + gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) ); + +} + +function setValueM4a( gl, v ) { + + gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) ); + +} + +// Array of textures (2D / Cube) + +function setValueT1a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + +} + +function setValueT6a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + +} + +// Helper to pick the right setter for a pure (bottom-level) array + +function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1fv; // FLOAT + case 0x8b50: return setValueV2a; // _VEC2 + case 0x8b51: return setValueV3a; // _VEC3 + case 0x8b52: return setValueV4a; // _VEC4 + + case 0x8b5a: return setValueM2a; // _MAT2 + case 0x8b5b: return setValueM3a; // _MAT3 + case 0x8b5c: return setValueM4a; // _MAT4 + + case 0x8b5e: return setValueT1a; // SAMPLER_2D + case 0x8b60: return setValueT6a; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// --- Uniform Classes --- + +function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function StructuredUniform( id ) { + + this.id = id; + + UniformContainer.call( this ); // mix-in + +} + +StructuredUniform.prototype.setValue = function ( gl, value ) { + + // Note: Don't need an extra 'renderer' parameter, since samplers + // are not allowed in structured uniforms. + + var seq = this.seq; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + u.setValue( gl, value[ u.id ] ); + + } + +}; + +// --- Top-level --- + +// Parser - builds up the property tree from the path strings + +var RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; + +// extracts +// - the identifier (member name or array index) +// - followed by an optional right bracket (found when array index) +// - followed by an optional left bracket or dot (type of subscript) +// +// Note: These portions can be read in a non-overlapping fashion and +// allow straightforward parsing of the hierarchy that WebGL encodes +// in the uniform names. + +function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + +} + +function parseUniform( activeInfo, addr, container ) { + + var path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + for ( ; ; ) { + + var match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex, + + id = match[ 1 ], + idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + var map = container.map, next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + +} + +// Root Container + +function WebGLUniforms( gl, program, renderer ) { + + UniformContainer.call( this ); + + this.renderer = renderer; + + var n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS ); + + for ( var i = 0; i < n; ++ i ) { + + var info = gl.getActiveUniform( program, i ), + path = info.name, + addr = gl.getUniformLocation( program, path ); + + parseUniform( info, addr, this ); + + } + +} + +WebGLUniforms.prototype.setValue = function ( gl, name, value ) { + + var u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, this.renderer ); + +}; + +WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + var v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + +}; + + +// Static interface + +WebGLUniforms.upload = function ( gl, seq, values, renderer ) { + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, renderer ); + + } + + } + +}; + +WebGLUniforms.seqWithValue = function ( seq, values ) { + + var r = []; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, + 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, + 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, + 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, + 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, + 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, + 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, + 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, + 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, + 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, + 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, + 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, + 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, + 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, + 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, + 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, + 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, + 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, + 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, + 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, + 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, + 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, + 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, + 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; + +function Color( r, g, b ) { + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + +} + +Object.assign( Color.prototype, { + + isColor: true, + + r: 1, g: 1, b: 1, + + set: function ( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + }, + + setScalar: function ( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + }, + + setHex: function ( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + }, + + setRGB: function ( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + }, + + setHSL: function () { + + function hue2rgb( p, q, t ) { + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + } + + return function setHSL( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = _Math.euclideanModulo( h, 1 ); + s = _Math.clamp( s, 0, 1 ); + l = _Math.clamp( l, 0, 1 ); + + if ( s === 0 ) { + + this.r = this.g = this.b = l; + + } else { + + var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); + var q = ( 2 * l ) - p; + + this.r = hue2rgb( q, p, h + 1 / 3 ); + this.g = hue2rgb( q, p, h ); + this.b = hue2rgb( q, p, h - 1 / 3 ); + + } + + return this; + + }; + + }(), + + setStyle: function ( style ) { + + function handleAlpha( string ) { + + if ( string === undefined ) return; + + if ( parseFloat( string ) < 1 ) { + + console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); + + } + + } + + + var m; + + if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + var color; + var name = m[ 1 ]; + var components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + var h = parseFloat( color[ 1 ] ) / 360; + var s = parseInt( color[ 2 ], 10 ) / 100; + var l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 5 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { + + // hex color + + var hex = m[ 1 ]; + var size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + // color keywords + var hex = ColorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } else { + + // unknown color + console.warn( 'THREE.Color: Unknown color ' + style ); + + } + + } + + return this; + + }, + + clone: function () { + + return new this.constructor( this.r, this.g, this.b ); + + }, + + copy: function ( color ) { + + this.r = color.r; + this.g = color.g; + this.b = color.b; + + return this; + + }, + + copyGammaToLinear: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + }, + + copyLinearToGamma: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + var safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + }, + + convertGammaToLinear: function () { + + var r = this.r, g = this.g, b = this.b; + + this.r = r * r; + this.g = g * g; + this.b = b * b; + + return this; + + }, + + convertLinearToGamma: function () { + + this.r = Math.sqrt( this.r ); + this.g = Math.sqrt( this.g ); + this.b = Math.sqrt( this.b ); + + return this; + + }, + + getHex: function () { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + }, + + getHexString: function () { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + }, + + getHSL: function ( optionalTarget ) { + + // h,s,l ranges are in 0.0 - 1.0 + + var hsl = optionalTarget || { h: 0, s: 0, l: 0 }; + + var r = this.r, g = this.g, b = this.b; + + var max = Math.max( r, g, b ); + var min = Math.min( r, g, b ); + + var hue, saturation; + var lightness = ( min + max ) / 2.0; + + if ( min === max ) { + + hue = 0; + saturation = 0; + + } else { + + var delta = max - min; + + saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); + + switch ( max ) { + + case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; + case g: hue = ( b - r ) / delta + 2; break; + case b: hue = ( r - g ) / delta + 4; break; + + } + + hue /= 6; + + } + + hsl.h = hue; + hsl.s = saturation; + hsl.l = lightness; + + return hsl; + + }, + + getStyle: function () { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + }, + + offsetHSL: function ( h, s, l ) { + + var hsl = this.getHSL(); + + hsl.h += h; hsl.s += s; hsl.l += l; + + this.setHSL( hsl.h, hsl.s, hsl.l ); + + return this; + + }, + + add: function ( color ) { + + this.r += color.r; + this.g += color.g; + this.b += color.b; + + return this; + + }, + + addColors: function ( color1, color2 ) { + + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + + return this; + + }, + + addScalar: function ( s ) { + + this.r += s; + this.g += s; + this.b += s; + + return this; + + }, + + sub: function ( color ) { + + this.r = Math.max( 0, this.r - color.r ); + this.g = Math.max( 0, this.g - color.g ); + this.b = Math.max( 0, this.b - color.b ); + + return this; + + }, + + multiply: function ( color ) { + + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + + return this; + + }, + + multiplyScalar: function ( s ) { + + this.r *= s; + this.g *= s; + this.b *= s; + + return this; + + }, + + lerp: function ( color, alpha ) { + + this.r += ( color.r - this.r ) * alpha; + this.g += ( color.g - this.g ) * alpha; + this.b += ( color.b - this.b ) * alpha; + + return this; + + }, + + equals: function ( c ) { + + return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.r = array[ offset ]; + this.g = array[ offset + 1 ]; + this.b = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.r; + array[ offset + 1 ] = this.g; + array[ offset + 2 ] = this.b; + + return array; + + }, + + toJSON: function () { + + return this.getHex(); + + } + +} ); + +/** + * Uniforms library for shared webgl shaders + */ + +var UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + uvTransform: { value: new Matrix3() }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + uvTransform: { value: new Matrix3() } + + } + +}; + +/** + * Uniform Utilities + */ + +var UniformsUtils = { + + merge: function ( uniforms ) { + + var merged = {}; + + for ( var u = 0; u < uniforms.length; u ++ ) { + + var tmp = this.clone( uniforms[ u ] ); + + for ( var p in tmp ) { + + merged[ p ] = tmp[ p ]; + + } + + } + + return merged; + + }, + + clone: function ( uniforms_src ) { + + var uniforms_dst = {}; + + for ( var u in uniforms_src ) { + + uniforms_dst[ u ] = {}; + + for ( var p in uniforms_src[ u ] ) { + + var parameter_src = uniforms_src[ u ][ p ]; + + if ( parameter_src && ( parameter_src.isColor || + parameter_src.isMatrix3 || parameter_src.isMatrix4 || + parameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 || + parameter_src.isTexture ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.clone(); + + } else if ( Array.isArray( parameter_src ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.slice(); + + } else { + + uniforms_dst[ u ][ p ] = parameter_src; + + } + + } + + } + + return uniforms_dst; + + } + +}; + +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n"; + +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n"; + +var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n"; + +var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n"; + +var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + +var begin_vertex = "\nvec3 transformed = vec3( position );\n"; + +var beginnormal_vertex = "\nvec3 objectNormal = vec3( normal );\n"; + +var bsdfs = "float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.86267 + (0.49788 + 0.01436 * y ) * y;\n\tfloat b = 3.45068 + (4.18814 + y) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tvec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\n\treturn result;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n"; + +var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n"; + +var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n"; + +var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n"; + +var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n"; + +var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n"; + +var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + +var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n"; + +var color_pars_vertex = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + +var color_vertex = "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif"; + +var common = "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n"; + +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n"; + +var defaultnormal_vertex = "vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n"; + +var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n"; + +var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n"; + +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n"; + +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n"; + +var encodings_fragment = " gl_FragColor = linearToOutputTexel( gl_FragColor );\n"; + +var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n"; + +var envmap_fragment = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n"; + +var envmap_pars_fragment = "#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n"; + +var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n"; + +var envmap_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n"; + +var fog_vertex = "\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif"; + +var fog_pars_vertex = "#ifdef USE_FOG\n varying float fogDepth;\n#endif\n"; + +var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; + +var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n"; + +var gradientmap_pars_fragment = "#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n"; + +var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n"; + +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + +var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n"; + +var lights_pars = "uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n"; + +var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n"; + +var lights_phong_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n"; + +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n"; + +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tfloat norm = texture2D( ltcMag, uv ).a;\n\t\tvec4 t = texture2D( ltcMat, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( 1, 0, t.y ),\n\t\t\tvec3( 0, t.z, 0 ),\n\t\t\tvec3( t.w, 0, t.x )\n\t\t);\n\t\treflectedLight.directSpecular += lightColor * material.specularColor * norm * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + +var lights_template = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n"; + +var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; + +var logdepthbuf_pars_fragment = "#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n"; + +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif"; + +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n"; + +var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n"; + +var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n"; + +var map_particle_fragment = "#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n"; + +var map_particle_pars_fragment = "#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n"; + +var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n"; + +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n"; + +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n"; + +var normal_fragment = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n"; + +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n"; + +var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n"; + +var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n"; + +var project_vertex = "vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n"; + +var dithering_fragment = "#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n"; + +var dithering_pars_fragment = "#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n"; + +var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n"; + +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + +var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n"; + +var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n"; + +var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n"; + +var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n"; + +var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; + +var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n"; + +var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n"; + +var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n"; + +var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; + +var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; + +var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n"; + +var tonemapping_pars_fragment = "#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n"; + +var uv_pars_fragment = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif"; + +var uv_pars_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n"; + +var uv_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; + +var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif"; + +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n"; + +var cube_frag = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n"; + +var cube_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}\n"; + +var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n"; + +var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n"; + +var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n"; + +var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n"; + +var equirect_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n"; + +var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_frag = "#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_vert = "#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n"; + +var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n"; + +var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n"; + +var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n"; + +var shadow_vert = "#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars: lights_pars, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_template: lights_template, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment: normal_fragment, + normalmap_pars_fragment: normalmap_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + */ + +var ShaderLib = { + + basic: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 0.5 }, + metalness: { value: 0.5 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + points: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: { + tCube: { value: null }, + tFlip: { value: - 1 }, + opacity: { value: 1.0 } + }, + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + +}; + +ShaderLib.physical = { + + uniforms: UniformsUtils.merge( [ + ShaderLib.standard.uniforms, + { + clearCoat: { value: 0 }, + clearCoatRoughness: { value: 0 } + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Box2( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + +} + +Object.assign( Box2.prototype, { + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector2(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = + Infinity; + this.max.x = this.max.y = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector2(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 4 splitting planes to rule out intersections + + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y ? false : true; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector2(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLFlareRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var shader, program, attributes, uniforms; + + var tempTexture, occlusionTexture; + + function init() { + + var vertices = new Float32Array( [ + - 1, - 1, 0, 0, + 1, - 1, 1, 0, + 1, 1, 1, 1, + - 1, 1, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + // buffers + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + // textures + + tempTexture = gl.createTexture(); + occlusionTexture = gl.createTexture(); + + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + shader = { + + vertexShader: [ + + 'uniform lowp int renderType;', + + 'uniform vec3 screenPosition;', + 'uniform vec2 scale;', + 'uniform float rotation;', + + 'uniform sampler2D occlusionMap;', + + 'attribute vec2 position;', + 'attribute vec2 uv;', + + 'varying vec2 vUV;', + 'varying float vVisibility;', + + 'void main() {', + + ' vUV = uv;', + + ' vec2 pos = position;', + + ' if ( renderType == 2 ) {', + + ' vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );', + ' visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );', + + ' vVisibility = visibility.r / 9.0;', + ' vVisibility *= 1.0 - visibility.g / 9.0;', + ' vVisibility *= visibility.b / 9.0;', + ' vVisibility *= 1.0 - visibility.a / 9.0;', + + ' pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;', + ' pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;', + + ' }', + + ' gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );', + + '}' + + ].join( '\n' ), + + fragmentShader: [ + + 'uniform lowp int renderType;', + + 'uniform sampler2D map;', + 'uniform float opacity;', + 'uniform vec3 color;', + + 'varying vec2 vUV;', + 'varying float vVisibility;', + + 'void main() {', + + // pink square + + ' if ( renderType == 0 ) {', + + ' gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );', + + // restore + + ' } else if ( renderType == 1 ) {', + + ' gl_FragColor = texture2D( map, vUV );', + + // flare + + ' } else {', + + ' vec4 texture = texture2D( map, vUV );', + ' texture.a *= opacity * vVisibility;', + ' gl_FragColor = texture;', + ' gl_FragColor.rgb *= color;', + + ' }', + + '}' + + ].join( '\n' ) + + }; + + program = createProgram( shader ); + + attributes = { + vertex: gl.getAttribLocation( program, 'position' ), + uv: gl.getAttribLocation( program, 'uv' ) + }; + + uniforms = { + renderType: gl.getUniformLocation( program, 'renderType' ), + map: gl.getUniformLocation( program, 'map' ), + occlusionMap: gl.getUniformLocation( program, 'occlusionMap' ), + opacity: gl.getUniformLocation( program, 'opacity' ), + color: gl.getUniformLocation( program, 'color' ), + scale: gl.getUniformLocation( program, 'scale' ), + rotation: gl.getUniformLocation( program, 'rotation' ), + screenPosition: gl.getUniformLocation( program, 'screenPosition' ) + }; + + } + + /* + * Render lens flares + * Method: renders 16x16 0xff00ff-colored points scattered over the light source area, + * reads these back and calculates occlusion. + */ + + this.render = function ( flares, scene, camera, viewport ) { + + if ( flares.length === 0 ) return; + + var tempPosition = new Vector3(); + + var invAspect = viewport.w / viewport.z, + halfViewportWidth = viewport.z * 0.5, + halfViewportHeight = viewport.w * 0.5; + + var size = 16 / viewport.w, + scale = new Vector2( size * invAspect, size ); + + var screenPosition = new Vector3( 1, 1, 0 ), + screenPositionPixels = new Vector2( 1, 1 ); + + var validArea = new Box2(); + + validArea.min.set( viewport.x, viewport.y ); + validArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) ); + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.vertex ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + // loop through all lens flares to update their occlusion and positions + // setup gl and common used attribs/uniforms + + gl.uniform1i( uniforms.occlusionMap, 0 ); + gl.uniform1i( uniforms.map, 1 ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + state.disable( gl.CULL_FACE ); + state.buffers.depth.setMask( false ); + + for ( var i = 0, l = flares.length; i < l; i ++ ) { + + size = 16 / viewport.w; + scale.set( size * invAspect, size ); + + // calc object screen position + + var flare = flares[ i ]; + + tempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] ); + + tempPosition.applyMatrix4( camera.matrixWorldInverse ); + tempPosition.applyMatrix4( camera.projectionMatrix ); + + // setup arrays for gl programs + + screenPosition.copy( tempPosition ); + + // horizontal and vertical coordinate of the lower left corner of the pixels to copy + + screenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8; + screenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8; + + // screen cull + + if ( validArea.containsPoint( screenPositionPixels ) === true ) { + + // save current RGB to temp texture + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, null ); + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // render pink quad + + gl.uniform1i( uniforms.renderType, 0 ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + + state.disable( gl.BLEND ); + state.enable( gl.DEPTH_TEST ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // copy result to occlusionMap + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // restore graphics + + gl.uniform1i( uniforms.renderType, 1 ); + state.disable( gl.DEPTH_TEST ); + + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // update object positions + + flare.positionScreen.copy( screenPosition ); + + if ( flare.customUpdateCallback ) { + + flare.customUpdateCallback( flare ); + + } else { + + flare.updateLensFlares(); + + } + + // render flares + + gl.uniform1i( uniforms.renderType, 2 ); + state.enable( gl.BLEND ); + + for ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) { + + var sprite = flare.lensFlares[ j ]; + + if ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) { + + screenPosition.x = sprite.x; + screenPosition.y = sprite.y; + screenPosition.z = sprite.z; + + size = sprite.size * sprite.scale / viewport.w; + + scale.x = size * invAspect; + scale.y = size; + + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform1f( uniforms.rotation, sprite.rotation ); + + gl.uniform1f( uniforms.opacity, sprite.opacity ); + gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); + + state.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst ); + + textures.setTexture2D( sprite.texture, 1 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + } + + } + + } + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + state.enable( gl.DEPTH_TEST ); + state.buffers.depth.setMask( true ); + + state.reset(); + + }; + + function createProgram( shader ) { + + var program = gl.createProgram(); + + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + + var prefix = 'precision ' + capabilities.precision + ' float;\n'; + + gl.shaderSource( fragmentShader, prefix + shader.fragmentShader ); + gl.shaderSource( vertexShader, prefix + shader.vertexShader ); + + gl.compileShader( fragmentShader ); + gl.compileShader( vertexShader ); + + gl.attachShader( program, fragmentShader ); + gl.attachShader( program, vertexShader ); + + gl.linkProgram( program ); + + return program; + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + +} + +CanvasTexture.prototype = Object.create( Texture.prototype ); +CanvasTexture.prototype.constructor = CanvasTexture; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var program, attributes, uniforms; + + var texture; + + // decompose matrixWorld + + var spritePosition = new Vector3(); + var spriteRotation = new Quaternion(); + var spriteScale = new Vector3(); + + function init() { + + var vertices = new Float32Array( [ + - 0.5, - 0.5, 0, 0, + 0.5, - 0.5, 1, 0, + 0.5, 0.5, 1, 1, + - 0.5, 0.5, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + program = createProgram(); + + attributes = { + position: gl.getAttribLocation( program, 'position' ), + uv: gl.getAttribLocation( program, 'uv' ) + }; + + uniforms = { + uvOffset: gl.getUniformLocation( program, 'uvOffset' ), + uvScale: gl.getUniformLocation( program, 'uvScale' ), + + rotation: gl.getUniformLocation( program, 'rotation' ), + scale: gl.getUniformLocation( program, 'scale' ), + + color: gl.getUniformLocation( program, 'color' ), + map: gl.getUniformLocation( program, 'map' ), + opacity: gl.getUniformLocation( program, 'opacity' ), + + modelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ), + projectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ), + + fogType: gl.getUniformLocation( program, 'fogType' ), + fogDensity: gl.getUniformLocation( program, 'fogDensity' ), + fogNear: gl.getUniformLocation( program, 'fogNear' ), + fogFar: gl.getUniformLocation( program, 'fogFar' ), + fogColor: gl.getUniformLocation( program, 'fogColor' ), + fogDepth: gl.getUniformLocation( program, 'fogDepth' ), + + alphaTest: gl.getUniformLocation( program, 'alphaTest' ) + }; + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = 8; + canvas.height = 8; + + var context = canvas.getContext( '2d' ); + context.fillStyle = 'white'; + context.fillRect( 0, 0, 8, 8 ); + + texture = new CanvasTexture( canvas ); + + } + + this.render = function ( sprites, scene, camera ) { + + if ( sprites.length === 0 ) return; + + // setup gl + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.position ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + state.disable( gl.CULL_FACE ); + state.enable( gl.BLEND ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + gl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements ); + + state.activeTexture( gl.TEXTURE0 ); + gl.uniform1i( uniforms.map, 0 ); + + var oldFogType = 0; + var sceneFogType = 0; + var fog = scene.fog; + + if ( fog ) { + + gl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b ); + + if ( fog.isFog ) { + + gl.uniform1f( uniforms.fogNear, fog.near ); + gl.uniform1f( uniforms.fogFar, fog.far ); + + gl.uniform1i( uniforms.fogType, 1 ); + oldFogType = 1; + sceneFogType = 1; + + } else if ( fog.isFogExp2 ) { + + gl.uniform1f( uniforms.fogDensity, fog.density ); + + gl.uniform1i( uniforms.fogType, 2 ); + oldFogType = 2; + sceneFogType = 2; + + } + + } else { + + gl.uniform1i( uniforms.fogType, 0 ); + oldFogType = 0; + sceneFogType = 0; + + } + + + // update positions and sort + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + + sprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld ); + sprite.z = - sprite.modelViewMatrix.elements[ 14 ]; + + } + + sprites.sort( painterSortStable ); + + // render all sprites + + var scale = []; + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + var material = sprite.material; + + if ( material.visible === false ) continue; + + sprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined ); + + gl.uniform1f( uniforms.alphaTest, material.alphaTest ); + gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements ); + + sprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale ); + + scale[ 0 ] = spriteScale.x; + scale[ 1 ] = spriteScale.y; + + var fogType = 0; + + if ( scene.fog && material.fog ) { + + fogType = sceneFogType; + + } + + if ( oldFogType !== fogType ) { + + gl.uniform1i( uniforms.fogType, fogType ); + oldFogType = fogType; + + } + + if ( material.map !== null ) { + + gl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y ); + gl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y ); + + } else { + + gl.uniform2f( uniforms.uvOffset, 0, 0 ); + gl.uniform2f( uniforms.uvScale, 1, 1 ); + + } + + gl.uniform1f( uniforms.opacity, material.opacity ); + gl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b ); + + gl.uniform1f( uniforms.rotation, material.rotation ); + gl.uniform2fv( uniforms.scale, scale ); + + state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + state.buffers.depth.setTest( material.depthTest ); + state.buffers.depth.setMask( material.depthWrite ); + state.buffers.color.setMask( material.colorWrite ); + + textures.setTexture2D( material.map || texture, 0 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + sprite.onAfterRender( renderer, scene, camera, undefined, material, undefined ); + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + + state.reset(); + + }; + + function createProgram() { + + var program = gl.createProgram(); + + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + + gl.shaderSource( vertexShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform float rotation;', + 'uniform vec2 scale;', + 'uniform vec2 uvOffset;', + 'uniform vec2 uvScale;', + + 'attribute vec2 position;', + 'attribute vec2 uv;', + + 'varying vec2 vUV;', + 'varying float fogDepth;', + + 'void main() {', + + ' vUV = uvOffset + uv * uvScale;', + + ' vec2 alignedPosition = position * scale;', + + ' vec2 rotatedPosition;', + ' rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;', + ' rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;', + + ' vec4 mvPosition;', + + ' mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );', + ' mvPosition.xy += rotatedPosition;', + + ' gl_Position = projectionMatrix * mvPosition;', + + ' fogDepth = - mvPosition.z;', + + '}' + + ].join( '\n' ) ); + + gl.shaderSource( fragmentShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform vec3 color;', + 'uniform sampler2D map;', + 'uniform float opacity;', + + 'uniform int fogType;', + 'uniform vec3 fogColor;', + 'uniform float fogDensity;', + 'uniform float fogNear;', + 'uniform float fogFar;', + 'uniform float alphaTest;', + + 'varying vec2 vUV;', + 'varying float fogDepth;', + + 'void main() {', + + ' vec4 texture = texture2D( map, vUV );', + + ' gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );', + + ' if ( gl_FragColor.a < alphaTest ) discard;', + + ' if ( fogType > 0 ) {', + + ' float fogFactor = 0.0;', + + ' if ( fogType == 1 ) {', + + ' fogFactor = smoothstep( fogNear, fogFar, fogDepth );', + + ' } else {', + + ' const float LOG2 = 1.442695;', + ' fogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );', + ' fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );', + + ' }', + + ' gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );', + + ' }', + + '}' + + ].join( '\n' ) ); + + gl.compileShader( vertexShader ); + gl.compileShader( fragmentShader ); + + gl.attachShader( program, vertexShader ); + gl.attachShader( program, fragmentShader ); + + gl.linkProgram( program ); + + return program; + + } + + function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return b.id - a.id; + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +var materialId = 0; + +function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + this.lights = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + + this.colorWrite = true; + + this.precision = null; // override the renderer's default precision for this material + + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + + this.dithering = false; + + this.alphaTest = 0; + this.premultipliedAlpha = false; + + this.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer + + this.visible = true; + + this.userData = {}; + + this.needsUpdate = true; + +} + +Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Material, + + isMaterial: true, + + onBeforeCompile: function () {}, + + setValues: function ( values ) { + + if ( values === undefined ) return; + + for ( var key in values ) { + + var newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + var currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else if ( key === 'overdraw' ) { + + // ensure overdraw is backwards-compatible with legacy boolean type + this[ key ] = Number( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + var isRoot = ( meta === undefined || typeof meta === 'string' ); + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + var data = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON' + } + }; + + // standard Material serialization + data.uuid = this.uuid; + data.type = this.type; + + if ( this.name !== '' ) data.name = this.name; + + if ( this.color && this.color.isColor ) data.color = this.color.getHex(); + + if ( this.roughness !== undefined ) data.roughness = this.roughness; + if ( this.metalness !== undefined ) data.metalness = this.metalness; + + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; + + if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); + if ( this.shininess !== undefined ) data.shininess = this.shininess; + if ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat; + if ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness; + + if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; + if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; + if ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; + if ( this.bumpMap && this.bumpMap.isTexture ) { + + data.bumpMap = this.bumpMap.toJSON( meta ).uuid; + data.bumpScale = this.bumpScale; + + } + if ( this.normalMap && this.normalMap.isTexture ) { + + data.normalMap = this.normalMap.toJSON( meta ).uuid; + data.normalScale = this.normalScale.toArray(); + + } + if ( this.displacementMap && this.displacementMap.isTexture ) { + + data.displacementMap = this.displacementMap.toJSON( meta ).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + + } + if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; + if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; + + if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; + if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; + + if ( this.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) data.size = this.size; + if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; + + if ( this.blending !== NormalBlending ) data.blending = this.blending; + if ( this.flatShading === true ) data.flatShading = this.flatShading; + if ( this.side !== FrontSide ) data.side = this.side; + if ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + // rotation (SpriteMaterial) + if ( this.rotation !== 0 ) data.rotation = this.rotation; + + if ( this.linewidth !== 1 ) data.linewidth = this.linewidth; + if ( this.dashSize !== undefined ) data.dashSize = this.dashSize; + if ( this.gapSize !== undefined ) data.gapSize = this.gapSize; + if ( this.scale !== undefined ) data.scale = this.scale; + + if ( this.dithering === true ) data.dithering = true; + + if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; + if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; + if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; + if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; + + if ( this.morphTargets === true ) data.morphTargets = true; + if ( this.skinning === true ) data.skinning = true; + + if ( this.visible === false ) data.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; + + // TODO: Copied from Object3D.toJSON + + function extractFromCache( cache ) { + + var values = []; + + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + if ( isRoot ) { + + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( textures.length > 0 ) data.textures = textures; + if ( images.length > 0 ) data.images = images; + + } + + return data; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + this.lights = source.lights; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + this.vertexColors = source.vertexColors; + + this.opacity = source.opacity; + this.transparent = source.transparent; + + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + + this.colorWrite = source.colorWrite; + + this.precision = source.precision; + + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + + this.dithering = source.dithering; + + this.alphaTest = source.alphaTest; + this.premultipliedAlpha = source.premultipliedAlpha; + + this.overdraw = source.overdraw; + + this.visible = source.visible; + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + this.clipShadows = source.clipShadows; + this.clipIntersection = source.clipIntersection; + + var srcPlanes = source.clippingPlanes, + dstPlanes = null; + + if ( srcPlanes !== null ) { + + var n = srcPlanes.length; + dstPlanes = new Array( n ); + + for ( var i = 0; i !== n; ++ i ) + dstPlanes[ i ] = srcPlanes[ i ].clone(); + + } + + this.clippingPlanes = dstPlanes; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / https://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + +function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDepthMaterial.prototype = Object.create( Material.prototype ); +MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + +MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + +MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + +function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDistanceMaterial.prototype = Object.create( Material.prototype ); +MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + +MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + +MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + +}; + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + +} + +Object.assign( Box3.prototype, { + + isBox3: true, + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromArray: function ( array ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var x = array[ i ]; + var y = array[ i + 1 ]; + var z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromBufferAttribute: function ( attribute ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + var x = attribute.getX( i ); + var y = attribute.getY( i ); + var z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector3(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + setFromObject: function ( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = this.min.z = + Infinity; + this.max.x = this.max.y = this.max.z = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + expandByObject: function () { + + // Computes the world-axis-aligned bounding box of an object (including its children), + // accounting for both the object's, and children's, world transforms + + var scope, i, l; + + var v1 = new Vector3(); + + function traverse( node ) { + + var geometry = node.geometry; + + if ( geometry !== undefined ) { + + if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + + for ( i = 0, l = vertices.length; i < l; i ++ ) { + + v1.copy( vertices[ i ] ); + v1.applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } else if ( geometry.isBufferGeometry ) { + + var attribute = geometry.attributes.position; + + if ( attribute !== undefined ) { + + for ( i = 0, l = attribute.count; i < l; i ++ ) { + + v1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } + + } + + } + + } + + return function expandByObject( object ) { + + scope = this; + + object.updateMatrixWorld( true ); + + object.traverse( traverse ); + + return this; + + }; + + }(), + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y || + point.z < this.min.z || point.z > this.max.z ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y && + this.min.z <= box.min.z && box.max.z <= this.max.z; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector3(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ), + ( point.z - this.min.z ) / ( this.max.z - this.min.z ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 6 splitting planes to rule out intersections. + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y || + box.max.z < this.min.z || box.min.z > this.max.z ? false : true; + + }, + + intersectsSphere: ( function () { + + var closestPoint = new Vector3(); + + return function intersectsSphere( sphere ) { + + // Find the point on the AABB closest to the sphere center. + this.clampPoint( sphere.center, closestPoint ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); + + }; + + } )(), + + intersectsPlane: function ( plane ) { + + // We compute the minimum and maximum dot product values. If those values + // are on the same side (back or front) of the plane, then there is no intersection. + + var min, max; + + if ( plane.normal.x > 0 ) { + + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + + } else { + + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + + } + + if ( plane.normal.y > 0 ) { + + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + + } else { + + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + + } + + if ( plane.normal.z > 0 ) { + + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + + } else { + + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + + } + + return ( min <= plane.constant && max >= plane.constant ); + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector3(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + getBoundingSphere: function () { + + var v1 = new Vector3(); + + return function getBoundingSphere( optionalTarget ) { + + var result = optionalTarget || new Sphere(); + + this.getCenter( result.center ); + + result.radius = this.getSize( v1 ).length() * 0.5; + + return result; + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. + if ( this.isEmpty() ) this.makeEmpty(); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + applyMatrix4: function () { + + var points = [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ]; + + return function applyMatrix4( matrix ) { + + // transform of empty box is an empty box. + if ( this.isEmpty() ) return this; + + // NOTE: I am using a binary pattern to specify all 2^3 combinations below + points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 + points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 + points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 + points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 + points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 + points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 + points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 + points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 + + this.setFromPoints( points ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Sphere( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : 0; + +} + +Object.assign( Sphere.prototype, { + + set: function ( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + }, + + setFromPoints: function () { + + var box = new Box3(); + + return function setFromPoints( points, optionalCenter ) { + + var center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + box.setFromPoints( points ).getCenter( center ); + + } + + var maxRadiusSq = 0; + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + }, + + empty: function () { + + return ( this.radius <= 0 ); + + }, + + containsPoint: function ( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + }, + + distanceToPoint: function ( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + }, + + intersectsSphere: function ( sphere ) { + + var radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsSphere( this ); + + }, + + intersectsPlane: function ( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var deltaLengthSq = this.center.distanceToSquared( point ); + + var result = optionalTarget || new Vector3(); + + result.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + result.sub( this.center ).normalize(); + result.multiplyScalar( this.radius ).add( this.center ); + + } + + return result; + + }, + + getBoundingBox: function ( optionalTarget ) { + + var box = optionalTarget || new Box3(); + + box.set( this.center, this.center ); + box.expandByScalar( this.radius ); + + return box; + + }, + + applyMatrix4: function ( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + }, + + translate: function ( offset ) { + + this.center.add( offset ); + + return this; + + }, + + equals: function ( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Plane( normal, constant ) { + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + +} + +Object.assign( Plane.prototype, { + + set: function ( normal, constant ) { + + this.normal.copy( normal ); + this.constant = constant; + + return this; + + }, + + setComponents: function ( x, y, z, w ) { + + this.normal.set( x, y, z ); + this.constant = w; + + return this; + + }, + + setFromNormalAndCoplanarPoint: function ( normal, point ) { + + this.normal.copy( normal ); + this.constant = - point.dot( this.normal ); + + return this; + + }, + + setFromCoplanarPoints: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function setFromCoplanarPoints( a, b, c ) { + + var normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize(); + + // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? + + this.setFromNormalAndCoplanarPoint( normal, a ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( plane ) { + + this.normal.copy( plane.normal ); + this.constant = plane.constant; + + return this; + + }, + + normalize: function () { + + // Note: will lead to a divide by zero if the plane is invalid. + + var inverseNormalLength = 1.0 / this.normal.length(); + this.normal.multiplyScalar( inverseNormalLength ); + this.constant *= inverseNormalLength; + + return this; + + }, + + negate: function () { + + this.constant *= - 1; + this.normal.negate(); + + return this; + + }, + + distanceToPoint: function ( point ) { + + return this.normal.dot( point ) + this.constant; + + }, + + distanceToSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) - sphere.radius; + + }, + + projectPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + }, + + intersectLine: function () { + + var v1 = new Vector3(); + + return function intersectLine( line, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + var direction = line.delta( v1 ); + + var denominator = this.normal.dot( direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( this.distanceToPoint( line.start ) === 0 ) { + + return result.copy( line.start ); + + } + + // Unsure if this is the correct method to handle this case. + return undefined; + + } + + var t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return result.copy( direction ).multiplyScalar( t ).add( line.start ); + + }; + + }(), + + intersectsLine: function ( line ) { + + // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. + + var startSign = this.distanceToPoint( line.start ); + var endSign = this.distanceToPoint( line.end ); + + return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsPlane( this ); + + }, + + intersectsSphere: function ( sphere ) { + + return sphere.intersectsPlane( this ); + + }, + + coplanarPoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.constant ); + + }, + + applyMatrix4: function () { + + var v1 = new Vector3(); + var m1 = new Matrix3(); + + return function applyMatrix4( matrix, optionalNormalMatrix ) { + + var normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix ); + + var referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix ); + + var normal = this.normal.applyMatrix3( normalMatrix ).normalize(); + + this.constant = - referencePoint.dot( normal ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.constant -= offset.dot( this.normal ); + + return this; + + }, + + equals: function ( plane ) { + + return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / http://clara.io + */ + +function Frustum( p0, p1, p2, p3, p4, p5 ) { + + this.planes = [ + + ( p0 !== undefined ) ? p0 : new Plane(), + ( p1 !== undefined ) ? p1 : new Plane(), + ( p2 !== undefined ) ? p2 : new Plane(), + ( p3 !== undefined ) ? p3 : new Plane(), + ( p4 !== undefined ) ? p4 : new Plane(), + ( p5 !== undefined ) ? p5 : new Plane() + + ]; + +} + +Object.assign( Frustum.prototype, { + + set: function ( p0, p1, p2, p3, p4, p5 ) { + + var planes = this.planes; + + planes[ 0 ].copy( p0 ); + planes[ 1 ].copy( p1 ); + planes[ 2 ].copy( p2 ); + planes[ 3 ].copy( p3 ); + planes[ 4 ].copy( p4 ); + planes[ 5 ].copy( p5 ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( frustum ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + }, + + setFromMatrix: function ( m ) { + + var planes = this.planes; + var me = m.elements; + var me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; + var me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; + var me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; + var me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; + + planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); + planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); + planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); + planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); + planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + }, + + intersectsObject: function () { + + var sphere = new Sphere(); + + return function intersectsObject( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ) + .applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSprite: function () { + + var sphere = new Sphere(); + + return function intersectsSprite( sprite ) { + + sphere.center.set( 0, 0, 0 ); + sphere.radius = 0.7071067811865476; + sphere.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + var planes = this.planes; + var center = sphere.center; + var negRadius = - sphere.radius; + + for ( var i = 0; i < 6; i ++ ) { + + var distance = planes[ i ].distanceToPoint( center ); + + if ( distance < negRadius ) { + + return false; + + } + + } + + return true; + + }, + + intersectsBox: function () { + + var p1 = new Vector3(), + p2 = new Vector3(); + + return function intersectsBox( box ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + var plane = planes[ i ]; + + p1.x = plane.normal.x > 0 ? box.min.x : box.max.x; + p2.x = plane.normal.x > 0 ? box.max.x : box.min.x; + p1.y = plane.normal.y > 0 ? box.min.y : box.max.y; + p2.y = plane.normal.y > 0 ? box.max.y : box.min.y; + p1.z = plane.normal.z > 0 ? box.min.z : box.max.z; + p2.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + var d1 = plane.distanceToPoint( p1 ); + var d2 = plane.distanceToPoint( p2 ); + + // if both outside plane, no intersection + + if ( d1 < 0 && d2 < 0 ) { + + return false; + + } + + } + + return true; + + }; + + }(), + + containsPoint: function ( point ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + if ( planes[ i ].distanceToPoint( point ) < 0 ) { + + return false; + + } + + } + + return true; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + var _frustum = new Frustum(), + _projScreenMatrix = new Matrix4(), + + _shadowMapSize = new Vector2(), + _maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ), + + _lookTarget = new Vector3(), + _lightPositionWorld = new Vector3(), + + _MorphingFlag = 1, + _SkinningFlag = 2, + + _NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1, + + _depthMaterials = new Array( _NumberOfMaterialVariants ), + _distanceMaterials = new Array( _NumberOfMaterialVariants ), + + _materialCache = {}; + + var cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + var cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + var cube2DViewPorts = [ + new Vector4(), new Vector4(), new Vector4(), + new Vector4(), new Vector4(), new Vector4() + ]; + + // init + + for ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) { + + var useMorphing = ( i & _MorphingFlag ) !== 0; + var useSkinning = ( i & _SkinningFlag ) !== 0; + + var depthMaterial = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ i ] = depthMaterial; + + // + + var distanceMaterial = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ i ] = distanceMaterial; + + } + + // + + var scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.renderReverseSided = true; + this.renderSingleSided = true; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + // TODO Clean up (needed in case of contextlost) + var _gl = _renderer.context; + var _state = _renderer.state; + + // Set GL state for depth map. + _state.disable( _gl.BLEND ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + var faceCount; + + for ( var i = 0, il = lights.length; i < il; i ++ ) { + + var light = lights[ i ]; + var shadow = light.shadow; + var isPointLight = light && light.isPointLight; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + var shadowCamera = shadow.camera; + + _shadowMapSize.copy( shadow.mapSize ); + _shadowMapSize.min( _maxShadowMapSize ); + + if ( isPointLight ) { + + var vpWidth = _shadowMapSize.x; + var vpHeight = _shadowMapSize.y; + + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + cube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight ); + // negative X + cube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight ); + // positive Z + cube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight ); + // negative Z + cube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight ); + // positive Y + cube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight ); + // negative Y + cube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight ); + + _shadowMapSize.x *= 4.0; + _shadowMapSize.y *= 2.0; + + } + + if ( shadow.map === null ) { + + var pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadowCamera.updateProjectionMatrix(); + + } + + if ( shadow.isSpotLightShadow ) { + + shadow.update( light ); + + } + + var shadowMap = shadow.map; + var shadowMatrix = shadow.matrix; + + _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( _lightPositionWorld ); + + if ( isPointLight ) { + + faceCount = 6; + + // for point lights we set the shadow matrix to be a translation-only matrix + // equal to inverse of the light's position + + shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z ); + + } else { + + faceCount = 1; + + _lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + // compute shadow matrix + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + } + + _renderer.setRenderTarget( shadowMap ); + _renderer.clear(); + + // render shadow map for each cube face (if omni-directional) or + // run a single pass if not + + for ( var face = 0; face < faceCount; face ++ ) { + + if ( isPointLight ) { + + _lookTarget.copy( shadowCamera.position ); + _lookTarget.add( cubeDirections[ face ] ); + shadowCamera.up.copy( cubeUps[ face ] ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + var vpDimensions = cube2DViewPorts[ face ]; + _state.viewport( vpDimensions ); + + } + + // update camera matrices and frustum + + _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + // set object matrices & frustum culling + + renderObject( scene, camera, shadowCamera, isPointLight ); + + } + + } + + scope.needsUpdate = false; + + }; + + function getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) { + + var geometry = object.geometry; + + var result = null; + + var materialVariants = _depthMaterials; + var customMaterial = object.customDepthMaterial; + + if ( isPointLight ) { + + materialVariants = _distanceMaterials; + customMaterial = object.customDistanceMaterial; + + } + + if ( ! customMaterial ) { + + var useMorphing = false; + + if ( material.morphTargets ) { + + if ( geometry && geometry.isBufferGeometry ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } else if ( geometry && geometry.isGeometry ) { + + useMorphing = geometry.morphTargets && geometry.morphTargets.length > 0; + + } + + } + + if ( object.isSkinnedMesh && material.skinning === false ) { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + var useSkinning = object.isSkinnedMesh && material.skinning; + + var variantIndex = 0; + + if ( useMorphing ) variantIndex |= _MorphingFlag; + if ( useSkinning ) variantIndex |= _SkinningFlag; + + result = materialVariants[ variantIndex ]; + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + var keyA = result.uuid, keyB = material.uuid; + + var materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + var cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + var side = material.side; + + if ( scope.renderSingleSided && side == DoubleSide ) { + + side = FrontSide; + + } + + if ( scope.renderReverseSided ) { + + if ( side === FrontSide ) side = BackSide; + else if ( side === BackSide ) side = FrontSide; + + } + + result.side = side; + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( isPointLight && result.isMeshDistanceMaterial ) { + + result.referencePosition.copy( lightPositionWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, isPointLight ) { + + if ( object.visible === false ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + var geometry = _objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var k = 0, kl = groups.length; k < kl; k ++ ) { + + var group = groups[ k ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, isPointLight ); + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLAttributes( gl ) { + + var buffers = {}; + + function createBuffer( attribute, bufferType ) { + + var array = attribute.array; + var usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW; + + var buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + var type = gl.FLOAT; + + if ( array instanceof Float32Array ) { + + type = gl.FLOAT; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + type = gl.UNSIGNED_SHORT; + + } else if ( array instanceof Int16Array ) { + + type = gl.SHORT; + + } else if ( array instanceof Uint32Array ) { + + type = gl.UNSIGNED_INT; + + } else if ( array instanceof Int32Array ) { + + type = gl.INT; + + } else if ( array instanceof Int8Array ) { + + type = gl.BYTE; + + } else if ( array instanceof Uint8Array ) { + + type = gl.UNSIGNED_BYTE; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + var array = attribute.array; + var updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( attribute.dynamic === false ) { + + gl.bufferData( bufferType, array, gl.STATIC_DRAW ); + + } else if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else if ( updateRange.count === 0 ) { + + console.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + updateRange.count = - 1; // reset range + + } + + } + + // + + function get( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + return buffers[ attribute.uuid ]; + + } + + function remove( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data ) { + + gl.deleteBuffer( data.buffer ); + + delete buffers[ attribute.uuid ]; + + } + + } + + function update( attribute, bufferType ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data === undefined ) { + + buffers[ attribute.uuid ] = createBuffer( attribute, bufferType ); + + } else if ( data.version < attribute.version ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Euler( x, y, z, order ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._order = order || Euler.DefaultOrder; + +} + +Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + +Euler.DefaultOrder = 'XYZ'; + +Object.defineProperties( Euler.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + order: { + + get: function () { + + return this._order; + + }, + + set: function ( value ) { + + this._order = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Euler.prototype, { + + isEuler: true, + + set: function ( x, y, z, order ) { + + this._x = x; + this._y = y; + this._z = z; + this._order = order || this._order; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._order ); + + }, + + copy: function ( euler ) { + + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m, order, update ) { + + var clamp = _Math.clamp; + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements; + var m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; + var m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; + var m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + order = order || this._order; + + if ( order === 'XYZ' ) { + + this._y = Math.asin( clamp( m13, - 1, 1 ) ); + + if ( Math.abs( m13 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m33 ); + this._z = Math.atan2( - m12, m11 ); + + } else { + + this._x = Math.atan2( m32, m22 ); + this._z = 0; + + } + + } else if ( order === 'YXZ' ) { + + this._x = Math.asin( - clamp( m23, - 1, 1 ) ); + + if ( Math.abs( m23 ) < 0.99999 ) { + + this._y = Math.atan2( m13, m33 ); + this._z = Math.atan2( m21, m22 ); + + } else { + + this._y = Math.atan2( - m31, m11 ); + this._z = 0; + + } + + } else if ( order === 'ZXY' ) { + + this._x = Math.asin( clamp( m32, - 1, 1 ) ); + + if ( Math.abs( m32 ) < 0.99999 ) { + + this._y = Math.atan2( - m31, m33 ); + this._z = Math.atan2( - m12, m22 ); + + } else { + + this._y = 0; + this._z = Math.atan2( m21, m11 ); + + } + + } else if ( order === 'ZYX' ) { + + this._y = Math.asin( - clamp( m31, - 1, 1 ) ); + + if ( Math.abs( m31 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m33 ); + this._z = Math.atan2( m21, m11 ); + + } else { + + this._x = 0; + this._z = Math.atan2( - m12, m22 ); + + } + + } else if ( order === 'YZX' ) { + + this._z = Math.asin( clamp( m21, - 1, 1 ) ); + + if ( Math.abs( m21 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m22 ); + this._y = Math.atan2( - m31, m11 ); + + } else { + + this._x = 0; + this._y = Math.atan2( m13, m33 ); + + } + + } else if ( order === 'XZY' ) { + + this._z = Math.asin( - clamp( m12, - 1, 1 ) ); + + if ( Math.abs( m12 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m22 ); + this._y = Math.atan2( m13, m11 ); + + } else { + + this._x = Math.atan2( - m23, m33 ); + this._y = 0; + + } + + } else { + + console.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order ); + + } + + this._order = order; + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromQuaternion: function () { + + var matrix = new Matrix4(); + + return function setFromQuaternion( q, order, update ) { + + matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( matrix, order, update ); + + }; + + }(), + + setFromVector3: function ( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + }, + + reorder: function () { + + // WARNING: this discards revolution information -bhouston + + var q = new Quaternion(); + + return function reorder( newOrder ) { + + q.setFromEuler( this ); + + return this.setFromQuaternion( q, newOrder ); + + }; + + }(), + + equals: function ( euler ) { + + return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); + + }, + + fromArray: function ( array ) { + + this._x = array[ 0 ]; + this._y = array[ 1 ]; + this._z = array[ 2 ]; + if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._order; + + return array; + + }, + + toVector3: function ( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Layers() { + + this.mask = 1 | 0; + +} + +Object.assign( Layers.prototype, { + + set: function ( channel ) { + + this.mask = 1 << channel | 0; + + }, + + enable: function ( channel ) { + + this.mask |= 1 << channel | 0; + + }, + + toggle: function ( channel ) { + + this.mask ^= 1 << channel | 0; + + }, + + disable: function ( channel ) { + + this.mask &= ~ ( 1 << channel | 0 ); + + }, + + test: function ( layers ) { + + return ( this.mask & layers.mask ) !== 0; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author elephantatwork / www.elephantatwork.ch + */ + +var object3DId = 0; + +function Object3D() { + + Object.defineProperty( this, 'id', { value: object3DId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.clone(); + + var position = new Vector3(); + var rotation = new Euler(); + var quaternion = new Quaternion(); + var scale = new Vector3( 1, 1, 1 ); + + function onRotationChange() { + + quaternion.setFromEuler( rotation, false ); + + } + + function onQuaternionChange() { + + rotation.setFromQuaternion( quaternion, undefined, false ); + + } + + rotation.onChange( onRotationChange ); + quaternion.onChange( onQuaternionChange ); + + Object.defineProperties( this, { + position: { + enumerable: true, + value: position + }, + rotation: { + enumerable: true, + value: rotation + }, + quaternion: { + enumerable: true, + value: quaternion + }, + scale: { + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + } ); + + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + + this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; + this.matrixWorldNeedsUpdate = false; + + this.layers = new Layers(); + this.visible = true; + + this.castShadow = false; + this.receiveShadow = false; + + this.frustumCulled = true; + this.renderOrder = 0; + + this.userData = {}; + +} + +Object3D.DefaultUp = new Vector3( 0, 1, 0 ); +Object3D.DefaultMatrixAutoUpdate = true; + +Object3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Object3D, + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix: function ( matrix ) { + + this.matrix.multiplyMatrices( matrix, this.matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function () { + + // rotate object on axis in object space + // axis is assumed to be normalized + + var q1 = new Quaternion(); + + return function rotateOnAxis( axis, angle ) { + + q1.setFromAxisAngle( axis, angle ); + + this.quaternion.multiply( q1 ); + + return this; + + }; + + }(), + + rotateOnWorldAxis: function () { + + // rotate object on axis in world space + // axis is assumed to be normalized + // method assumes no rotated parent + + var q1 = new Quaternion(); + + return function rotateOnWorldAxis( axis, angle ) { + + q1.setFromAxisAngle( axis, angle ); + + this.quaternion.premultiply( q1 ); + + return this; + + }; + + }(), + + rotateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function rotateX( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function rotateY( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function rotateZ( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + translateOnAxis: function () { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + var v1 = new Vector3(); + + return function translateOnAxis( axis, distance ) { + + v1.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( v1.multiplyScalar( distance ) ); + + return this; + + }; + + }(), + + translateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function translateX( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function translateY( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function translateZ( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function () { + + var m1 = new Matrix4(); + + return function worldToLocal( vector ) { + + return vector.applyMatrix4( m1.getInverse( this.matrixWorld ) ); + + }; + + }(), + + lookAt: function () { + + // This method does not support objects with rotated and/or translated parent(s) + + var m1 = new Matrix4(); + var vector = new Vector3(); + + return function lookAt( x, y, z ) { + + if ( x.isVector3 ) { + + vector.copy( x ); + + } else { + + vector.set( x, y, z ); + + } + + if ( this.isCamera ) { + + m1.lookAt( this.position, vector, this.up ); + + } else { + + m1.lookAt( vector, this.position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( m1 ); + + }; + + }(), + + add: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.add( arguments[ i ] ); + + } + + return this; + + } + + if ( object === this ) { + + console.error( "THREE.Object3D.add: object can't be added as a child of itself.", object ); + return this; + + } + + if ( ( object && object.isObject3D ) ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + object.dispatchEvent( { type: 'added' } ); + + this.children.push( object ); + + } else { + + console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); + + } + + return this; + + }, + + remove: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.remove( arguments[ i ] ); + + } + + return this; + + } + + var index = this.children.indexOf( object ); + + if ( index !== - 1 ) { + + object.parent = null; + + object.dispatchEvent( { type: 'removed' } ); + + this.children.splice( index, 1 ); + + } + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( name, value ) { + + if ( this[ name ] === value ) return this; + + for ( var i = 0, l = this.children.length; i < l; i ++ ) { + + var child = this.children[ i ]; + var object = child.getObjectByProperty( name, value ); + + if ( object !== undefined ) { + + return object; + + } + + } + + return undefined; + + }, + + getWorldPosition: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + return result.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function () { + + var position = new Vector3(); + var scale = new Vector3(); + + return function getWorldQuaternion( optionalTarget ) { + + var result = optionalTarget || new Quaternion(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, result, scale ); + + return result; + + }; + + }(), + + getWorldRotation: function () { + + var quaternion = new Quaternion(); + + return function getWorldRotation( optionalTarget ) { + + var result = optionalTarget || new Euler(); + + this.getWorldQuaternion( quaternion ); + + return result.setFromQuaternion( quaternion, this.rotation.order, false ); + + }; + + }(), + + getWorldScale: function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + + return function getWorldScale( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, quaternion, result ); + + return result; + + }; + + }(), + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( callback ) { + + if ( this.visible === false ) return; + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverseVisible( callback ); + + } + + }, + + traverseAncestors: function ( callback ) { + + var parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( force ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + if ( this.matrixWorldNeedsUpdate || force ) { + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + + } + + // update children + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + toJSON: function ( meta ) { + + // meta is a string when called from JSON.stringify + var isRootObject = ( meta === undefined || typeof meta === 'string' ); + + var output = {}; + + // meta is a hash used to collect geometries, materials. + // not providing it implies that this is the root object + // being serialized. + if ( isRootObject ) { + + // initialize meta obj + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {} + }; + + output.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON' + }; + + } + + // standard Object3D serialization + + var object = {}; + + object.uuid = this.uuid; + object.type = this.type; + + if ( this.name !== '' ) object.name = this.name; + if ( this.castShadow === true ) object.castShadow = true; + if ( this.receiveShadow === true ) object.receiveShadow = true; + if ( this.visible === false ) object.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.matrix = this.matrix.toArray(); + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + if ( this.geometry !== undefined ) { + + object.geometry = serialize( meta.geometries, this.geometry ); + + var parameters = this.geometry.parameters; + + if ( parameters !== undefined && parameters.shapes !== undefined ) { + + var shapes = parameters.shapes; + + if ( Array.isArray( shapes ) ) { + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + + serialize( meta.shapes, shape ); + + } + + } else { + + serialize( meta.shapes, shapes ); + + } + + } + + } + + if ( this.material !== undefined ) { + + if ( Array.isArray( this.material ) ) { + + var uuids = []; + + for ( var i = 0, l = this.material.length; i < l; i ++ ) { + + uuids.push( serialize( meta.materials, this.material[ i ] ) ); + + } + + object.material = uuids; + + } else { + + object.material = serialize( meta.materials, this.material ); + + } + + } + + // + + if ( this.children.length > 0 ) { + + object.children = []; + + for ( var i = 0; i < this.children.length; i ++ ) { + + object.children.push( this.children[ i ].toJSON( meta ).object ); + + } + + } + + if ( isRootObject ) { + + var geometries = extractFromCache( meta.geometries ); + var materials = extractFromCache( meta.materials ); + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + var shapes = extractFromCache( meta.shapes ); + + if ( geometries.length > 0 ) output.geometries = geometries; + if ( materials.length > 0 ) output.materials = materials; + if ( textures.length > 0 ) output.textures = textures; + if ( images.length > 0 ) output.images = images; + if ( shapes.length > 0 ) output.shapes = shapes; + + } + + output.object = object; + + return output; + + // extract data from the cache hash + // remove metadata on each item + // and return as array + function extractFromCache( cache ) { + + var values = []; + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + return values; + + } + + }, + + clone: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( source, recursive ) { + + if ( recursive === undefined ) recursive = true; + + this.name = source.name; + + this.up.copy( source.up ); + + this.position.copy( source.position ); + this.quaternion.copy( source.quaternion ); + this.scale.copy( source.scale ); + + this.matrix.copy( source.matrix ); + this.matrixWorld.copy( source.matrixWorld ); + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + + this.layers.mask = source.layers.mask; + this.visible = source.visible; + + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + if ( recursive === true ) { + + for ( var i = 0; i < source.children.length; i ++ ) { + + var child = source.children[ i ]; + this.add( child.clone() ); + + } + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author WestLangley / http://github.com/WestLangley +*/ + +function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + this.projectionMatrix = new Matrix4(); + +} + +Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + this.projectionMatrix.copy( source.projectionMatrix ); + + return this; + + }, + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.getInverse( this.matrixWorld ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author arose / http://github.com/arose + */ + +function OrthographicCamera( left, right, top, bottom, near, far ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + + this.near = ( near !== undefined ) ? near : 0.1; + this.far = ( far !== undefined ) ? far : 2000; + + this.updateProjectionMatrix(); + +} + +OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var dx = ( this.right - this.left ) / ( 2 * this.zoom ); + var dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + var cx = ( this.right + this.left ) / 2; + var cy = ( this.top + this.bottom ) / 2; + + var left = cx - dx; + var right = cx + dx; + var top = cy + dy; + var bottom = cy - dy; + + if ( this.view !== null && this.view.enabled ) { + + var zoomW = this.zoom / ( this.view.width / this.view.fullWidth ); + var zoomH = this.zoom / ( this.view.height / this.view.fullHeight ); + var scaleW = ( this.right - this.left ) / this.view.width; + var scaleH = ( this.top - this.bottom ) / this.view.height; + + left += scaleW * ( this.view.offsetX / zoomW ); + right = left + scaleW * ( this.view.width / zoomW ); + top -= scaleH * ( this.view.offsetY / zoomH ); + bottom = top - scaleH * ( this.view.height / zoomH ); + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Face3( a, b, c, normal, color, materialIndex ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex !== undefined ? materialIndex : 0; + +} + +Object.assign( Face3.prototype, { + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) { + + this.vertexColors[ i ] = source.vertexColors[ i ].clone(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author bhouston / http://clara.io + */ + +var geometryId = 0; // Geometry uses even numbers as Id + +function Geometry() { + + Object.defineProperty( this, 'id', { value: geometryId += 2 } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Geometry, + + isGeometry: true, + + applyMatrix: function ( matrix ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { + + var vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( var i = 0, il = this.faces.length; i < il; i ++ ) { + + var face = this.faces[ i ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + fromBufferGeometry: function ( geometry ) { + + var scope = this; + + var indices = geometry.index !== null ? geometry.index.array : undefined; + var attributes = geometry.attributes; + + var positions = attributes.position.array; + var normals = attributes.normal !== undefined ? attributes.normal.array : undefined; + var colors = attributes.color !== undefined ? attributes.color.array : undefined; + var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined; + var uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined; + + if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = []; + + var tempNormals = []; + var tempUVs = []; + var tempUVs2 = []; + + for ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) { + + scope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) ); + + if ( normals !== undefined ) { + + tempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) ); + + } + + if ( colors !== undefined ) { + + scope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) ); + + } + + if ( uvs !== undefined ) { + + tempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) ); + + } + + if ( uvs2 !== undefined ) { + + tempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : []; + var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : []; + + var face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uvs !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] ); + + } + + if ( uvs2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] ); + + } + + } + + var groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( var i = 0; i < groups.length; i ++ ) { + + var group = groups[ i ]; + + var start = group.start; + var count = group.count; + + for ( var j = start, jl = start + count; j < jl; j += 3 ) { + + if ( indices !== undefined ) { + + addFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( indices !== undefined ) { + + for ( var i = 0; i < indices.length; i += 3 ) { + + addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] ); + + } + + } else { + + for ( var i = 0; i < positions.length / 3; i += 3 ) { + + addFace( i, i + 1, i + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + var center = this.boundingSphere.center; + var radius = this.boundingSphere.radius; + + var s = radius === 0 ? 1 : 1.0 / radius; + + var matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + var cb = new Vector3(), ab = new Vector3(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted ) { + + if ( areaWeighted === undefined ) areaWeighted = true; + + var v, vl, f, fl, face, vertices; + + vertices = new Array( this.vertices.length ); + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + var vA, vB, vC; + var cb = new Vector3(), ab = new Vector3(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vA = this.vertices[ face.a ]; + vB = this.vertices[ face.b ]; + vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vertices[ face.a ].add( face.normal ); + vertices[ face.b ].add( face.normal ); + vertices[ face.c ].add( face.normal ); + + } + + } + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ].normalize(); + + } + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face.a ] ); + vertexNormals[ 1 ].copy( vertices[ face.b ] ); + vertexNormals[ 2 ].copy( vertices[ face.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face.a ].clone(); + vertexNormals[ 1 ] = vertices[ face.b ].clone(); + vertexNormals[ 2 ] = vertices[ face.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + var f, fl, face; + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + var i, il, f, fl, face; + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; + + for ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + var tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( i = 0, il = this.morphTargets.length; i < il; i ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i ] ) { + + this.morphNormals[ i ] = {}; + this.morphNormals[ i ].faceNormals = []; + this.morphNormals[ i ].vertexNormals = []; + + var dstNormalsFace = this.morphNormals[ i ].faceNormals; + var dstNormalsVertex = this.morphNormals[ i ].vertexNormals; + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + faceNormal = new Vector3(); + vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + var morphNormals = this.morphNormals[ i ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + faceNormal = morphNormals.faceNormals[ f ]; + vertexNormals = morphNormals.vertexNormals[ f ]; + + faceNormal.copy( face.normal ); + + vertexNormals.a.copy( face.vertexNormals[ 0 ] ); + vertexNormals.b.copy( face.vertexNormals[ 1 ] ); + vertexNormals.c.copy( face.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + face.normal = face.__originalFaceNormal; + face.vertexNormals = face.__originalVertexNormals; + + } + + }, + + computeLineDistances: function () { + + var d = 0; + var vertices = this.vertices; + + for ( var i = 0, il = vertices.length; i < il; i ++ ) { + + if ( i > 0 ) { + + d += vertices[ i ].distanceTo( vertices[ i - 1 ] ); + + } + + this.lineDistances[ i ] = d; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + var normalMatrix, + vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + uvs1 = this.faceVertexUvs[ 0 ], + uvs2 = geometry.faceVertexUvs[ 0 ], + colors1 = this.colors, + colors2 = geometry.colors; + + if ( materialIndexOffset === undefined ) materialIndexOffset = 0; + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( var i = 0, il = vertices2.length; i < il; i ++ ) { + + var vertex = vertices2[ i ]; + + var vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( var i = 0, il = colors2.length; i < il; i ++ ) { + + colors1.push( colors2[ i ].clone() ); + + } + + // faces + + for ( i = 0, il = faces2.length; i < il; i ++ ) { + + var face = faces2[ i ], faceCopy, normal, color, + faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { + + color = faceVertexColors[ j ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( i = 0, il = uvs2.length; i < il; i ++ ) { + + var uv = uvs2[ i ], uvCopy = []; + + if ( uv === undefined ) { + + continue; + + } + + for ( var j = 0, jl = uv.length; j < jl; j ++ ) { + + uvCopy.push( uv[ j ].clone() ); + + } + + uvs1.push( uvCopy ); + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + mesh.matrixAutoUpdate && mesh.updateMatrix(); + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function () { + + var verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + var unique = [], changes = []; + + var v, key; + var precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001 + var precision = Math.pow( 10, precisionPoints ); + var i, il, face; + var indices, j, jl; + + for ( i = 0, il = this.vertices.length; i < il; i ++ ) { + + v = this.vertices[ i ]; + key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + var faceIndicesToRemove = []; + + for ( i = 0, il = this.faces.length; i < il; i ++ ) { + + face = this.faces[ i ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( var n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i ); + break; + + } + + } + + } + + for ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { + + var idx = faceIndicesToRemove[ i ]; + + this.faces.splice( idx, 1 ); + + for ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + var diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + setFromPoints: function ( points ) { + + this.vertices = []; + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return this; + + }, + + sortFacesByMaterialIndex: function () { + + var faces = this.faces; + var length = faces.length; + + // tag faces + + for ( var i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + var uvs1 = this.faceVertexUvs[ 0 ]; + var uvs2 = this.faceVertexUvs[ 1 ]; + + var newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( var i = 0; i < length; i ++ ) { + + var id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + var vertices = []; + + for ( var i = 0; i < this.vertices.length; i ++ ) { + + var vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + var faces = []; + var normals = []; + var normalsHash = {}; + var colors = []; + var colorsHash = {}; + var uvs = []; + var uvsHash = {}; + + for ( var i = 0; i < this.faces.length; i ++ ) { + + var face = this.faces[ i ]; + + var hasMaterial = true; + var hasFaceUv = false; // deprecated + var hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; + var hasFaceNormal = face.normal.length() > 0; + var hasFaceVertexNormal = face.vertexNormals.length > 0; + var hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + var hasFaceVertexColor = face.vertexColors.length > 0; + + var faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + var faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + var vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + var vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + var hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + var hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + var hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) data.data.colors = colors; + if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + var i, il, j, jl, k, kl; + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + var vertices = source.vertices; + + for ( i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + var colors = source.colors; + + for ( i = 0, il = colors.length; i < il; i ++ ) { + + this.colors.push( colors[ i ].clone() ); + + } + + // faces + + var faces = source.faces; + + for ( i = 0, il = faces.length; i < il; i ++ ) { + + this.faces.push( faces[ i ].clone() ); + + } + + // face vertex uvs + + for ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { + + var faceVertexUvs = source.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) { + + this.faceVertexUvs[ i ] = []; + + } + + for ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + var uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( k = 0, kl = uvs.length; k < kl; k ++ ) { + + var uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + // morph targets + + var morphTargets = source.morphTargets; + + for ( i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = {}; + morphTarget.name = morphTargets[ i ].name; + + // vertices + + if ( morphTargets[ i ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { + + morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { + + morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + var morphNormals = source.morphNormals; + + for ( i = 0, il = morphNormals.length; i < il; i ++ ) { + + var morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { + + var srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; + var destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + var skinWeights = source.skinWeights; + + for ( i = 0, il = skinWeights.length; i < il; i ++ ) { + + this.skinWeights.push( skinWeights[ i ].clone() ); + + } + + // skin indices + + var skinIndices = source.skinIndices; + + for ( i = 0, il = skinIndices.length; i < il; i ++ ) { + + this.skinIndices.push( skinIndices[ i ].clone() ); + + } + + // line distances + + var lineDistances = source.lineDistances; + + for ( i = 0, il = lineDistances.length; i < il; i ++ ) { + + this.lineDistances.push( lineDistances[ i ] ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.uuid = _Math.generateUUID(); + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.itemSize : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.itemSize; + index2 *= attribute.itemSize; + + for ( var i = 0, l = this.itemSize; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + copyArray: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = colors.length; i < l; i ++ ) { + + var color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyIndicesArray: function ( indices ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + var index = indices[ i ]; + + array[ offset ++ ] = index.a; + array[ offset ++ ] = index.b; + array[ offset ++ ] = index.c; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + } + +} ); + +// + +function Int8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); + +} + +Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + +function Uint8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); + +} + +Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + +function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); + +} + +Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + +function Int16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); + +} + +Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + +function Uint16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + +} + +Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + +function Int32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); + +} + +Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + +function Uint32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); + +} + +Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + +function Float32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); + +} + +Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + +function Float64BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); + +} + +Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectGeometry() { + + this.indices = []; + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Object.assign( DirectGeometry.prototype, { + + computeGroups: function ( geometry ) { + + var group; + var groups = []; + var materialIndex = undefined; + + var faces = geometry.faces; + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + }, + + fromGeometry: function ( geometry ) { + + var faces = geometry.faces; + var vertices = geometry.vertices; + var faceVertexUvs = geometry.faceVertexUvs; + + var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + var morphTargets = geometry.morphTargets; + var morphTargetsLength = morphTargets.length; + + var morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( var i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = []; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + var morphNormals = geometry.morphNormals; + var morphNormalsLength = morphNormals.length; + + var morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( var i = 0; i < morphNormalsLength; i ++ ) { + + morphTargetsNormal[ i ] = []; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + var skinIndices = geometry.skinIndices; + var skinWeights = geometry.skinWeights; + + var hasSkinIndices = skinIndices.length === vertices.length; + var hasSkinWeights = skinWeights.length === vertices.length; + + // + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + var normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + var vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + var color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + var vertexUvs = faceVertexUvs[ 0 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + var vertexUvs = faceVertexUvs[ 1 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( var j = 0; j < morphTargetsLength; j ++ ) { + + var morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( var j = 0; j < morphNormalsLength; j ++ ) { + + var morphNormal = morphNormals[ j ].vertexNormals[ i ]; + + morphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + var max = array[ 0 ]; + + for ( var i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + +} + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +var bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id + +function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: bufferGeometryId += 2 } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'BufferGeometry'; + + this.index = null; + this.attributes = {}; + + this.morphAttributes = {}; + + this.groups = []; + + this.boundingBox = null; + this.boundingSphere = null; + + this.drawRange = { start: 0, count: Infinity }; + +} + +BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: BufferGeometry, + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + }, + + addAttribute: function ( name, attribute ) { + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + return; + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return; + + } + + this.attributes[ name ] = attribute; + + return this; + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + removeAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex !== undefined ? materialIndex : 0 + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix: function ( matrix ) { + + var position = this.attributes.position; + + if ( position !== undefined ) { + + matrix.applyToBufferAttribute( position ); + position.needsUpdate = true; + + } + + var normal = this.attributes.normal; + + if ( normal !== undefined ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + normalMatrix.applyToBufferAttribute( normal ); + normal.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + var geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + var positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + var colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + var lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + setFromPoints: function ( points ) { + + var position = []; + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + position.push( point.x, point.y, point.z || 0 ); + + } + + this.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) ); + + return this; + + }, + + updateFromObject: function ( object ) { + + var geometry = object.geometry; + + if ( object.isMesh ) { + + var direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + var attribute; + + if ( geometry.verticesNeedUpdate === true ) { + + attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + attribute = this.attributes.normal; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.normals ); + attribute.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + attribute = this.attributes.color; + + if ( attribute !== undefined ) { + + attribute.copyColorsArray( geometry.colors ); + attribute.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + attribute = this.attributes.uv; + + if ( attribute !== undefined ) { + + attribute.copyVector2sArray( geometry.uvs ); + attribute.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + attribute = this.attributes.lineDistance; + + if ( attribute !== undefined ) { + + attribute.copyArray( geometry.lineDistances ); + attribute.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + var positions = new Float32Array( geometry.vertices.length * 3 ); + this.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + var normals = new Float32Array( geometry.normals.length * 3 ); + this.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + var colors = new Float32Array( geometry.colors.length * 3 ); + this.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + var uvs = new Float32Array( geometry.uvs.length * 2 ); + this.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + var uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + if ( geometry.indices.length > 0 ) { + + var TypeArray = arrayMax( geometry.indices ) > 65535 ? Uint32Array : Uint16Array; + var indices = new TypeArray( geometry.indices.length * 3 ); + this.setIndex( new BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( var name in geometry.morphTargets ) { + + var array = []; + var morphTargets = geometry.morphTargets[ name ]; + + for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { + + var morphTarget = morphTargets[ i ]; + + var attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 ); + + array.push( attribute.copyVector3sArray( morphTarget ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + var skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + var skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + var position = this.attributes.position; + + if ( position !== undefined ) { + + this.boundingBox.setFromBufferAttribute( position ); + + } else { + + this.boundingBox.makeEmpty(); + + } + + if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); + + } + + }, + + computeBoundingSphere: function () { + + var box = new Box3(); + var vector = new Vector3(); + + return function computeBoundingSphere() { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + var position = this.attributes.position; + + if ( position ) { + + var center = this.boundingSphere.center; + + box.setFromBufferAttribute( position ); + box.getCenter( center ); + + // hoping to find a boundingSphere with a radius smaller than the + // boundingSphere of the boundingBox: sqrt(3) smaller in the best case + + var maxRadiusSq = 0; + + for ( var i = 0, il = position.count; i < il; i ++ ) { + + vector.x = position.getX( i ); + vector.y = position.getY( i ); + vector.z = position.getZ( i ); + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); + + } + + } + + }; + + }(), + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + var index = this.index; + var attributes = this.attributes; + var groups = this.groups; + + if ( attributes.position ) { + + var positions = attributes.position.array; + + if ( attributes.normal === undefined ) { + + this.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) ); + + } else { + + // reset existing normals to zero + + var array = attributes.normal.array; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + array[ i ] = 0; + + } + + } + + var normals = attributes.normal.array; + + var vA, vB, vC; + var pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + var cb = new Vector3(), ab = new Vector3(); + + // indexed elements + + if ( index ) { + + var indices = index.array; + + if ( groups.length === 0 ) { + + this.addGroup( 0, indices.length ); + + } + + for ( var j = 0, jl = groups.length; j < jl; ++ j ) { + + var group = groups[ j ]; + + var start = group.start; + var count = group.count; + + for ( var i = start, il = start + count; i < il; i += 3 ) { + + vA = indices[ i + 0 ] * 3; + vB = indices[ i + 1 ] * 3; + vC = indices[ i + 2 ] * 3; + + pA.fromArray( positions, vA ); + pB.fromArray( positions, vB ); + pC.fromArray( positions, vC ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ vA ] += cb.x; + normals[ vA + 1 ] += cb.y; + normals[ vA + 2 ] += cb.z; + + normals[ vB ] += cb.x; + normals[ vB + 1 ] += cb.y; + normals[ vB + 2 ] += cb.z; + + normals[ vC ] += cb.x; + normals[ vC + 1 ] += cb.y; + normals[ vC + 2 ] += cb.z; + + } + + } + + } else { + + // non-indexed elements (unconnected triangle soup) + + for ( var i = 0, il = positions.length; i < il; i += 9 ) { + + pA.fromArray( positions, i ); + pB.fromArray( positions, i + 3 ); + pC.fromArray( positions, i + 6 ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ i ] = cb.x; + normals[ i + 1 ] = cb.y; + normals[ i + 2 ] = cb.z; + + normals[ i + 3 ] = cb.x; + normals[ i + 4 ] = cb.y; + normals[ i + 5 ] = cb.z; + + normals[ i + 6 ] = cb.x; + normals[ i + 7 ] = cb.y; + normals[ i + 8 ] = cb.z; + + } + + } + + this.normalizeNormals(); + + attributes.normal.needsUpdate = true; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) offset = 0; + + var attributes = this.attributes; + + for ( var key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + var attribute1 = attributes[ key ]; + var attributeArray1 = attribute1.array; + + var attribute2 = geometry.attributes[ key ]; + var attributeArray2 = attribute2.array; + + var attributeSize = attribute2.itemSize; + + for ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + var vector = new Vector3(); + + return function normalizeNormals() { + + var normals = this.attributes.normal; + + for ( var i = 0, il = normals.count; i < il; i ++ ) { + + vector.x = normals.getX( i ); + vector.y = normals.getY( i ); + vector.z = normals.getZ( i ); + + vector.normalize(); + + normals.setXYZ( i, vector.x, vector.y, vector.z ); + + } + + }; + + }(), + + toNonIndexed: function () { + + if ( this.index === null ) { + + console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); + return this; + + } + + var geometry2 = new BufferGeometry(); + + var indices = this.index.array; + var attributes = this.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + + var array = attribute.array; + var itemSize = attribute.itemSize; + + var array2 = new array.constructor( indices.length * itemSize ); + + var index = 0, index2 = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + index = indices[ i ] * itemSize; + + for ( var j = 0; j < itemSize; j ++ ) { + + array2[ index2 ++ ] = array[ index ++ ]; + + } + + } + + geometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) ); + + } + + return geometry2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON' + } + }; + + // standard BufferGeometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + data.data = { attributes: {} }; + + var index = this.index; + + if ( index !== null ) { + + var array = Array.prototype.slice.call( index.array ); + + data.data.index = { + type: index.array.constructor.name, + array: array + }; + + } + + var attributes = this.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + + var array = Array.prototype.slice.call( attribute.array ); + + data.data.attributes[ key ] = { + itemSize: attribute.itemSize, + type: attribute.array.constructor.name, + array: array, + normalized: attribute.normalized + }; + + } + + var groups = this.groups; + + if ( groups.length > 0 ) { + + data.data.groups = JSON.parse( JSON.stringify( groups ) ); + + } + + var boundingSphere = this.boundingSphere; + + if ( boundingSphere !== null ) { + + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + + } + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( source ) { + + var name, i, l; + + // reset + + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // index + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone() ); + + } + + // attributes + + var attributes = source.attributes; + + for ( name in attributes ) { + + var attribute = attributes[ name ]; + this.addAttribute( name, attribute.clone() ); + + } + + // morph attributes + + var morphAttributes = source.morphAttributes; + + for ( name in morphAttributes ) { + + var array = []; + var morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes + + for ( i = 0, l = morphAttribute.length; i < l; i ++ ) { + + array.push( morphAttribute[ i ].clone() ); + + } + + this.morphAttributes[ name ] = array; + + } + + // groups + + var groups = source.groups; + + for ( i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // draw range + + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// BoxGeometry + +function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + Geometry.call( this ); + + this.type = 'BoxGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); + this.mergeVertices(); + +} + +BoxGeometry.prototype = Object.create( Geometry.prototype ); +BoxGeometry.prototype.constructor = BoxGeometry; + +// BoxBufferGeometry + +function BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + BufferGeometry.call( this ); + + this.type = 'BoxBufferGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + var scope = this; + + width = width || 1; + height = height || 1; + depth = depth || 1; + + // segments + + widthSegments = Math.floor( widthSegments ) || 1; + heightSegments = Math.floor( heightSegments ) || 1; + depthSegments = Math.floor( depthSegments ) || 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var numberOfVertices = 0; + var groupStart = 0; + + // build each side of the box geometry + + buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px + buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx + buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py + buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny + buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz + buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { + + var segmentWidth = width / gridX; + var segmentHeight = height / gridY; + + var widthHalf = width / 2; + var heightHalf = height / 2; + var depthHalf = depth / 2; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var vertexCounter = 0; + var groupCount = 0; + + var ix, iy; + + var vector = new Vector3(); + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segmentHeight - heightHalf; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segmentWidth - widthHalf; + + // set values to correct vector component + + vector[ u ] = x * udir; + vector[ v ] = y * vdir; + vector[ w ] = depthHalf; + + // now apply vector to vertex buffer + + vertices.push( vector.x, vector.y, vector.z ); + + // set values to correct vector component + + vector[ u ] = 0; + vector[ v ] = 0; + vector[ w ] = depth > 0 ? 1 : - 1; + + // now apply vector to normal buffer + + normals.push( vector.x, vector.y, vector.z ); + + // uvs + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + // counters + + vertexCounter += 1; + + } + + } + + // indices + + // 1. you need three indices to draw a single face + // 2. a single segment consists of two faces + // 3. so we need to generate six (2*3) indices per segment + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = numberOfVertices + ix + gridX1 * iy; + var b = numberOfVertices + ix + gridX1 * ( iy + 1 ); + var c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // increase counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, materialIndex ); + + // calculate new start value for groups + + groupStart += groupCount; + + // update total number of vertices + + numberOfVertices += vertexCounter; + + } + +} + +BoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +BoxBufferGeometry.prototype.constructor = BoxBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PlaneGeometry + +function PlaneGeometry( width, height, widthSegments, heightSegments ) { + + Geometry.call( this ); + + this.type = 'PlaneGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); + this.mergeVertices(); + +} + +PlaneGeometry.prototype = Object.create( Geometry.prototype ); +PlaneGeometry.prototype.constructor = PlaneGeometry; + +// PlaneBufferGeometry + +function PlaneBufferGeometry( width, height, widthSegments, heightSegments ) { + + BufferGeometry.call( this ); + + this.type = 'PlaneBufferGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + width = width || 1; + height = height || 1; + + var width_half = width / 2; + var height_half = height / 2; + + var gridX = Math.floor( widthSegments ) || 1; + var gridY = Math.floor( heightSegments ) || 1; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var segment_width = width / gridX; + var segment_height = height / gridY; + + var ix, iy; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segment_height - height_half; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segment_width - width_half; + + vertices.push( x, - y, 0 ); + + normals.push( 0, 0, 1 ); + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + } + + } + + // indices + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = ix + gridX1 * iy; + var b = ix + gridX1 * ( iy + 1 ); + var c = ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +PlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + +function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshBasicMaterial'; + + this.color = new Color( 0xffffff ); // emissive + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.lights = false; + + this.setValues( parameters ); + +} + +MeshBasicMaterial.prototype = Object.create( Material.prototype ); +MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + +MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + +MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + this.vertexShader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'; + this.fragmentShader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'; + + this.linewidth = 1; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; // set to use scene fog + this.lights = false; // set to use scene lights + this.clipping = false; // set to use user-defined clipping planes + + this.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // When rendered geometry doesn't include these attributes but the material does, + // use these default values in WebGL. This avoids errors when buffer data is missing. + this.defaultAttributeValues = { + 'color': [ 1, 1, 1 ], + 'uv': [ 0, 0 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + +} + +ShaderMaterial.prototype = Object.create( Material.prototype ); +ShaderMaterial.prototype.constructor = ShaderMaterial; + +ShaderMaterial.prototype.isShaderMaterial = true; + +ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = UniformsUtils.clone( source.uniforms ); + + this.defines = source.defines; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = source.extensions; + + return this; + +}; + +ShaderMaterial.prototype.toJSON = function ( meta ) { + + var data = Material.prototype.toJSON.call( this, meta ); + + data.uniforms = this.uniforms; + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + + return data; + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Ray( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3(); + +} + +Object.assign( Ray.prototype, { + + set: function ( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + }, + + lookAt: function ( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + }, + + recast: function () { + + var v1 = new Vector3(); + + return function recast( t ) { + + this.origin.copy( this.at( t, v1 ) ); + + return this; + + }; + + }(), + + closestPointToPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + result.subVectors( point, this.origin ); + var directionDistance = result.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return result.copy( this.origin ); + + } + + return result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + }, + + distanceToPoint: function ( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + }, + + distanceSqToPoint: function () { + + var v1 = new Vector3(); + + return function distanceSqToPoint( point ) { + + var directionDistance = v1.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + v1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return v1.distanceToSquared( point ); + + }; + + }(), + + distanceSqToSegment: function () { + + var segCenter = new Vector3(); + var segDir = new Vector3(); + var diff = new Vector3(); + + return function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h + // It returns the min distance between the ray and the segment + // defined by v0 and v1 + // It can also set two optional targets : + // - The closest point on the ray + // - The closest point on the segment + + segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); + segDir.copy( v1 ).sub( v0 ).normalize(); + diff.copy( this.origin ).sub( segCenter ); + + var segExtent = v0.distanceTo( v1 ) * 0.5; + var a01 = - this.direction.dot( segDir ); + var b0 = diff.dot( this.direction ); + var b1 = - diff.dot( segDir ); + var c = diff.lengthSq(); + var det = Math.abs( 1 - a01 * a01 ); + var s0, s1, sqrDist, extDet; + + if ( det > 0 ) { + + // The ray and segment are not parallel. + + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + + if ( s0 >= 0 ) { + + if ( s1 >= - extDet ) { + + if ( s1 <= extDet ) { + + // region 0 + // Minimum at interior points of ray and segment. + + var invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; + + } else { + + // region 1 + + s1 = segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + // region 5 + + s1 = - segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + if ( s1 <= - extDet ) { + + // region 4 + + s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } else if ( s1 <= extDet ) { + + // region 3 + + s0 = 0; + s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = s1 * ( s1 + 2 * b1 ) + c; + + } else { + + // region 2 + + s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } + + } else { + + // Ray and segment are parallel. + + s1 = ( a01 > 0 ) ? - segExtent : segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + if ( optionalPointOnRay ) { + + optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter ); + + } + + return sqrDist; + + }; + + }(), + + intersectSphere: function () { + + var v1 = new Vector3(); + + return function intersectSphere( sphere, optionalTarget ) { + + v1.subVectors( sphere.center, this.origin ); + var tca = v1.dot( this.direction ); + var d2 = v1.dot( v1 ) - tca * tca; + var radius2 = sphere.radius * sphere.radius; + + if ( d2 > radius2 ) return null; + + var thc = Math.sqrt( radius2 - d2 ); + + // t0 = first intersect point - entrance on front of sphere + var t0 = tca - thc; + + // t1 = second intersect point - exit point on back of sphere + var t1 = tca + thc; + + // test to see if both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && t1 < 0 ) return null; + + // test to see if t0 is behind the ray: + // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, + // in order to always return an intersect point that is in front of the ray. + if ( t0 < 0 ) return this.at( t1, optionalTarget ); + + // else t0 is in front of the ray, so return the first collision point scaled by t0 + return this.at( t0, optionalTarget ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) <= sphere.radius; + + }, + + distanceToPlane: function ( plane ) { + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( plane.distanceToPoint( this.origin ) === 0 ) { + + return 0; + + } + + // Null is preferable to undefined since undefined means.... it is undefined + + return null; + + } + + var t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; + + // Return if the ray never intersects the plane + + return t >= 0 ? t : null; + + }, + + intersectPlane: function ( plane, optionalTarget ) { + + var t = this.distanceToPlane( plane ); + + if ( t === null ) { + + return null; + + } + + return this.at( t, optionalTarget ); + + }, + + intersectsPlane: function ( plane ) { + + // check if the ray lies on the plane first + + var distToPoint = plane.distanceToPoint( this.origin ); + + if ( distToPoint === 0 ) { + + return true; + + } + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator * distToPoint < 0 ) { + + return true; + + } + + // ray origin is behind the plane (and is pointing behind it) + + return false; + + }, + + intersectBox: function ( box, optionalTarget ) { + + var tmin, tmax, tymin, tymax, tzmin, tzmax; + + var invdirx = 1 / this.direction.x, + invdiry = 1 / this.direction.y, + invdirz = 1 / this.direction.z; + + var origin = this.origin; + + if ( invdirx >= 0 ) { + + tmin = ( box.min.x - origin.x ) * invdirx; + tmax = ( box.max.x - origin.x ) * invdirx; + + } else { + + tmin = ( box.max.x - origin.x ) * invdirx; + tmax = ( box.min.x - origin.x ) * invdirx; + + } + + if ( invdiry >= 0 ) { + + tymin = ( box.min.y - origin.y ) * invdiry; + tymax = ( box.max.y - origin.y ) * invdiry; + + } else { + + tymin = ( box.max.y - origin.y ) * invdiry; + tymax = ( box.min.y - origin.y ) * invdiry; + + } + + if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== tmax ) tmax = tymax; + + if ( invdirz >= 0 ) { + + tzmin = ( box.min.z - origin.z ) * invdirz; + tzmax = ( box.max.z - origin.z ) * invdirz; + + } else { + + tzmin = ( box.max.z - origin.z ) * invdirz; + tzmax = ( box.min.z - origin.z ) * invdirz; + + } + + if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; + + if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; + + if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; + + //return point closest to the ray (positive side) + + if ( tmax < 0 ) return null; + + return this.at( tmin >= 0 ? tmin : tmax, optionalTarget ); + + }, + + intersectsBox: ( function () { + + var v = new Vector3(); + + return function intersectsBox( box ) { + + return this.intersectBox( box, v ) !== null; + + }; + + } )(), + + intersectTriangle: function () { + + // Compute the offset origin, edges, and normal. + var diff = new Vector3(); + var edge1 = new Vector3(); + var edge2 = new Vector3(); + var normal = new Vector3(); + + return function intersectTriangle( a, b, c, backfaceCulling, optionalTarget ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + edge1.subVectors( b, a ); + edge2.subVectors( c, a ); + normal.crossVectors( edge1, edge2 ); + + // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, + // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by + // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) + // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) + // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) + var DdN = this.direction.dot( normal ); + var sign; + + if ( DdN > 0 ) { + + if ( backfaceCulling ) return null; + sign = 1; + + } else if ( DdN < 0 ) { + + sign = - 1; + DdN = - DdN; + + } else { + + return null; + + } + + diff.subVectors( this.origin, a ); + var DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) ); + + // b1 < 0, no intersection + if ( DdQxE2 < 0 ) { + + return null; + + } + + var DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) ); + + // b2 < 0, no intersection + if ( DdE1xQ < 0 ) { + + return null; + + } + + // b1+b2 > 1, no intersection + if ( DdQxE2 + DdE1xQ > DdN ) { + + return null; + + } + + // Line intersects triangle, check if ray does. + var QdN = - sign * diff.dot( normal ); + + // t < 0, no intersection + if ( QdN < 0 ) { + + return null; + + } + + // Ray intersects triangle. + return this.at( QdN / DdN, optionalTarget ); + + }; + + }(), + + applyMatrix4: function ( matrix4 ) { + + this.origin.applyMatrix4( matrix4 ); + this.direction.transformDirection( matrix4 ); + + return this; + + }, + + equals: function ( ray ) { + + return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Line3( start, end ) { + + this.start = ( start !== undefined ) ? start : new Vector3(); + this.end = ( end !== undefined ) ? end : new Vector3(); + +} + +Object.assign( Line3.prototype, { + + set: function ( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + }, + + delta: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.subVectors( this.end, this.start ); + + }, + + distanceSq: function () { + + return this.start.distanceToSquared( this.end ); + + }, + + distance: function () { + + return this.start.distanceTo( this.end ); + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + closestPointToPointParameter: function () { + + var startP = new Vector3(); + var startEnd = new Vector3(); + + return function closestPointToPointParameter( point, clampToLine ) { + + startP.subVectors( point, this.start ); + startEnd.subVectors( this.end, this.start ); + + var startEnd2 = startEnd.dot( startEnd ); + var startEnd_startP = startEnd.dot( startP ); + + var t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = _Math.clamp( t, 0, 1 ); + + } + + return t; + + }; + + }(), + + closestPointToPoint: function ( point, clampToLine, optionalTarget ) { + + var t = this.closestPointToPointParameter( point, clampToLine ); + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + applyMatrix4: function ( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + }, + + equals: function ( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Triangle( a, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + +} + +Object.assign( Triangle, { + + normal: function () { + + var v0 = new Vector3(); + + return function normal( a, b, c, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + result.subVectors( c, b ); + v0.subVectors( a, b ); + result.cross( v0 ); + + var resultLengthSq = result.lengthSq(); + if ( resultLengthSq > 0 ) { + + return result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) ); + + } + + return result.set( 0, 0, 0 ); + + }; + + }(), + + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + barycoordFromPoint: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function barycoordFromPoint( point, a, b, c, optionalTarget ) { + + v0.subVectors( c, a ); + v1.subVectors( b, a ); + v2.subVectors( point, a ); + + var dot00 = v0.dot( v0 ); + var dot01 = v0.dot( v1 ); + var dot02 = v0.dot( v2 ); + var dot11 = v1.dot( v1 ); + var dot12 = v1.dot( v2 ); + + var denom = ( dot00 * dot11 - dot01 * dot01 ); + + var result = optionalTarget || new Vector3(); + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return result.set( - 2, - 1, - 1 ); + + } + + var invDenom = 1 / denom; + var u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + var v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + // barycentric coordinates must always sum to 1 + return result.set( 1 - u - v, v, u ); + + }; + + }(), + + containsPoint: function () { + + var v1 = new Vector3(); + + return function containsPoint( point, a, b, c ) { + + var result = Triangle.barycoordFromPoint( point, a, b, c, v1 ); + + return ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 ); + + }; + + }() + +} ); + +Object.assign( Triangle.prototype, { + + set: function ( a, b, c ) { + + this.a.copy( a ); + this.b.copy( b ); + this.c.copy( c ); + + return this; + + }, + + setFromPointsAndIndices: function ( points, i0, i1, i2 ) { + + this.a.copy( points[ i0 ] ); + this.b.copy( points[ i1 ] ); + this.c.copy( points[ i2 ] ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( triangle ) { + + this.a.copy( triangle.a ); + this.b.copy( triangle.b ); + this.c.copy( triangle.c ); + + return this; + + }, + + area: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + + return function area() { + + v0.subVectors( this.c, this.b ); + v1.subVectors( this.a, this.b ); + + return v0.cross( v1 ).length() * 0.5; + + }; + + }(), + + midpoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); + + }, + + normal: function ( optionalTarget ) { + + return Triangle.normal( this.a, this.b, this.c, optionalTarget ); + + }, + + plane: function ( optionalTarget ) { + + var result = optionalTarget || new Plane(); + + return result.setFromCoplanarPoints( this.a, this.b, this.c ); + + }, + + barycoordFromPoint: function ( point, optionalTarget ) { + + return Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget ); + + }, + + containsPoint: function ( point ) { + + return Triangle.containsPoint( point, this.a, this.b, this.c ); + + }, + + closestPointToPoint: function () { + + var plane = new Plane(); + var edgeList = [ new Line3(), new Line3(), new Line3() ]; + var projectedPoint = new Vector3(); + var closestPoint = new Vector3(); + + return function closestPointToPoint( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + var minDistance = Infinity; + + // project the point onto the plane of the triangle + + plane.setFromCoplanarPoints( this.a, this.b, this.c ); + plane.projectPoint( point, projectedPoint ); + + // check if the projection lies within the triangle + + if ( this.containsPoint( projectedPoint ) === true ) { + + // if so, this is the closest point + + result.copy( projectedPoint ); + + } else { + + // if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices + + edgeList[ 0 ].set( this.a, this.b ); + edgeList[ 1 ].set( this.b, this.c ); + edgeList[ 2 ].set( this.c, this.a ); + + for ( var i = 0; i < edgeList.length; i ++ ) { + + edgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint ); + + var distance = projectedPoint.distanceToSquared( closestPoint ); + + if ( distance < minDistance ) { + + minDistance = distance; + + result.copy( closestPoint ); + + } + + } + + } + + return result; + + }; + + }(), + + equals: function ( triangle ) { + + return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author jonobr1 / http://jonobr1.com/ + */ + +function Mesh( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } ); + + this.drawMode = TrianglesDrawMode; + + this.updateMorphTargets(); + +} + +Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + setDrawMode: function ( value ) { + + this.drawMode = value; + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.drawMode = source.drawMode; + + if ( source.morphTargetInfluences !== undefined ) { + + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + + } + + if ( source.morphTargetDictionary !== undefined ) { + + this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); + + } + + return this; + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + var m, ml, name; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphTargets.length; m < ml; m ++ ) { + + name = morphTargets[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + }, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + var vA = new Vector3(); + var vB = new Vector3(); + var vC = new Vector3(); + + var tempA = new Vector3(); + var tempB = new Vector3(); + var tempC = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + var barycoord = new Vector3(); + + var intersectionPoint = new Vector3(); + var intersectionPointWorld = new Vector3(); + + function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) { + + Triangle.barycoordFromPoint( point, p1, p2, p3, barycoord ); + + uv1.multiplyScalar( barycoord.x ); + uv2.multiplyScalar( barycoord.y ); + uv3.multiplyScalar( barycoord.z ); + + uv1.add( uv2 ).add( uv3 ); + + return uv1.clone(); + + } + + function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { + + var intersect; + + if ( material.side === BackSide ) { + + intersect = ray.intersectTriangle( pC, pB, pA, true, point ); + + } else { + + intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); + + } + + if ( intersect === null ) return null; + + intersectionPointWorld.copy( point ); + intersectionPointWorld.applyMatrix4( object.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectionPointWorld ); + + if ( distance < raycaster.near || distance > raycaster.far ) return null; + + return { + distance: distance, + point: intersectionPointWorld.clone(), + object: object + }; + + } + + function checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) { + + vA.fromBufferAttribute( position, a ); + vB.fromBufferAttribute( position, b ); + vC.fromBufferAttribute( position, c ); + + var intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + uvA.fromBufferAttribute( uv, a ); + uvB.fromBufferAttribute( uv, b ); + uvC.fromBufferAttribute( uv, c ); + + intersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC ); + + } + + intersection.face = new Face3( a, b, c, Triangle.normal( vA, vB, vC ) ); + intersection.faceIndex = a; + + } + + return intersection; + + } + + return function raycast( raycaster, intersects ) { + + var geometry = this.geometry; + var material = this.material; + var matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( ray.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + var intersection; + + if ( geometry.isBufferGeometry ) { + + var a, b, c; + var index = geometry.index; + var position = geometry.attributes.position; + var uv = geometry.attributes.uv; + var i, l; + + if ( index !== null ) { + + // indexed buffer geometry + + for ( i = 0, l = index.count; i < l; i += 3 ) { + + a = index.getX( i ); + b = index.getX( i + 1 ); + c = index.getX( i + 2 ); + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics + intersects.push( intersection ); + + } + + } + + } else if ( position !== undefined ) { + + // non-indexed buffer geometry + + for ( i = 0, l = position.count; i < l; i += 3 ) { + + a = i; + b = i + 1; + c = i + 2; + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.index = a; // triangle number in positions buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + var fvA, fvB, fvC; + var isMultiMaterial = Array.isArray( material ); + + var vertices = geometry.vertices; + var faces = geometry.faces; + var uvs; + + var faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; + + for ( var f = 0, fl = faces.length; f < fl; f ++ ) { + + var face = faces[ f ]; + var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) continue; + + fvA = vertices[ face.a ]; + fvB = vertices[ face.b ]; + fvC = vertices[ face.c ]; + + if ( faceMaterial.morphTargets === true ) { + + var morphTargets = geometry.morphTargets; + var morphInfluences = this.morphTargetInfluences; + + vA.set( 0, 0, 0 ); + vB.set( 0, 0, 0 ); + vC.set( 0, 0, 0 ); + + for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) { + + var influence = morphInfluences[ t ]; + + if ( influence === 0 ) continue; + + var targets = morphTargets[ t ].vertices; + + vA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence ); + vB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence ); + vC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence ); + + } + + vA.add( fvA ); + vB.add( fvB ); + vC.add( fvC ); + + fvA = vA; + fvB = vB; + fvC = vC; + + } + + intersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + var uvs_f = uvs[ f ]; + uvA.copy( uvs_f[ 0 ] ); + uvB.copy( uvs_f[ 1 ] ); + uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBackground( renderer, state, geometries, premultipliedAlpha ) { + + var clearColor = new Color( 0x000000 ); + var clearAlpha = 0; + + var planeCamera, planeMesh; + var boxMesh; + + function render( renderList, scene, camera, forceClear ) { + + var background = scene.background; + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && background.isCubeTexture ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + uniforms: ShaderLib.cube.uniforms, + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: true, + depthWrite: false, + fog: false + } ) + ); + + boxMesh.geometry.removeAttribute( 'normal' ); + boxMesh.geometry.removeAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + this.matrixWorld.copyPosition( camera.matrixWorld ); + + }; + + geometries.update( boxMesh.geometry ); + + } + + boxMesh.material.uniforms.tCube.value = background; + + renderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeCamera === undefined ) { + + planeCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } ) + ); + + geometries.update( planeMesh.geometry ); + + } + + planeMesh.material.map = background; + + // TODO Push this to renderList + + renderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha ) { + + clearColor.set( color ); + clearAlpha = alpha !== undefined ? alpha : 1; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program && b.program && a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + +} + +function reversePainterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + +} + +function WebGLRenderList() { + + var renderItems = []; + var renderItemsIndex = 0; + + var opaque = []; + var transparent = []; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function push( object, geometry, material, z, group ) { + + var renderItem = renderItems[ renderItemsIndex ]; + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: material.program, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = material.program; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + renderItemsIndex ++; + + } + + function sort() { + + if ( opaque.length > 1 ) opaque.sort( painterSortStable ); + if ( transparent.length > 1 ) transparent.sort( reversePainterSortStable ); + + } + + return { + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + + sort: sort + }; + +} + +function WebGLRenderLists() { + + var lists = {}; + + function get( scene, camera ) { + + var hash = scene.id + ',' + camera.id; + var list = lists[ hash ]; + + if ( list === undefined ) { + + // console.log( 'THREE.WebGLRenderLists:', hash ); + + list = new WebGLRenderList(); + lists[ hash ] = list; + + } + + return list; + + } + + function dispose() { + + lists = {}; + + } + + return { + get: get, + dispose: dispose + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + +} + +function WebGLMorphtargets( gl ) { + + var influencesList = {}; + var morphInfluences = new Float32Array( 8 ); + + function update( object, geometry, material, program ) { + + var objectInfluences = object.morphTargetInfluences; + + var length = objectInfluences.length; + + var influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( var i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + var morphTargets = material.morphTargets && geometry.morphAttributes.position; + var morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + // Remove current morphAttributes + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + if ( influence[ 1 ] !== 0 ) { + + if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i ); + if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i ); + + } + + } + + // Collect influences + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + // Add morphAttributes + + for ( var i = 0; i < 8; i ++ ) { + + var influence = influences[ i ]; + + if ( influence ) { + + var index = influence[ 0 ]; + var value = influence[ 1 ]; + + if ( value ) { + + if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] ); + if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + morphInfluences[ i ] = value; + continue; + + } + + } + + morphInfluences[ i ] = 0; + + } + + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + var type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount ); + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + var position = geometry.attributes.position; + + if ( position.isInterleavedBufferAttribute ) { + + count = position.data.count; + + extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount ); + + } else { + + extension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount ); + + } + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLGeometries( gl, attributes, infoMemory ) { + + var geometries = {}; + var wireframeAttributes = {}; + + function onGeometryDispose( event ) { + + var geometry = event.target; + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( var name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + delete geometries[ geometry.id ]; + + // TODO Remove duplicate code + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ geometry.id ]; + + } + + attribute = wireframeAttributes[ buffergeometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ buffergeometry.id ]; + + } + + // + + infoMemory.geometries --; + + } + + function get( object, geometry ) { + + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry ) return buffergeometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries[ geometry.id ] = buffergeometry; + + infoMemory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + var index = geometry.index; + var geometryAttributes = geometry.attributes; + + if ( index !== null ) { + + attributes.update( index, gl.ELEMENT_ARRAY_BUFFER ); + + } + + for ( var name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER ); + + } + + // morph targets + + var morphAttributes = geometry.morphAttributes; + + for ( var name in morphAttributes ) { + + var array = morphAttributes[ name ]; + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], gl.ARRAY_BUFFER ); + + } + + } + + } + + function getWireframeAttribute( geometry ) { + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) return attribute; + + var indices = []; + + var geometryIndex = geometry.index; + var geometryAttributes = geometry.attributes; + + // console.time( 'wireframe' ); + + if ( geometryIndex !== null ) { + + var array = geometryIndex.array; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var a = array[ i + 0 ]; + var b = array[ i + 1 ]; + var c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + var array = geometryAttributes.position.array; + + for ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + var a = i + 0; + var b = i + 1; + var c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + // console.timeEnd( 'wireframe' ); + + attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + + attributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER ); + + wireframeAttributes[ geometry.id ] = attribute; + + return attribute; + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function UniformsCache() { + + var lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + var uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color(), + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + // TODO (abelnation): set RectAreaLight shadow uniforms + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + +} + +function WebGLLights() { + + var cache = new UniformsCache(); + + var state = { + + hash: '', + + ambient: [ 0, 0, 0 ], + directional: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + var vector3 = new Vector3(); + var matrix4 = new Matrix4(); + var matrix42 = new Matrix4(); + + function setup( lights, shadows, camera ) { + + var r = 0, g = 0, b = 0; + + var directionalLength = 0; + var pointLength = 0; + var spotLength = 0; + var rectAreaLength = 0; + var hemiLength = 0; + + var viewMatrix = camera.matrixWorldInverse; + + for ( var i = 0, l = lights.length; i < l; i ++ ) { + + var light = lights[ i ]; + + var color = light.color; + var intensity = light.intensity; + var distance = light.distance; + + var shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isDirectionalLight ) { + + var uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + var uniforms = cache.get( light ); + + // (a) intensity controls irradiance of entire light + uniforms.color + .copy( color ) + .multiplyScalar( intensity / ( light.width * light.height ) ); + + // (b) intensity controls the radiance per light area + // uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + // TODO (abelnation): RectAreaLight distance? + // uniforms.distance = distance; + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + uniforms.shadowCameraNear = shadow.camera.near; + uniforms.shadowCameraFar = shadow.camera.far; + + } + + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + var uniforms = cache.get( light ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + // TODO (sam-g-steel) why aren't we using join + state.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length; + + } + + return { + setup: setup, + state: state + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLObjects( geometries, infoRender ) { + + var updateList = {}; + + function update( object ) { + + var frame = infoRender.frame; + + var geometry = object.geometry; + var buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateList[ buffergeometry.id ] !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateList[ buffergeometry.id ] = frame; + + } + + return buffergeometry; + + } + + function clear() { + + updateList = {}; + + } + + return { + + update: update, + clear: clear + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function addLineNumbers( string ) { + + var lines = string.split( '\n' ); + + for ( var i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + +} + +function WebGLShader( gl, type, string ) { + + var shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) { + + console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' ); + + } + + if ( gl.getShaderInfoLog( shader ) !== '' ) { + + console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) ); + + } + + // --enable-privileged-webgl-extension + // console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + return shader; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var programIdCount = 0; + +function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear', '( value )' ]; + case sRGBEncoding: + return [ 'sRGB', '( value )' ]; + case RGBEEncoding: + return [ 'RGBE', '( value )' ]; + case RGBM7Encoding: + return [ 'RGBM', '( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM', '( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD', '( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; + default: + throw new Error( 'unsupported encoding: ' + encoding ); + + } + +} + +function getTexelDecodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; + +} + +function getTexelEncodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; + +} + +function getToneMappingFunction( functionName, toneMapping ) { + + var toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = 'Linear'; + break; + + case ReinhardToneMapping: + toneMappingName = 'Reinhard'; + break; + + case Uncharted2ToneMapping: + toneMappingName = 'Uncharted2'; + break; + + case CineonToneMapping: + toneMappingName = 'OptimizedCineon'; + break; + + default: + throw new Error( 'unsupported toneMapping: ' + toneMapping ); + + } + + return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; + +} + +function generateExtensions( extensions, parameters, rendererExtensions ) { + + extensions = extensions || {}; + + var chunks = [ + ( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '', + ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + +} + +function generateDefines( defines ) { + + var chunks = []; + + for ( var name in defines ) { + + var value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + +} + +function fetchAttributeLocations( gl, program ) { + + var attributes = {}; + + var n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES ); + + for ( var i = 0; i < n; i ++ ) { + + var info = gl.getActiveAttrib( program, i ); + var name = info.name; + + // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + +} + +function filterEmptyLine( string ) { + + return string !== ''; + +} + +function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ); + +} + +function parseIncludes( string ) { + + var pattern = /^[ \t]*#include +<([\w\d.]+)>/gm; + + function replace( match, include ) { + + var replace = ShaderChunk[ include ]; + + if ( replace === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return parseIncludes( replace ); + + } + + return string.replace( pattern, replace ); + +} + +function unrollLoops( string ) { + + var pattern = /for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + + function replace( match, start, end, snippet ) { + + var unroll = ''; + + for ( var i = parseInt( start ); i < parseInt( end ); i ++ ) { + + unroll += snippet.replace( /\[ i \]/g, '[ ' + i + ' ]' ); + + } + + return unroll; + + } + + return string.replace( pattern, replace ); + +} + +function WebGLProgram( renderer, extensions, code, material, shader, parameters ) { + + var gl = renderer.context; + + var defines = material.defines; + + var vertexShader = shader.vertexShader; + var fragmentShader = shader.fragmentShader; + + var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } + + var envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + var envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + + if ( parameters.envMap ) { + + switch ( material.envMap.mapping ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + case EquirectangularReflectionMapping: + case EquirectangularRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_EQUIREC'; + break; + + case SphericalReflectionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_SPHERE'; + break; + + } + + switch ( material.envMap.mapping ) { + + case CubeRefractionMapping: + case EquirectangularRefractionMapping: + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + switch ( material.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + // console.log( 'building new program ' ); + + // + + var customExtensions = generateExtensions( material.extensions, parameters, extensions ); + + var customDefines = generateDefines( defines ); + + // + + var program = gl.createProgram(); + + var prefixVertex, prefixFragment; + + if ( material.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixVertex.length > 0 ) { + + prefixVertex += '\n'; + + } + + prefixFragment = [ + + customExtensions, + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixFragment.length > 0 ) { + + prefixFragment += '\n'; + + } + + } else { + + prefixVertex = [ + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + '#define UNION_CLIPPING_PLANES ' + ( parameters.numClippingPlanes - parameters.numClipIntersection ), + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + + parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + parameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + + ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below + parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '', + + parameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = parseIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + + fragmentShader = parseIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + + if ( ! material.isShaderMaterial ) { + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + } + + var vertexGlsl = prefixVertex + vertexShader; + var fragmentGlsl = prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl ); + var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( material.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, material.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + var programLog = gl.getProgramInfoLog( program ); + var vertexLog = gl.getShaderInfoLog( glVertexShader ); + var fragmentLog = gl.getShaderInfoLog( glFragmentShader ); + + var runnable = true; + var haveDiagnostics = true; + + // console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) ); + // console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) ); + + if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) { + + runnable = false; + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + material: material, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + // clean up + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + var cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program, renderer ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + var cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function () { + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // DEPRECATED + + Object.defineProperties( this, { + + uniforms: { + get: function () { + + console.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' ); + return this.getUniforms(); + + } + }, + + attributes: { + get: function () { + + console.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' ); + return this.getAttributes(); + + } + } + + } ); + + + // + + this.id = programIdCount ++; + this.code = code; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLPrograms( renderer, extensions, capabilities ) { + + var programs = []; + + var shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'phong', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow' + }; + + var parameterNames = [ + "precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding", + "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap", + "roughnessMap", "metalnessMap", "gradientMap", + "alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp", + "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", + "maxBones", "useVertexTexture", "morphTargets", "morphNormals", + "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", + "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", + "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', + "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering" + ]; + + + function allocateBones( object ) { + + var skeleton = object.skeleton; + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + var nVertexUniforms = capabilities.maxVertexUniforms; + var nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + var maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map, gammaOverrideLinear ) { + + var encoding; + + if ( ! map ) { + + encoding = LinearEncoding; + + } else if ( map.isTexture ) { + + encoding = map.encoding; + + } else if ( map.isWebGLRenderTarget ) { + + console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); + encoding = map.texture.encoding; + + } + + // add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point. + if ( encoding === LinearEncoding && gammaOverrideLinear ) { + + encoding = GammaEncoding; + + } + + return encoding; + + } + + this.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) { + + var shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + var maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0; + var precision = capabilities.precision; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + var currentRenderTarget = renderer.getRenderTarget(); + + var parameters = { + + shaderID: shaderID, + + precision: precision, + supportsVertexTextures: capabilities.vertexTextures, + outputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ), + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ), + envMap: !! material.envMap, + envMapMode: material.envMap && material.envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ), + envMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + combine: material.combine, + + vertexColors: material.vertexColors, + + fog: !! fog, + useFog: material.fog, + fogExp: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: capabilities.logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: capabilities.floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numClippingPlanes: nClipPlanes, + numClipIntersection: nClipIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: renderer.toneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false + + }; + + return parameters; + + }; + + this.getProgramCode = function ( material, parameters ) { + + var array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( material.fragmentShader ); + array.push( material.vertexShader ); + + } + + if ( material.defines !== undefined ) { + + for ( var name in material.defines ) { + + array.push( name ); + array.push( material.defines[ name ] ); + + } + + } + + for ( var i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( material.onBeforeCompile.toString() ); + + array.push( renderer.gammaOutput ); + + return array.join(); + + }; + + this.acquireProgram = function ( material, shader, parameters, code ) { + + var program; + + // Check if code has been already compiled + for ( var p = 0, pl = programs.length; p < pl; p ++ ) { + + var programInfo = programs[ p ]; + + if ( programInfo.code === code ) { + + program = programInfo; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, extensions, code, material, shader, parameters ); + programs.push( program ); + + } + + return program; + + }; + + this.releaseProgram = function ( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + var i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + }; + + // Exposed for resource monitoring & error feedback via renderer.info: + this.programs = programs; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, infoMemory ) { + + var _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof window.WebGL2RenderingContext ); + var _videoTextures = {}; + + // + + function clampToMaxSize( image, maxSize ) { + + if ( image.width > maxSize || image.height > maxSize ) { + + // Warning: Scaling through the canvas will only work with images that use + // premultiplied alpha. + + var scale = maxSize / Math.max( image.width, image.height ); + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = Math.floor( image.width * scale ); + canvas.height = Math.floor( image.height * scale ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height ); + + } + + function makePowerOfTwo( image ) { + + if ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) { + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = _Math.floorPowerOfTwo( image.width ); + canvas.height = _Math.floorPowerOfTwo( image.height ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function textureNeedsPowerOfTwo( texture ) { + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) { + + return texture.generateMipmaps && isPowerOfTwo && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) { + + return _gl.NEAREST; + + } + + return _gl.LINEAR; + + } + + // + + function onTextureDispose( event ) { + + var texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + if ( texture.isVideoTexture ) { + + delete _videoTextures[ texture.id ]; + + } + + infoMemory.textures --; + + } + + function onRenderTargetDispose( event ) { + + var renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + infoMemory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image && textureProperties.__image__webglTextureCube ) { + + // cube texture + + _gl.deleteTexture( textureProperties.__image__webglTextureCube ); + + } else { + + // 2D texture + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + // remove all webgl properties + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLRenderTargetCube ) { + + for ( var i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + + + function setTexture2D( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + var image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image.length === 6 ) { + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + if ( ! textureProperties.__image__webglTextureCube ) { + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__image__webglTextureCube = _gl.createTexture(); + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + + var isCompressed = ( texture && texture.isCompressedTexture ); + var isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + var cubeImage = []; + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + var image = cubeImage[ 0 ], + isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage ); + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed ) { + + if ( isDataTexture ) { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] ); + + } + + } else { + + var mipmap, mipmaps = cubeImage[ i ].mipmaps; + + for ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) { + + mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) { + + _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } else { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + } + + } + + } + + function setTextureCubeDynamic( texture, slot ) { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture ); + + } + + function setTextureParameters( textureType, texture, isPowerOfTwoImage ) { + + var extension; + + if ( isPowerOfTwoImage ) { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) ); + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) ); + + } else { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE ); + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture ); + + } + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture ); + + } + + } + + extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; + if ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return; + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + if ( texture.isVideoTexture ) { + + _videoTextures[ texture.id ] = texture; + + } + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); + _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); + + var image = clampToMaxSize( texture.image, capabilities.maxTextureSize ); + + if ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) { + + image = makePowerOfTwo( image ); + + } + + var isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage ); + + var mipmap, mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + var internalFormat = _gl.DEPTH_COMPONENT; + + if ( texture.type === FloatType ) { + + if ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' ); + internalFormat = _gl.DEPTH_COMPONENT32F; + + } else if ( _isWebGL2 ) { + + // WebGL 2.0 requires signed internalformat for glTexImage2D + internalFormat = _gl.DEPTH_COMPONENT16; + + } + + if ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.format === DepthStencilFormat ) { + + internalFormat = _gl.DEPTH_STENCIL; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + state.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data ); + + } + + } else if ( texture.isCompressedTexture ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image ); + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + state.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget ) { + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else { + + // FIXME: We don't support !depth !stencil + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height ); + + } + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + var isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget ); + + } + + } else { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget ); + + } + + } + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + infoMemory.textures ++; + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo ); + + for ( var i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, null ); + + } else { + + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + state.bindTexture( _gl.TEXTURE_2D, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + var texture = renderTarget.texture; + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + if ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) { + + var target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; + var webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + _gl.generateMipmap( target ); + state.bindTexture( target, null ); + + } + + } + + function updateVideoTextures() { + + for ( var id in _videoTextures ) { + + _videoTextures[ id ].update(); + + } + + } + + this.setTexture2D = setTexture2D; + this.setTextureCube = setTextureCube; + this.setTextureCubeDynamic = setTextureCubeDynamic; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateVideoTextures = updateVideoTextures; + +} + +/** + * @author fordacious / fordacious.github.io + */ + +function WebGLProperties() { + + var properties = {}; + + function get( object ) { + + var uuid = object.uuid; + var map = properties[ uuid ]; + + if ( map === undefined ) { + + map = {}; + properties[ uuid ] = map; + + } + + return map; + + } + + function remove( object ) { + + delete properties[ object.uuid ]; + + } + + function clear() { + + properties = {}; + + } + + return { + get: get, + remove: remove, + clear: clear + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLState( gl, extensions, utils ) { + + function ColorBuffer() { + + var locked = false; + + var color = new Vector4(); + var currentColorMask = null; + var currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + var locked = false; + + var currentDepthMask = null; + var currentDepthFunc = null; + var currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( gl.DEPTH_TEST ); + + } else { + + disable( gl.DEPTH_TEST ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( gl.NEVER ); + break; + + case AlwaysDepth: + + gl.depthFunc( gl.ALWAYS ); + break; + + case LessDepth: + + gl.depthFunc( gl.LESS ); + break; + + case LessEqualDepth: + + gl.depthFunc( gl.LEQUAL ); + break; + + case EqualDepth: + + gl.depthFunc( gl.EQUAL ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( gl.GEQUAL ); + break; + + case GreaterDepth: + + gl.depthFunc( gl.GREATER ); + break; + + case NotEqualDepth: + + gl.depthFunc( gl.NOTEQUAL ); + break; + + default: + + gl.depthFunc( gl.LEQUAL ); + + } + + } else { + + gl.depthFunc( gl.LEQUAL ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + var locked = false; + + var currentStencilMask = null; + var currentStencilFunc = null; + var currentStencilRef = null; + var currentStencilFuncMask = null; + var currentStencilFail = null; + var currentStencilZFail = null; + var currentStencilZPass = null; + var currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( stencilTest ) { + + enable( gl.STENCIL_TEST ); + + } else { + + disable( gl.STENCIL_TEST ); + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + var colorBuffer = new ColorBuffer(); + var depthBuffer = new DepthBuffer(); + var stencilBuffer = new StencilBuffer(); + + var maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var newAttributes = new Uint8Array( maxVertexAttributes ); + var enabledAttributes = new Uint8Array( maxVertexAttributes ); + var attributeDivisors = new Uint8Array( maxVertexAttributes ); + + var capabilities = {}; + + var compressedTextureFormats = null; + + var currentProgram = null; + + var currentBlending = null; + var currentBlendEquation = null; + var currentBlendSrc = null; + var currentBlendDst = null; + var currentBlendEquationAlpha = null; + var currentBlendSrcAlpha = null; + var currentBlendDstAlpha = null; + var currentPremultipledAlpha = false; + + var currentFlipSided = null; + var currentCullFace = null; + + var currentLineWidth = null; + + var currentPolygonOffsetFactor = null; + var currentPolygonOffsetUnits = null; + + var maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS ); + + var version = parseFloat( /^WebGL\ ([0-9])/.exec( gl.getParameter( gl.VERSION ) )[ 1 ] ); + var lineWidthAvailable = parseFloat( version ) >= 1.0; + + var currentTextureSlot = null; + var currentBoundTextures = {}; + + var currentScissor = new Vector4(); + var currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + var data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + var texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + + for ( var i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); + + } + + return texture; + + } + + var emptyTextures = {}; + emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 ); + emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( gl.DEPTH_TEST ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( gl.CULL_FACE ); + + enable( gl.BLEND ); + setBlending( NormalBlending ); + + // + + function initAttributes() { + + for ( var i = 0, l = newAttributes.length; i < l; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== 0 ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, 0 ); + attributeDivisors[ attribute ] = 0; + + } + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + for ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function enable( id ) { + + if ( capabilities[ id ] !== true ) { + + gl.enable( id ); + capabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( capabilities[ id ] !== false ) { + + gl.disable( id ); + capabilities[ id ] = false; + + } + + } + + function getCompressedTextureFormats() { + + if ( compressedTextureFormats === null ) { + + compressedTextureFormats = []; + + if ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) || + extensions.get( 'WEBGL_compressed_texture_s3tc' ) || + extensions.get( 'WEBGL_compressed_texture_etc1' ) ) { + + var formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS ); + + for ( var i = 0; i < formats.length; i ++ ) { + + compressedTextureFormats.push( formats[ i ] ); + + } + + } + + } + + return compressedTextureFormats; + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending !== NoBlending ) { + + enable( gl.BLEND ); + + } else { + + disable( gl.BLEND ); + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + switch ( blending ) { + + case AdditiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.SRC_ALPHA, gl.ONE ); + + } + break; + + case SubtractiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR ); + + } + break; + + case MultiplyBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.SRC_COLOR ); + + } + break; + + default: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } + + } + + } + + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + } else { + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + } + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + function setMaterial( material, frontFaceCW ) { + + material.side === DoubleSide + ? disable( gl.CULL_FACE ) + : enable( gl.CULL_FACE ); + + var flipSided = ( material.side === BackSide ); + if ( frontFaceCW ) flipSided = ! flipSided; + + setFlipSided( flipSided ); + + material.transparent === true + ? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ) + : setBlending( NoBlending ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( gl.CW ); + + } else { + + gl.frontFace( gl.CCW ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( gl.CULL_FACE ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( gl.BACK ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( gl.FRONT ); + + } else { + + gl.cullFace( gl.FRONT_AND_BACK ); + + } + + } + + } else { + + disable( gl.CULL_FACE ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( gl.POLYGON_OFFSET_FILL ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( gl.POLYGON_OFFSET_FILL ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( gl.SCISSOR_TEST ); + + } else { + + disable( gl.SCISSOR_TEST ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + var boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + for ( var i = 0; i < enabledAttributes.length; i ++ ) { + + if ( enabledAttributes[ i ] === 1 ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + capabilities = {}; + + compressedTextureFormats = null; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlending = null; + + currentFlipSided = null; + currentCullFace = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + enableAttributeAndDivisor: enableAttributeAndDivisor, + disableUnusedAttributes: disableUnusedAttributes, + enable: enable, + disable: disable, + getCompressedTextureFormats: getCompressedTextureFormats, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLCapabilities( gl, extensions, parameters ) { + + var maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + var precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + var maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + + var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); + var maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); + var maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); + var maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); + + var maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); + var maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); + var maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); + + var vertexTextures = maxVertexTextures > 0; + var floatFragmentTextures = !! extensions.get( 'OES_texture_float' ); + var floatVertexTextures = vertexTextures && floatFragmentTextures; + + return { + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author greggman / http://games.greggman.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author tschw + */ + +function PerspectiveCamera( fov, aspect, near, far ) { + + Camera.call( this ); + + this.type = 'PerspectiveCamera'; + + this.fov = fov !== undefined ? fov : 50; + this.zoom = 1; + + this.near = near !== undefined ? near : 0.1; + this.far = far !== undefined ? far : 2000; + this.focus = 10; + + this.aspect = aspect !== undefined ? aspect : 1; + this.view = null; + + this.filmGauge = 35; // width of the film (default in millimeters) + this.filmOffset = 0; // horizontal film offset (same unit as gauge) + + this.updateProjectionMatrix(); + +} + +PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.fov = source.fov; + this.zoom = source.zoom; + + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + + return this; + + }, + + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + var vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + var vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return _Math.RAD2DEG * 2 * Math.atan( + Math.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * var w = 1920; + * var h = 1080; + * var fullWidth = w * 3; + * var fullHeight = h * 2; + * + * --A-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + this.aspect = fullWidth / fullHeight; + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var near = this.near, + top = near * Math.tan( + _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom, + height = 2 * top, + width = this.aspect * height, + left = - 0.5 * width, + view = this.view; + + if ( this.view !== null && this.view.enabled ) { + + var fullWidth = view.fullWidth, + fullHeight = view.fullHeight; + + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + + } + + var skew = this.filmOffset; + if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); + + this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.fov = this.fov; + data.object.zoom = this.zoom; + + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + + data.object.aspect = this.aspect; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ArrayCamera( array ) { + + PerspectiveCamera.call( this ); + + this.cameras = array || []; + +} + +ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebVRManager( renderer ) { + + var scope = this; + + var device = null; + var frameData = null; + + var poseTarget = null; + + if ( typeof window !== 'undefined' && 'VRFrameData' in window ) { + + frameData = new window.VRFrameData(); + + } + + var matrixWorldInverse = new Matrix4(); + + var cameraL = new PerspectiveCamera(); + cameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 ); + cameraL.layers.enable( 1 ); + + var cameraR = new PerspectiveCamera(); + cameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 ); + cameraR.layers.enable( 2 ); + + var cameraVR = new ArrayCamera( [ cameraL, cameraR ] ); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + // + + var currentSize, currentPixelRatio; + + function onVRDisplayPresentChange() { + + if ( device !== null && device.isPresenting ) { + + var eyeParameters = device.getEyeParameters( 'left' ); + var renderWidth = eyeParameters.renderWidth; + var renderHeight = eyeParameters.renderHeight; + + currentPixelRatio = renderer.getPixelRatio(); + currentSize = renderer.getSize(); + + renderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 ); + + } else if ( scope.enabled ) { + + renderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio ); + + } + + } + + if ( typeof window !== 'undefined' ) { + + window.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false ); + + } + + // + + this.enabled = false; + + this.getDevice = function () { + + return device; + + }; + + this.setDevice = function ( value ) { + + if ( value !== undefined ) device = value; + + }; + + this.setPoseTarget = function ( object ) { + + if ( object !== undefined ) poseTarget = object; + + }; + + this.getCamera = function ( camera ) { + + if ( device === null ) return camera; + + device.depthNear = camera.near; + device.depthFar = camera.far; + + device.getFrameData( frameData ); + + // + + var pose = frameData.pose; + var poseObject = poseTarget !== null ? poseTarget : camera; + + if ( pose.position !== null ) { + + poseObject.position.fromArray( pose.position ); + + } else { + + poseObject.position.set( 0, 0, 0 ); + + } + + if ( pose.orientation !== null ) { + + poseObject.quaternion.fromArray( pose.orientation ); + + } + + poseObject.updateMatrixWorld(); + + if ( device.isPresenting === false ) return camera; + + // + + cameraL.near = camera.near; + cameraR.near = camera.near; + + cameraL.far = camera.far; + cameraR.far = camera.far; + + cameraVR.matrixWorld.copy( camera.matrixWorld ); + cameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse ); + + cameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix ); + cameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix ); + + var parent = poseObject.parent; + + if ( parent !== null ) { + + matrixWorldInverse.getInverse( parent.matrixWorld ); + + cameraL.matrixWorldInverse.multiply( matrixWorldInverse ); + cameraR.matrixWorldInverse.multiply( matrixWorldInverse ); + + } + + // envMap and Mirror needs camera.matrixWorld + + cameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse ); + cameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse ); + + cameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix ); + cameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix ); + + // HACK @mrdoob + // https://github.com/w3c/webvr/issues/203 + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + // + + var layers = device.getLayers(); + + if ( layers.length ) { + + var layer = layers[ 0 ]; + + if ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) { + + cameraL.bounds.fromArray( layer.leftBounds ); + + } + + if ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) { + + cameraR.bounds.fromArray( layer.rightBounds ); + + } + + } + + return cameraVR; + + }; + + this.submitFrame = function () { + + if ( device && device.isPresenting ) device.submitFrame(); + + }; + + this.dispose = function () { + + if ( typeof window !== 'undefined' ) { + + window.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange ); + + } + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLExtensions( gl ) { + + var extensions = {}; + + return { + + get: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ]; + + } + + var extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + case 'WEBGL_compressed_texture_etc1': + extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + if ( extension === null ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + extensions[ name ] = extension; + + return extension; + + } + + }; + +} + +/** + * @author tschw + */ + +function WebGLClipping() { + + var scope = this, + + globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false, + + plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function ( planes, enableLocalClipping, camera ) { + + var enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function () { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function () { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) { + + if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { + + // there's no local clipping + + if ( renderingShadows ) { + + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + + } + + } else { + + var nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4, + + dstArray = cache.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, fromCache ); + + for ( var i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + cache.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + var nPlanes = planes !== null ? planes.length : 0, + dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + var flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + + return dstArray; + + } + +} + +/** + * @author thespite / http://www.twitter.com/thespite + */ + +function WebGLUtils( gl, extensions ) { + + function convert( p ) { + + var extension; + + if ( p === RepeatWrapping ) return gl.REPEAT; + if ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE; + if ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT; + + if ( p === NearestFilter ) return gl.NEAREST; + if ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST; + if ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR; + + if ( p === LinearFilter ) return gl.LINEAR; + if ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST; + if ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR; + + if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE; + if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4; + if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1; + if ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5; + + if ( p === ByteType ) return gl.BYTE; + if ( p === ShortType ) return gl.SHORT; + if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT; + if ( p === IntType ) return gl.INT; + if ( p === UnsignedIntType ) return gl.UNSIGNED_INT; + if ( p === FloatType ) return gl.FLOAT; + + if ( p === HalfFloatType ) { + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) return extension.HALF_FLOAT_OES; + + } + + if ( p === AlphaFormat ) return gl.ALPHA; + if ( p === RGBFormat ) return gl.RGB; + if ( p === RGBAFormat ) return gl.RGBA; + if ( p === LuminanceFormat ) return gl.LUMINANCE; + if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA; + if ( p === DepthFormat ) return gl.DEPTH_COMPONENT; + if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL; + + if ( p === AddEquation ) return gl.FUNC_ADD; + if ( p === SubtractEquation ) return gl.FUNC_SUBTRACT; + if ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT; + + if ( p === ZeroFactor ) return gl.ZERO; + if ( p === OneFactor ) return gl.ONE; + if ( p === SrcColorFactor ) return gl.SRC_COLOR; + if ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR; + if ( p === SrcAlphaFactor ) return gl.SRC_ALPHA; + if ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA; + if ( p === DstAlphaFactor ) return gl.DST_ALPHA; + if ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA; + + if ( p === DstColorFactor ) return gl.DST_COLOR; + if ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR; + if ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } + + if ( p === MinEquation || p === MaxEquation ) { + + extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + if ( p === MinEquation ) return extension.MIN_EXT; + if ( p === MaxEquation ) return extension.MAX_EXT; + + } + + } + + if ( p === UnsignedInt248Type ) { + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL; + + } + + return 0; + + } + + return { convert: convert }; + +} + +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + * @author tschw + */ + +function WebGLRenderer( parameters ) { + + console.log( 'THREE.WebGLRenderer', REVISION ); + + parameters = parameters || {}; + + var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, + _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default'; + + var lightsArray = []; + var shadowsArray = []; + + var currentRenderList = null; + + var spritesArray = []; + var flaresArray = []; + + // public properties + + this.domElement = _canvas; + this.context = null; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.gammaInput = false; + this.gammaOutput = false; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = LinearToneMapping; + this.toneMappingExposure = 1.0; + this.toneMappingWhitePoint = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + var _this = this, + + _isContextLost = false, + + // internal state cache + + _currentRenderTarget = null, + _currentFramebuffer = null, + _currentMaterialId = - 1, + _currentGeometryProgram = '', + + _currentCamera = null, + _currentArrayCamera = null, + + _currentViewport = new Vector4(), + _currentScissor = new Vector4(), + _currentScissorTest = null, + + // + + _usedTextureUnits = 0, + + // + + _width = _canvas.width, + _height = _canvas.height, + + _pixelRatio = 1, + + _viewport = new Vector4( 0, 0, _width, _height ), + _scissor = new Vector4( 0, 0, _width, _height ), + _scissorTest = false, + + // frustum + + _frustum = new Frustum(), + + // clipping + + _clipping = new WebGLClipping(), + _clippingEnabled = false, + _localClippingEnabled = false, + + // camera matrices cache + + _projScreenMatrix = new Matrix4(), + + _vector3 = new Vector3(), + + // info + + _infoMemory = { + geometries: 0, + textures: 0 + }, + + _infoRender = { + + frame: 0, + calls: 0, + vertices: 0, + faces: 0, + points: 0 + + }; + + this.info = { + + render: _infoRender, + memory: _infoMemory, + programs: null + + }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + var _gl; + + try { + + var contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer, + powerPreference: _powerPreference + }; + + // event listeners must be registered before WebGL context is created, see #12753 + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + _gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes ); + + if ( _gl === null ) { + + if ( _canvas.getContext( 'webgl' ) !== null ) { + + throw new Error( 'Error creating WebGL context with your selected attributes.' ); + + } else { + + throw new Error( 'Error creating WebGL context.' ); + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error.message ); + + } + + var extensions, capabilities, state; + var properties, textures, attributes, geometries, objects, lights; + var programCache, renderLists; + + var background, morphtargets, bufferRenderer, indexedBufferRenderer; + var flareRenderer, spriteRenderer; + + var utils; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_float_linear' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'OES_element_index_uint' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + utils = new WebGLUtils( _gl, extensions ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + state = new WebGLState( _gl, extensions, utils ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, _infoMemory ); + attributes = new WebGLAttributes( _gl ); + geometries = new WebGLGeometries( _gl, attributes, _infoMemory ); + objects = new WebGLObjects( geometries, _infoRender ); + morphtargets = new WebGLMorphtargets( _gl ); + programCache = new WebGLPrograms( _this, extensions, capabilities ); + lights = new WebGLLights(); + renderLists = new WebGLRenderLists(); + + background = new WebGLBackground( _this, state, geometries, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, _infoRender ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, _infoRender ); + + flareRenderer = new WebGLFlareRenderer( _this, _gl, state, textures, capabilities ); + spriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities ); + + _this.info.programs = programCache.programs; + + _this.context = _gl; + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + + } + + initGLContext(); + + // vr + + var vr = new WebVRManager( _this ); + + this.vr = vr; + + // shadow map + + var shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function () { + + return { + width: _width, + height: _height + }; + + }; + + this.setSize = function ( width, height, updateStyle ) { + + var device = vr.getDevice(); + + if ( device && device.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = width * _pixelRatio; + _canvas.height = height * _pixelRatio; + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function () { + + return { + width: _width * _pixelRatio, + height: _height * _pixelRatio + }; + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = width * pixelRatio; + _canvas.height = height * pixelRatio; + + this.setViewport( 0, 0, width, height ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + _viewport.set( x, _height - y - height, width, height ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + _scissor.set( x, _height - y - height, width, height ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + // Clearing + + this.getClearColor = function () { + + return background.getClearColor(); + + }; + + this.setClearColor = function () { + + background.setClearColor.apply( background, arguments ); + + }; + + this.getClearAlpha = function () { + + return background.getClearAlpha(); + + }; + + this.setClearAlpha = function () { + + background.setClearAlpha.apply( background, arguments ); + + }; + + this.clear = function ( color, depth, stencil ) { + + var bits = 0; + + if ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; + if ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; + if ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + this.clearTarget = function ( renderTarget, color, depth, stencil ) { + + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + + vr.dispose(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( /* event */ ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + var material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + var programInfo = properties.get( material ).program; + + material.program = undefined; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program, material ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program, material ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program, material ) { + + state.initAttributes(); + + var buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + var programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal ); + + if ( ! material.isMeshPhongMaterial && + ! material.isMeshStandardMaterial && + ! material.isMeshNormalMaterial && + material.flatShading === true ) { + + for ( var i = 0, l = object.count * 3; i < l; i += 9 ) { + + var array = object.normalArray; + + var nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3; + var ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3; + var nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3; + + array[ i + 0 ] = nx; + array[ i + 1 ] = ny; + array[ i + 2 ] = nz; + + array[ i + 3 ] = nx; + array[ i + 4 ] = ny; + array[ i + 5 ] = nz; + + array[ i + 6 ] = nx; + array[ i + 7 ] = ny; + array[ i + 8 ] = nz; + + } + + } + + _gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.normal ); + + _gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasUvs && material.map ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.uv ); + + _gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasColors && material.vertexColors !== NoColors ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.color ); + + _gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 ); + + } + + state.disableUnusedAttributes(); + + _gl.drawArrays( _gl.TRIANGLES, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) { + + var frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + state.setMaterial( material, frontFaceCW ); + + var program = setProgram( camera, fog, material, object ); + var geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true ); + + var updateBuffers = false; + + if ( geometryProgram !== _currentGeometryProgram ) { + + _currentGeometryProgram = geometryProgram; + updateBuffers = true; + + } + + if ( object.morphTargetInfluences ) { + + morphtargets.update( object, geometry, material, program ); + + updateBuffers = true; + + } + + // + + var index = geometry.index; + var position = geometry.attributes.position; + var rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + var attribute; + var renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( material, program, geometry ); + + if ( index !== null ) { + + _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer ); + + } + + } + + // + + var dataCount = 0; + + if ( index !== null ) { + + dataCount = index.count; + + } else if ( position !== undefined ) { + + dataCount = position.count; + + } + + var rangeStart = geometry.drawRange.start * rangeFactor; + var rangeCount = geometry.drawRange.count * rangeFactor; + + var groupStart = group !== null ? group.start * rangeFactor : 0; + var groupCount = group !== null ? group.count * rangeFactor : Infinity; + + var drawStart = Math.max( rangeStart, groupStart ); + var drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + var drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( _gl.LINES ); + + } else { + + switch ( object.drawMode ) { + + case TrianglesDrawMode: + renderer.setMode( _gl.TRIANGLES ); + break; + + case TriangleStripDrawMode: + renderer.setMode( _gl.TRIANGLE_STRIP ); + break; + + case TriangleFanDrawMode: + renderer.setMode( _gl.TRIANGLE_FAN ); + break; + + } + + } + + + } else if ( object.isLine ) { + + var lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( _gl.LINES ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( _gl.LINE_LOOP ); + + } else { + + renderer.setMode( _gl.LINE_STRIP ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( _gl.POINTS ); + + } + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( geometry.maxInstancedCount > 0 ) { + + renderer.renderInstances( geometry, drawStart, drawCount ); + + } + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + function setupVertexAttributes( material, program, geometry, startIndex ) { + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) { + + console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + if ( startIndex === undefined ) startIndex = 0; + + state.initAttributes(); + + var geometryAttributes = geometry.attributes; + + var programAttributes = program.getAttributes(); + + var materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( var name in programAttributes ) { + + var programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + var geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + var normalized = geometryAttribute.normalized; + var size = geometryAttribute.itemSize; + + var attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + var buffer = attribute.buffer; + var type = attribute.type; + var bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + var data = geometryAttribute.data; + var stride = data.stride; + var offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + state.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = data.meshPerAttribute * data.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, ( startIndex * stride + offset ) * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + state.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * bytesPerElement ); + + } + + } else if ( materialDefaultAttributeValues !== undefined ) { + + var value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + _gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + _gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + _gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + _gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + state.disableUnusedAttributes(); + + } + + // Compile + + this.compile = function ( scene, camera ) { + + lightsArray.length = 0; + shadowsArray.length = 0; + + scene.traverse( function ( object ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } + + } ); + + lights.setup( lightsArray, shadowsArray, camera ); + + scene.traverse( function ( object ) { + + if ( object.material ) { + + if ( Array.isArray( object.material ) ) { + + for ( var i = 0; i < object.material.length; i ++ ) { + + initMaterial( object.material[ i ], scene.fog, object ); + + } + + } else { + + initMaterial( object.material, scene.fog, object ); + + } + + } + + } ); + + }; + + // Animation Loop + + var isAnimating = false; + var onAnimationFrame = null; + + function start() { + + if ( isAnimating ) return; + + var device = vr.getDevice(); + + if ( device && device.isPresenting ) { + + device.requestAnimationFrame( loop ); + + } else { + + window.requestAnimationFrame( loop ); + + } + + isAnimating = true; + + } + + function loop( time ) { + + if ( onAnimationFrame !== null ) onAnimationFrame( time ); + + var device = vr.getDevice(); + + if ( device && device.isPresenting ) { + + device.requestAnimationFrame( loop ); + + } else { + + window.requestAnimationFrame( loop ); + + } + + } + + this.animate = function ( callback ) { + + onAnimationFrame = callback; + start(); + + }; + + // Rendering + + this.render = function ( scene, camera, renderTarget, forceClear ) { + + if ( ! ( camera && camera.isCamera ) ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost ) return; + + // reset caching for this frame + + _currentGeometryProgram = ''; + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( vr.enabled ) { + + camera = vr.getCamera( camera ); + + } + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + lightsArray.length = 0; + shadowsArray.length = 0; + + spritesArray.length = 0; + flaresArray.length = 0; + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, _this.sortObjects ); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort(); + + } + + // + + textures.updateVideoTextures(); + + // + + if ( _clippingEnabled ) _clipping.beginShadows(); + + shadowMap.render( shadowsArray, scene, camera ); + + lights.setup( lightsArray, shadowsArray, camera ); + + if ( _clippingEnabled ) _clipping.endShadows(); + + // + + _infoRender.frame ++; + _infoRender.calls = 0; + _infoRender.vertices = 0; + _infoRender.faces = 0; + _infoRender.points = 0; + + if ( renderTarget === undefined ) { + + renderTarget = null; + + } + + this.setRenderTarget( renderTarget ); + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + var opaqueObjects = currentRenderList.opaque; + var transparentObjects = currentRenderList.transparent; + + if ( scene.overrideMaterial ) { + + var overrideMaterial = scene.overrideMaterial; + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial ); + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial ); + + } else { + + // opaque pass (front-to-back order) + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera ); + + // transparent pass (back-to-front order) + + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera ); + + } + + // custom renderers + + spriteRenderer.render( spritesArray, scene, camera ); + flareRenderer.render( flaresArray, scene, camera, _currentViewport ); + + // Generate mipmap if we're using any kind of mipmap filtering + + if ( renderTarget ) { + + textures.updateRenderTargetMipmap( renderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + if ( vr.enabled ) { + + vr.submitFrame(); + + } + + // _gl.finish(); + + }; + + /* + // TODO Duplicated code (Frustum) + + var _sphere = new Sphere(); + + function isObjectViewable( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ). + applyMatrix4( object.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSpriteViewable( sprite ) { + + _sphere.center.set( 0, 0, 0 ); + _sphere.radius = 0.7071067811865476; + _sphere.applyMatrix4( sprite.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSphereViewable( sphere ) { + + if ( ! _frustum.intersectsSphere( sphere ) ) return false; + + var numPlanes = _clipping.numPlanes; + + if ( numPlanes === 0 ) return true; + + var planes = _this.clippingPlanes, + + center = sphere.center, + negRad = - sphere.radius, + i = 0; + + do { + + // out when deeper than radius in the negative halfspace + if ( planes[ i ].distanceToPoint( center ) < negRad ) return false; + + } while ( ++ i !== numPlanes ); + + return true; + + } + */ + + function projectObject( object, camera, sortObjects ) { + + if ( object.visible === false ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + spritesArray.push( object ); + + } + + } else if ( object.isLensFlare ) { + + flaresArray.push( object ); + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + object.skeleton.update(); + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + var geometry = objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, _vector3.z, null ); + + } + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera, overrideMaterial ) { + + for ( var i = 0, l = renderList.length; i < l; i ++ ) { + + var renderItem = renderList[ i ]; + + var object = renderItem.object; + var geometry = renderItem.geometry; + var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; + var group = renderItem.group; + + if ( camera.isArrayCamera ) { + + _currentArrayCamera = camera; + + var cameras = camera.cameras; + + for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { + + var camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + var bounds = camera2.bounds; + + var x = bounds.x * _width; + var y = bounds.y * _height; + var width = bounds.z * _width; + var height = bounds.w * _height; + + state.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + _currentArrayCamera = null; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + var frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + state.setMaterial( material, frontFaceCW ); + + var program = setProgram( camera, scene.fog, material, object ); + + _currentGeometryProgram = ''; + + renderObjectImmediate( object, program, material ); + + } else { + + _this.renderBufferDirect( camera, scene.fog, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + + } + + function initMaterial( material, fog, object ) { + + var materialProperties = properties.get( material ); + + var parameters = programCache.getParameters( + material, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object ); + + var code = programCache.getProgramCode( material, parameters ); + + var program = materialProperties.program; + var programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.code !== code ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + if ( parameters.shaderID ) { + + var shader = ShaderLib[ parameters.shaderID ]; + + materialProperties.shader = { + name: material.type, + uniforms: UniformsUtils.clone( shader.uniforms ), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader + }; + + } else { + + materialProperties.shader = { + name: material.type, + uniforms: material.uniforms, + vertexShader: material.vertexShader, + fragmentShader: material.fragmentShader + }; + + } + + material.onBeforeCompile( materialProperties.shader ); + + program = programCache.acquireProgram( material, materialProperties.shader, parameters, code ); + + materialProperties.program = program; + material.program = program; + + } + + var programAttributes = program.getAttributes(); + + if ( material.morphTargets ) { + + material.numSupportedMorphTargets = 0; + + for ( var i = 0; i < _this.maxMorphTargets; i ++ ) { + + if ( programAttributes[ 'morphTarget' + i ] >= 0 ) { + + material.numSupportedMorphTargets ++; + + } + + } + + } + + if ( material.morphNormals ) { + + material.numSupportedMorphNormals = 0; + + for ( var i = 0; i < _this.maxMorphNormals; i ++ ) { + + if ( programAttributes[ 'morphNormal' + i ] >= 0 ) { + + material.numSupportedMorphNormals ++; + + } + + } + + } + + var uniforms = materialProperties.shader.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = _clipping.numPlanes; + materialProperties.numIntersection = _clipping.numIntersection; + uniforms.clippingPlanes = _clipping.uniform; + + } + + materialProperties.fog = fog; + + // store the light setup it was created for + + materialProperties.lightsHash = lights.state.hash; + + if ( material.lights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.directionalLights.value = lights.state.directional; + uniforms.spotLights.value = lights.state.spot; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.pointLights.value = lights.state.point; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + var progUniforms = materialProperties.program.getUniforms(), + uniformsList = + WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, fog, material, object ) { + + _usedTextureUnits = 0; + + var materialProperties = properties.get( material ); + + if ( _clippingEnabled ) { + + if ( _localClippingEnabled || camera !== _currentCamera ) { + + var useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + _clipping.setState( + material.clippingPlanes, material.clipIntersection, material.clipShadows, + camera, materialProperties, useCache ); + + } + + } + + if ( material.needsUpdate === false ) { + + if ( materialProperties.program === undefined ) { + + material.needsUpdate = true; + + } else if ( material.fog && materialProperties.fog !== fog ) { + + material.needsUpdate = true; + + } else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) { + + material.needsUpdate = true; + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== _clipping.numPlanes || + materialProperties.numIntersection !== _clipping.numIntersection ) ) { + + material.needsUpdate = true; + + } + + } + + if ( material.needsUpdate ) { + + initMaterial( material, fog, object ); + material.needsUpdate = false; + + } + + var refreshProgram = false; + var refreshMaterial = false; + var refreshLights = false; + + var program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.shader.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || camera !== _currentCamera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + // Avoid unneeded uniform updates per ArrayCamera's sub-camera + + if ( _currentCamera !== ( _currentArrayCamera || camera ) ) { + + _currentCamera = ( _currentArrayCamera || camera ); + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + var uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // not sure why, but otherwise weird things happen + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + var skeleton = object.skeleton; + + if ( skeleton ) { + + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === undefined ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + var size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = _Math.ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + var boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + var boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + p_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint ); + + if ( material.lights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + refreshUniformsFog( m_uniforms, fog ); + + } + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsLambert( m_uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshToonMaterial ) { + + refreshUniformsToon( m_uniforms, material ); + + } else { + + refreshUniformsPhong( m_uniforms, material ); + + } + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( m_uniforms, material ); + + } else { + + refreshUniformsStandard( m_uniforms, material ); + + } + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDepth( m_uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDistance( m_uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsNormal( m_uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( m_uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( m_uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( m_uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + m_uniforms.color.value = material.color; + m_uniforms.opacity.value = material.opacity; + + } + + // RectAreaLight Texture + // TODO (mrdoob): Find a nicer implementation + + if ( m_uniforms.ltcMat !== undefined ) m_uniforms.ltcMat.value = UniformsLib.LTC_MAT_TEXTURE; + if ( m_uniforms.ltcMag !== undefined ) m_uniforms.ltcMag.value = UniformsLib.LTC_MAG_TEXTURE; + + WebGLUniforms.upload( + _gl, materialProperties.uniformsList, m_uniforms, _this ); + + } + + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // Uniforms (refresh uniforms objects) + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value = material.color; + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + if ( material.envMap ) { + + uniforms.envMap.value = material.envMap; + + // don't flip CubeTexture envMaps, flip everything else: + // WebGLRenderTargetCube will be flipped for backwards compatibility + // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture + // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future + uniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + var rotation = uvScaleMap.rotation; + var center = uvScaleMap.center; + + uvScaleMap.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y ); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * _pixelRatio; + uniforms.scale.value = _height * 0.5; + + uniforms.map.value = material.map; + + if ( material.map !== null ) { + + if ( material.map.matrixAutoUpdate === true ) { + + var offset = material.map.offset; + var repeat = material.map.repeat; + var rotation = material.map.rotation; + var center = material.map.center; + + material.map.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y ); + + } + + uniforms.uvTransform.value.copy( material.map.matrix ); + + } + + } + + function refreshUniformsFog( uniforms, fog ) { + + uniforms.fogColor.value = fog.color; + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value = material.specular; + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + refreshUniformsPhong( uniforms, material ); + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + if ( material.envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + uniforms.clearCoat.value = material.clearCoat; + uniforms.clearCoatRoughness.value = material.clearCoatRoughness; + + refreshUniformsStandard( uniforms, material ); + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + // GL state setting + + this.setFaceCulling = function ( cullFace, frontFaceDirection ) { + + state.setCullFace( cullFace ); + state.setFlipSided( frontFaceDirection === FrontFaceDirectionCW ); + + }; + + // Textures + + function allocTextureUnit() { + + var textureUnit = _usedTextureUnits; + + if ( textureUnit >= capabilities.maxTextures ) { + + console.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures ); + + } + + _usedTextureUnits += 1; + + return textureUnit; + + } + + this.allocTextureUnit = allocTextureUnit; + + // this.setTexture2D = setTexture2D; + this.setTexture2D = ( function () { + + var warned = false; + + // backwards compatibility: peel texture.texture + return function setTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTexture = ( function () { + + var warned = false; + + return function setTexture( texture, slot ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead." ); + warned = true; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTextureCube = ( function () { + + var warned = false; + + return function setTextureCube( texture, slot ) { + + // backwards compatibility: peel texture.texture + if ( texture && texture.isWebGLRenderTargetCube ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + // currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture + // TODO: unify these code paths + if ( ( texture && texture.isCubeTexture ) || + ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) { + + // CompressedTexture can have Array in image :/ + + // this function alone should take care of cube textures + textures.setTextureCube( texture, slot ); + + } else { + + // assumed: texture property of THREE.WebGLRenderTargetCube + + textures.setTextureCubeDynamic( texture, slot ); + + } + + }; + + }() ); + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget ) { + + _currentRenderTarget = renderTarget; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + var framebuffer = null; + var isCube = false; + + if ( renderTarget ) { + + var __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLRenderTargetCube ) { + + framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ]; + isCube = true; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + var textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + var framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( framebuffer ) { + + var restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + restore = true; + + } + + try { + + var texture = renderTarget.texture; + var textureFormat = texture.format; + var textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer ); + + } + + } + + } + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function FogExp2( color, density ) { + + this.name = ''; + + this.color = new Color( color ); + this.density = ( density !== undefined ) ? density : 0.00025; + +} + +FogExp2.prototype.isFogExp2 = true; + +FogExp2.prototype.clone = function () { + + return new FogExp2( this.color.getHex(), this.density ); + +}; + +FogExp2.prototype.toJSON = function ( /* meta */ ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Fog( color, near, far ) { + + this.name = ''; + + this.color = new Color( color ); + + this.near = ( near !== undefined ) ? near : 1; + this.far = ( far !== undefined ) ? far : 1000; + +} + +Fog.prototype.isFog = true; + +Fog.prototype.clone = function () { + + return new Fog( this.color.getHex(), this.near, this.far ); + +}; + +Fog.prototype.toJSON = function ( /* meta */ ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Scene() { + + Object3D.call( this ); + + this.type = 'Scene'; + + this.background = null; + this.fog = null; + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + +} + +Scene.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Scene, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function LensFlare( texture, size, distance, blending, color ) { + + Object3D.call( this ); + + this.lensFlares = []; + + this.positionScreen = new Vector3(); + this.customUpdateCallback = undefined; + + if ( texture !== undefined ) { + + this.add( texture, size, distance, blending, color ); + + } + +} + +LensFlare.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LensFlare, + + isLensFlare: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.positionScreen.copy( source.positionScreen ); + this.customUpdateCallback = source.customUpdateCallback; + + for ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) { + + this.lensFlares.push( source.lensFlares[ i ] ); + + } + + return this; + + }, + + add: function ( texture, size, distance, blending, color, opacity ) { + + if ( size === undefined ) size = - 1; + if ( distance === undefined ) distance = 0; + if ( opacity === undefined ) opacity = 1; + if ( color === undefined ) color = new Color( 0xffffff ); + if ( blending === undefined ) blending = NormalBlending; + + distance = Math.min( distance, Math.max( 0, distance ) ); + + this.lensFlares.push( { + texture: texture, // THREE.Texture + size: size, // size in pixels (-1 = use texture.width) + distance: distance, // distance (0-1) from light source (0=at light source) + x: 0, y: 0, z: 0, // screen position (-1 => 1) z = 0 is in front z = 1 is back + scale: 1, // scale + rotation: 0, // rotation + opacity: opacity, // opacity + color: color, // color + blending: blending // blending + } ); + + }, + + /* + * Update lens flares update positions on all flares based on the screen position + * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way. + */ + + updateLensFlares: function () { + + var f, fl = this.lensFlares.length; + var flare; + var vecX = - this.positionScreen.x * 2; + var vecY = - this.positionScreen.y * 2; + + for ( f = 0; f < fl; f ++ ) { + + flare = this.lensFlares[ f ]; + + flare.x = this.positionScreen.x + vecX * flare.distance; + flare.y = this.positionScreen.y + vecY * flare.distance; + + flare.wantedRotation = flare.x * Math.PI * 0.25; + flare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25; + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * uvOffset: new THREE.Vector2(), + * uvScale: new THREE.Vector2() + * } + */ + +function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + this.map = null; + + this.rotation = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +SpriteMaterial.prototype = Object.create( Material.prototype ); +SpriteMaterial.prototype.constructor = SpriteMaterial; +SpriteMaterial.prototype.isSpriteMaterial = true; + +SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.map = source.map; + + this.rotation = source.rotation; + + return this; + +}; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + +} + +Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: ( function () { + + var intersectPoint = new Vector3(); + var worldPosition = new Vector3(); + var worldScale = new Vector3(); + + return function raycast( raycaster, intersects ) { + + worldPosition.setFromMatrixPosition( this.matrixWorld ); + raycaster.ray.closestPointToPoint( worldPosition, intersectPoint ); + + worldScale.setFromMatrixScale( this.matrixWorld ); + var guessSizeSq = worldScale.x * worldScale.y / 4; + + if ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return; + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: intersectPoint.clone(), + face: null, + object: this + + } ); + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.material ).copy( this ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function LOD() { + + Object3D.call( this ); + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + +} + +LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + var levels = source.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + return this; + + }, + + addLevel: function ( object, distance ) { + + if ( distance === undefined ) distance = 0; + + distance = Math.abs( distance ); + + var levels = this.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + }, + + getObjectForDistance: function ( distance ) { + + var levels = this.levels; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + }, + + raycast: ( function () { + + var matrixPosition = new Vector3(); + + return function raycast( raycaster, intersects ) { + + matrixPosition.setFromMatrixPosition( this.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( matrixPosition ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + }; + + }() ), + + update: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function update( camera ) { + + var levels = this.levels; + + if ( levels.length > 1 ) { + + v1.setFromMatrixPosition( camera.matrixWorld ); + v2.setFromMatrixPosition( this.matrixWorld ); + + var distance = v1.distanceTo( v2 ); + + levels[ 0 ].object.visible = true; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }; + + }(), + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.levels = []; + + var levels = this.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author michael guerrero / http://realitymeltdown.com + * @author ikerr / http://verold.com + */ + +function Skeleton( bones, boneInverses ) { + + // copy the bone array + + bones = bones || []; + + this.bones = bones.slice( 0 ); + this.boneMatrices = new Float32Array( this.bones.length * 16 ); + + // use the supplied bone inverses or calculate the inverses + + if ( boneInverses === undefined ) { + + this.calculateInverses(); + + } else { + + if ( this.bones.length === boneInverses.length ) { + + this.boneInverses = boneInverses.slice( 0 ); + + } else { + + console.warn( 'THREE.Skeleton boneInverses is the wrong length.' ); + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + +} + +Object.assign( Skeleton.prototype, { + + calculateInverses: function () { + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.getInverse( this.bones[ i ].matrixWorld ); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + var bone, i, il; + + // recover the bind-time world matrices + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.getInverse( this.boneInverses[ i ] ); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.getInverse( bone.parent.matrixWorld ); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + }, + + update: ( function () { + + var offsetMatrix = new Matrix4(); + var identityMatrix = new Matrix4(); + + return function update() { + + var bones = this.bones; + var boneInverses = this.boneInverses; + var boneMatrices = this.boneMatrices; + var boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( var i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + var matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix; + + offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== undefined ) { + + boneTexture.needsUpdate = true; + + } + + }; + + } )(), + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + +} + +Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function SkinnedMesh( geometry, material ) { + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + var bones = this.initBones(); + var skeleton = new Skeleton( bones ); + + this.bind( skeleton, this.matrixWorld ); + + this.normalizeSkinWeights(); + +} + +SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + initBones: function () { + + var bones = [], bone, gbone; + var i, il; + + if ( this.geometry && this.geometry.bones !== undefined ) { + + // first, create array of 'Bone' objects from geometry data + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + // create new 'Bone' object + + bone = new Bone(); + bones.push( bone ); + + // apply values + + bone.name = gbone.name; + bone.position.fromArray( gbone.pos ); + bone.quaternion.fromArray( gbone.rotq ); + if ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl ); + + } + + // second, create bone hierarchy + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + if ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) { + + // subsequent bones in the hierarchy + + bones[ gbone.parent ].add( bones[ i ] ); + + } else { + + // topmost bone, immediate child of the skinned mesh + + this.add( bones[ i ] ); + + } + + } + + } + + // now the bones are part of the scene graph and children of the skinned mesh. + // let's update the corresponding matrices + + this.updateMatrixWorld( true ); + + return bones; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.getInverse( bindMatrix ); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + var scale, i; + + if ( this.geometry && this.geometry.isGeometry ) { + + for ( i = 0; i < this.geometry.skinWeights.length; i ++ ) { + + var sw = this.geometry.skinWeights[ i ]; + + scale = 1.0 / sw.manhattanLength(); + + if ( scale !== Infinity ) { + + sw.multiplyScalar( scale ); + + } else { + + sw.set( 1, 0, 0, 0 ); // do something reasonable + + } + + } + + } else if ( this.geometry && this.geometry.isBufferGeometry ) { + + var vec = new Vector4(); + + var skinWeight = this.geometry.attributes.skinWeight; + + for ( i = 0; i < skinWeight.count; i ++ ) { + + vec.x = skinWeight.getX( i ); + vec.y = skinWeight.getY( i ); + vec.z = skinWeight.getZ( i ); + vec.w = skinWeight.getW( i ); + + scale = 1.0 / vec.manhattanLength(); + + if ( scale !== Infinity ) { + + vec.multiplyScalar( scale ); + + } else { + + vec.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w ); + + } + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.getInverse( this.matrixWorld ); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.getInverse( this.bindMatrix ); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + +function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.lights = false; + + this.setValues( parameters ); + +} + +LineBasicMaterial.prototype = Object.create( Material.prototype ); +LineBasicMaterial.prototype.constructor = LineBasicMaterial; + +LineBasicMaterial.prototype.isLineBasicMaterial = true; + +LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Line( geometry, material, mode ) { + + if ( mode === 1 ) { + + console.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' ); + return new LineSegments( geometry, material ); + + } + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } ); + +} + +Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var precision = raycaster.linePrecision; + var precisionSq = precision * precision; + + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var vStart = new Vector3(); + var vEnd = new Vector3(); + var interSegment = new Vector3(); + var interRay = new Vector3(); + var step = ( this && this.isLineSegments ) ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, l = indices.length - 1; i < l; i += step ) { + + var a = indices[ i ]; + var b = indices[ i + 1 ]; + + vStart.fromArray( positions, a * 3 ); + vEnd.fromArray( positions, b * 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) { + + vStart.fromArray( positions, 3 * i ); + vEnd.fromArray( positions, 3 * i + 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var nbVertices = vertices.length; + + for ( var i = 0; i < nbVertices - 1; i += step ) { + + var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + +} + +LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true + +} ); + +/** + * @author mgreter / http://github.com/mgreter + */ + +function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + +} + +LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * } + */ + +function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.lights = false; + + this.setValues( parameters ); + +} + +PointsMaterial.prototype = Object.create( Material.prototype ); +PointsMaterial.prototype.constructor = PointsMaterial; + +PointsMaterial.prototype.isPointsMaterial = true; + +PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Points( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } ); + +} + +Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var object = this; + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + var threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + sphere.radius += threshold; + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + var localThresholdSq = localThreshold * localThreshold; + var position = new Vector3(); + + function testPoint( point, index ) { + + var rayPointDistanceSq = ray.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + var intersectPoint = ray.closestPointToPoint( point ); + intersectPoint.applyMatrix4( matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint.clone(), + index: index, + face: null, + object: object + + } ); + + } + + } + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, il = indices.length; i < il; i ++ ) { + + var a = indices[ i ]; + + position.fromArray( positions, a * 3 ); + + testPoint( position, a ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3; i < l; i ++ ) { + + position.fromArray( positions, i * 3 ); + + testPoint( position, i ); + + } + + } + + } else { + + var vertices = geometry.vertices; + + for ( var i = 0, l = vertices.length; i < l; i ++ ) { + + testPoint( vertices[ i ], i ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Group() { + + Object3D.call( this ); + + this.type = 'Group'; + +} + +Group.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group, + + isGroup: true + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.generateMipmaps = false; + + // Set needsUpdate when first frame is ready + + var scope = this; + + function onLoaded() { + + video.removeEventListener( 'loadeddata', onLoaded, false ); + scope.needsUpdate = true; + + } + + video.addEventListener( 'loadeddata', onLoaded, false ); + +} + +VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { + + constructor: VideoTexture, + + isVideoTexture: true, + + update: function () { + + var video = this.image; + + if ( video.readyState >= video.HAVE_CURRENT_DATA ) { + + this.needsUpdate = true; + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + +} + +CompressedTexture.prototype = Object.create( Texture.prototype ); +CompressedTexture.prototype.constructor = CompressedTexture; + +CompressedTexture.prototype.isCompressedTexture = true; + +/** + * @author Matt DesLauriers / @mattdesl + * @author atix / arthursilber.de + */ + +function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + +} + +DepthTexture.prototype = Object.create( Texture.prototype ); +DepthTexture.prototype.constructor = DepthTexture; +DepthTexture.prototype.isDepthTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function WireframeGeometry( geometry ) { + + BufferGeometry.call( this ); + + this.type = 'WireframeGeometry'; + + // buffer + + var vertices = []; + + // helper variables + + var i, j, l, o, ol; + var edge = [ 0, 0 ], edges = {}, e, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + var vertex; + + // different logic for Geometry and BufferGeometry + + if ( geometry && geometry.isGeometry ) { + + // create a data structure that contains all edges without duplicates + + var faces = geometry.faces; + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex = geometry.vertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = geometry.vertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else if ( geometry && geometry.isBufferGeometry ) { + + var position, indices, groups; + var group, start, count; + var index1, index2; + + vertex = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + position = geometry.attributes.position; + indices = geometry.index; + groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( o = 0, ol = groups.length; o < ol; ++ o ) { + + group = groups[ o ]; + + start = group.start; + count = group.count; + + for ( i = start, l = ( start + count ); i < l; i += 3 ) { + + for ( j = 0; j < 3; j ++ ) { + + edge1 = indices.getX( i + j ); + edge2 = indices.getX( i + ( j + 1 ) % 3 ); + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex.fromBufferAttribute( position, e.index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex.fromBufferAttribute( position, e.index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else { + + // non-indexed BufferGeometry + + position = geometry.attributes.position; + + for ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) { + + for ( j = 0; j < 3; j ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + index1 = 3 * i + j; + vertex.fromBufferAttribute( position, index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + index2 = 3 * i + ( ( j + 1 ) % 3 ); + vertex.fromBufferAttribute( position, index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +WireframeGeometry.prototype = Object.create( BufferGeometry.prototype ); +WireframeGeometry.prototype.constructor = WireframeGeometry; + +/** + * @author zz85 / https://github.com/zz85 + * @author Mugen87 / https://github.com/Mugen87 + * + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout http://prideout.net/blog/?p=44 + */ + +// ParametricGeometry + +function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + +} + +ParametricGeometry.prototype = Object.create( Geometry.prototype ); +ParametricGeometry.prototype.constructor = ParametricGeometry; + +// ParametricBufferGeometry + +function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + var EPS = 0.00001; + + var normal = new Vector3(); + + var p0 = new Vector3(), p1 = new Vector3(); + var pu = new Vector3(), pv = new Vector3(); + + var i, j; + + // generate vertices, normals and uvs + + var sliceCount = slices + 1; + + for ( i = 0; i <= stacks; i ++ ) { + + var v = i / stacks; + + for ( j = 0; j <= slices; j ++ ) { + + var u = j / slices; + + // vertex + + p0 = func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + p1 = func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + p1 = func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + p1 = func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + p1 = func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( i = 0; i < stacks; i ++ ) { + + for ( j = 0; j < slices; j ++ ) { + + var a = i * sliceCount + j; + var b = i * sliceCount + j + 1; + var c = ( i + 1 ) * sliceCount + j + 1; + var d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + +/** + * @author clockworkgeek / https://github.com/clockworkgeek + * @author timothypratley / https://github.com/timothypratley + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PolyhedronGeometry + +function PolyhedronGeometry( vertices, indices, radius, detail ) { + + Geometry.call( this ); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); + this.mergeVertices(); + +} + +PolyhedronGeometry.prototype = Object.create( Geometry.prototype ); +PolyhedronGeometry.prototype.constructor = PolyhedronGeometry; + +// PolyhedronBufferGeometry + +function PolyhedronBufferGeometry( vertices, indices, radius, detail ) { + + BufferGeometry.call( this ); + + this.type = 'PolyhedronBufferGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + radius = radius || 1; + detail = detail || 0; + + // default buffer data + + var vertexBuffer = []; + var uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + appplyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( var i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + var cols = Math.pow( 2, detail ); + + // we use this multidimensional array as a data structure for creating the subdivision + + var v = []; + + var i, j; + + // construct all of the vertices for this subdivision + + for ( i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + var aj = a.clone().lerp( c, i / cols ); + var bj = b.clone().lerp( c, i / cols ); + + var rows = cols - i; + + for ( j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( i = 0; i < cols; i ++ ) { + + for ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { + + var k = Math.floor( j / 2 ); + + if ( j % 2 === 0 ) { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + pushVertex( v[ i ][ k ] ); + + } else { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + + } + + } + + } + + } + + function appplyRadius( radius ) { + + var vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + var vertex = new Vector3(); + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + var u = azimuth( vertex ) / 2 / Math.PI + 0.5; + var v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( var i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + var x0 = uvBuffer[ i + 0 ]; + var x1 = uvBuffer[ i + 2 ]; + var x2 = uvBuffer[ i + 4 ]; + + var max = Math.max( x0, x1, x2 ); + var min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; + if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; + if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + var stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + var centroid = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + for ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + var azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + +} + +PolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TetrahedronGeometry + +function TetrahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +TetrahedronGeometry.prototype = Object.create( Geometry.prototype ); +TetrahedronGeometry.prototype.constructor = TetrahedronGeometry; + +// TetrahedronBufferGeometry + +function TetrahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + var indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'TetrahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +TetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +TetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// OctahedronGeometry + +function OctahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +OctahedronGeometry.prototype = Object.create( Geometry.prototype ); +OctahedronGeometry.prototype.constructor = OctahedronGeometry; + +// OctahedronBufferGeometry + +function OctahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, + 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + var indices = [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, + 0, 5, 2, 1, 2, 5, 1, 5, 3, + 1, 3, 4, 1, 4, 2 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'OctahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +OctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +OctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// IcosahedronGeometry + +function IcosahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +IcosahedronGeometry.prototype = Object.create( Geometry.prototype ); +IcosahedronGeometry.prototype.constructor = IcosahedronGeometry; + +// IcosahedronBufferGeometry + +function IcosahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + + var vertices = [ + - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, + 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, + t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 + ]; + + var indices = [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'IcosahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +IcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +IcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry; + +/** + * @author Abe Pazos / https://hamoid.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// DodecahedronGeometry + +function DodecahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +DodecahedronGeometry.prototype = Object.create( Geometry.prototype ); +DodecahedronGeometry.prototype.constructor = DodecahedronGeometry; + +// DodecahedronBufferGeometry + +function DodecahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + var r = 1 / t; + + var vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + var indices = [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, + 7, 19, 17, 7, 17, 6, 7, 6, 15, + 17, 4, 8, 17, 8, 10, 17, 10, 6, + 8, 0, 16, 8, 16, 2, 8, 2, 10, + 0, 12, 1, 0, 1, 18, 0, 18, 16, + 6, 10, 2, 6, 2, 13, 6, 13, 15, + 2, 16, 18, 2, 18, 3, 2, 3, 13, + 18, 1, 9, 18, 9, 11, 18, 11, 3, + 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, + 19, 5, 14, 19, 14, 4, 19, 4, 17, + 1, 12, 14, 1, 14, 5, 1, 5, 9 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'DodecahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +DodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +DodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry; + +/** + * @author oosmoxiecode / https://github.com/oosmoxiecode + * @author WestLangley / https://github.com/WestLangley + * @author zz85 / https://github.com/zz85 + * @author miningold / https://github.com/miningold + * @author jonobr1 / https://github.com/jonobr1 + * @author Mugen87 / https://github.com/Mugen87 + * + */ + +// TubeGeometry + +function TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) { + + Geometry.call( this ); + + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + if ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' ); + + var bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); + + // expose internals + + this.tangents = bufferGeometry.tangents; + this.normals = bufferGeometry.normals; + this.binormals = bufferGeometry.binormals; + + // create geometry + + this.fromBufferGeometry( bufferGeometry ); + this.mergeVertices(); + +} + +TubeGeometry.prototype = Object.create( Geometry.prototype ); +TubeGeometry.prototype.constructor = TubeGeometry; + +// TubeBufferGeometry + +function TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) { + + BufferGeometry.call( this ); + + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + tubularSegments = tubularSegments || 64; + radius = radius || 1; + radialSegments = radialSegments || 8; + closed = closed || false; + + var frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + var vertex = new Vector3(); + var normal = new Vector3(); + var uv = new Vector2(); + var P = new Vector3(); + + var i, j; + + // buffer + + var vertices = []; + var normals = []; + var uvs = []; + var indices = []; + + // create buffer data + + generateBufferData(); + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // functions + + function generateBufferData() { + + for ( i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + P = path.getPointAt( i / tubularSegments, P ); + + // retrieve corresponding normal and binormal + + var N = frames.normals[ i ]; + var B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( j = 0; j <= radialSegments; j ++ ) { + + var v = j / radialSegments * Math.PI * 2; + + var sin = Math.sin( v ); + var cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + for ( j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + +} + +TubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TubeBufferGeometry.prototype.constructor = TubeBufferGeometry; + +/** + * @author oosmoxiecode + * @author Mugen87 / https://github.com/Mugen87 + * + * based on http://www.blackpawn.com/texts/pqtorus/ + */ + +// TorusKnotGeometry + +function TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { + + Geometry.call( this ); + + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + if ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + + this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); + this.mergeVertices(); + +} + +TorusKnotGeometry.prototype = Object.create( Geometry.prototype ); +TorusKnotGeometry.prototype.constructor = TorusKnotGeometry; + +// TorusKnotBufferGeometry + +function TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) { + + BufferGeometry.call( this ); + + this.type = 'TorusKnotBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + radius = radius || 1; + tube = tube || 0.4; + tubularSegments = Math.floor( tubularSegments ) || 64; + radialSegments = Math.floor( radialSegments ) || 8; + p = p || 2; + q = q || 3; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, j; + + var vertex = new Vector3(); + var normal = new Vector3(); + + var P1 = new Vector3(); + var P2 = new Vector3(); + + var B = new Vector3(); + var T = new Vector3(); + var N = new Vector3(); + + // generate vertices, normals and uvs + + for ( i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + var u = i / tubularSegments * p * Math.PI * 2; + + // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + var v = j / radialSegments * Math.PI * 2; + var cx = - tube * Math.cos( v ); + var cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + // indices + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + var cu = Math.cos( u ); + var su = Math.sin( u ); + var quOverP = q / p * u; + var cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + +} + +TorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry; + +/** + * @author oosmoxiecode + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TorusGeometry + +function TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + Geometry.call( this ); + + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); + this.mergeVertices(); + +} + +TorusGeometry.prototype = Object.create( Geometry.prototype ); +TorusGeometry.prototype.constructor = TorusGeometry; + +// TorusBufferGeometry + +function TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + BufferGeometry.call( this ); + + this.type = 'TorusBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radius = radius || 1; + tube = tube || 0.4; + radialSegments = Math.floor( radialSegments ) || 8; + tubularSegments = Math.floor( tubularSegments ) || 6; + arc = arc || Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var center = new Vector3(); + var vertex = new Vector3(); + var normal = new Vector3(); + + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= radialSegments; j ++ ) { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + var u = i / tubularSegments * arc; + var v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= radialSegments; j ++ ) { + + for ( i = 1; i <= tubularSegments; i ++ ) { + + // indices + + var a = ( tubularSegments + 1 ) * j + i - 1; + var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; + var c = ( tubularSegments + 1 ) * ( j - 1 ) + i; + var d = ( tubularSegments + 1 ) * j + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +TorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusBufferGeometry.prototype.constructor = TorusBufferGeometry; + +/** + * @author Mugen87 / https://github.com/Mugen87 + * Port from https://github.com/mapbox/earcut (v2.1.2) + */ + +var Earcut = { + + triangulate: function ( data, holeIndices, dim ) { + + dim = dim || 2; + + var hasHoles = holeIndices && holeIndices.length, + outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length, + outerNode = linkedList( data, 0, outerLen, dim, true ), + triangles = []; + + if ( ! outerNode ) return triangles; + + var minX, minY, maxX, maxY, x, y, invSize; + + if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); + + // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox + + if ( data.length > 80 * dim ) { + + minX = maxX = data[ 0 ]; + minY = maxY = data[ 1 ]; + + for ( var i = dim; i < outerLen; i += dim ) { + + x = data[ i ]; + y = data[ i + 1 ]; + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + + } + + // minX, minY and invSize are later used to transform coords into integers for z-order calculation + + invSize = Math.max( maxX - minX, maxY - minY ); + invSize = invSize !== 0 ? 1 / invSize : 0; + + } + + earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); + + return triangles; + + } + +}; + +// create a circular doubly linked list from polygon points in the specified winding order + +function linkedList( data, start, end, dim, clockwise ) { + + var i, last; + + if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { + + for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } else { + + for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } + + if ( last && equals( last, last.next ) ) { + + removeNode( last ); + last = last.next; + + } + + return last; + +} + +// eliminate colinear or duplicate points + +function filterPoints( start, end ) { + + if ( ! start ) return start; + if ( ! end ) end = start; + + var p = start, again; + + do { + + again = false; + + if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { + + removeNode( p ); + p = end = p.prev; + if ( p === p.next ) break; + again = true; + + } else { + + p = p.next; + + } + + } while ( again || p !== end ); + + return end; + +} + +// main ear slicing loop which triangulates a polygon (given as a linked list) + +function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { + + if ( ! ear ) return; + + // interlink polygon nodes in z-order + + if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); + + var stop = ear, prev, next; + + // iterate through ears, slicing them one by one + + while ( ear.prev !== ear.next ) { + + prev = ear.prev; + next = ear.next; + + if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { + + // cut off the triangle + triangles.push( prev.i / dim ); + triangles.push( ear.i / dim ); + triangles.push( next.i / dim ); + + removeNode( ear ); + + // skipping the next vertice leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find any more ears + + if ( ear === stop ) { + + // try filtering points and slicing again + + if ( ! pass ) { + + earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); + + // if this didn't work, try curing all small self-intersections locally + + } else if ( pass === 1 ) { + + ear = cureLocalIntersections( ear, triangles, dim ); + earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); + + // as a last resort, try splitting the remaining polygon into two + + } else if ( pass === 2 ) { + + splitEarcut( ear, triangles, dim, minX, minY, invSize ); + + } + + break; + + } + + } + +} + +// check whether a polygon node forms a valid ear with adjacent nodes + +function isEar( ear ) { + + var a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + var p = ear.next.next; + + while ( p !== ear.prev ) { + + if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) { + + return false; + + } + + p = p.next; + + } + + return true; + +} + +function isEarHashed( ear, minX, minY, invSize ) { + + var a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + + var minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), + minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), + maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), + maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); + + // z-order range for the current triangle bbox; + + var minZ = zOrder( minTX, minTY, minX, minY, invSize ), + maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); + + // first look for points inside the triangle in increasing z-order + + var p = ear.nextZ; + + while ( p && p.z <= maxZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.nextZ; + + } + + // then look for points in decreasing z-order + + p = ear.prevZ; + + while ( p && p.z >= minZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + + p = p.prevZ; + + } + + return true; + +} + +// go through all polygon nodes and cure small local self-intersections + +function cureLocalIntersections( start, triangles, dim ) { + + var p = start; + + do { + + var a = p.prev, b = p.next.next; + + if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { + + triangles.push( a.i / dim ); + triangles.push( p.i / dim ); + triangles.push( b.i / dim ); + + // remove two nodes involved + + removeNode( p ); + removeNode( p.next ); + + p = start = b; + + } + + p = p.next; + + } while ( p !== start ); + + return p; + +} + +// try splitting polygon into two and triangulate them independently + +function splitEarcut( start, triangles, dim, minX, minY, invSize ) { + + // look for a valid diagonal that divides the polygon into two + + var a = start; + + do { + + var b = a.next.next; + + while ( b !== a.prev ) { + + if ( a.i !== b.i && isValidDiagonal( a, b ) ) { + + // split the polygon in two by the diagonal + + var c = splitPolygon( a, b ); + + // filter colinear points around the cuts + + a = filterPoints( a, a.next ); + c = filterPoints( c, c.next ); + + // run earcut on each half + + earcutLinked( a, triangles, dim, minX, minY, invSize ); + earcutLinked( c, triangles, dim, minX, minY, invSize ); + return; + + } + + b = b.next; + + } + + a = a.next; + + } while ( a !== start ); + +} + +// link every hole into the outer loop, producing a single-ring polygon without holes + +function eliminateHoles( data, holeIndices, outerNode, dim ) { + + var queue = [], i, len, start, end, list; + + for ( i = 0, len = holeIndices.length; i < len; i ++ ) { + + start = holeIndices[ i ] * dim; + end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; + list = linkedList( data, start, end, dim, false ); + if ( list === list.next ) list.steiner = true; + queue.push( getLeftmost( list ) ); + + } + + queue.sort( compareX ); + + // process holes from left to right + + for ( i = 0; i < queue.length; i ++ ) { + + eliminateHole( queue[ i ], outerNode ); + outerNode = filterPoints( outerNode, outerNode.next ); + + } + + return outerNode; + +} + +function compareX( a, b ) { + + return a.x - b.x; + +} + +// find a bridge between vertices that connects hole with an outer ring and and link it + +function eliminateHole( hole, outerNode ) { + + outerNode = findHoleBridge( hole, outerNode ); + + if ( outerNode ) { + + var b = splitPolygon( outerNode, hole ); + + filterPoints( b, b.next ); + + } + +} + +// David Eberly's algorithm for finding a bridge between hole and outer polygon + +function findHoleBridge( hole, outerNode ) { + + var p = outerNode, + hx = hole.x, + hy = hole.y, + qx = - Infinity, + m; + + // find a segment intersected by a ray from the hole's leftmost point to the left; + // segment's endpoint with lesser x will be potential connection point + + do { + + if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { + + var x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); + + if ( x <= hx && x > qx ) { + + qx = x; + + if ( x === hx ) { + + if ( hy === p.y ) return p; + if ( hy === p.next.y ) return p.next; + + } + + m = p.x < p.next.x ? p : p.next; + + } + + } + + p = p.next; + + } while ( p !== outerNode ); + + if ( ! m ) return null; + + if ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint + + // look for points inside the triangle of hole point, segment intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as connection point + + var stop = m, + mx = m.x, + my = m.y, + tanMin = Infinity, + tan; + + p = m.next; + + while ( p !== stop ) { + + if ( hx >= p.x && p.x >= mx && hx !== p.x && + pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { + + tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential + + if ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) { + + m = p; + tanMin = tan; + + } + + } + + p = p.next; + + } + + return m; + +} + +// interlink polygon nodes in z-order + +function indexCurve( start, minX, minY, invSize ) { + + var p = start; + + do { + + if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + + } while ( p !== start ); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked( p ); + +} + +// Simon Tatham's linked list merge sort algorithm +// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html + +function sortLinked( list ) { + + var i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; + + do { + + p = list; + list = null; + tail = null; + numMerges = 0; + + while ( p ) { + + numMerges ++; + q = p; + pSize = 0; + + for ( i = 0; i < inSize; i ++ ) { + + pSize ++; + q = q.nextZ; + if ( ! q ) break; + + } + + qSize = inSize; + + while ( pSize > 0 || ( qSize > 0 && q ) ) { + + if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { + + e = p; + p = p.nextZ; + pSize --; + + } else { + + e = q; + q = q.nextZ; + qSize --; + + } + + if ( tail ) tail.nextZ = e; + else list = e; + + e.prevZ = tail; + tail = e; + + } + + p = q; + + } + + tail.nextZ = null; + inSize *= 2; + + } while ( numMerges > 1 ); + + return list; + +} + +// z-order of a point given coords and inverse of the longer side of data bbox + +function zOrder( x, y, minX, minY, invSize ) { + + // coords are transformed into non-negative 15-bit integer range + + x = 32767 * ( x - minX ) * invSize; + y = 32767 * ( y - minY ) * invSize; + + x = ( x | ( x << 8 ) ) & 0x00FF00FF; + x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; + x = ( x | ( x << 2 ) ) & 0x33333333; + x = ( x | ( x << 1 ) ) & 0x55555555; + + y = ( y | ( y << 8 ) ) & 0x00FF00FF; + y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; + y = ( y | ( y << 2 ) ) & 0x33333333; + y = ( y | ( y << 1 ) ) & 0x55555555; + + return x | ( y << 1 ); + +} + +// find the leftmost node of a polygon ring + +function getLeftmost( start ) { + + var p = start, leftmost = start; + + do { + + if ( p.x < leftmost.x ) leftmost = p; + p = p.next; + + } while ( p !== start ); + + return leftmost; + +} + +// check if a point lies within a convex triangle + +function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { + + return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && + ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && + ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; + +} + +// check if a diagonal between two polygon nodes is valid (lies in polygon interior) + +function isValidDiagonal( a, b ) { + + return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && + locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ); + +} + +// signed area of a triangle + +function area( p, q, r ) { + + return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); + +} + +// check if two points are equal + +function equals( p1, p2 ) { + + return p1.x === p2.x && p1.y === p2.y; + +} + +// check if two segments intersect + +function intersects( p1, q1, p2, q2 ) { + + if ( ( equals( p1, q1 ) && equals( p2, q2 ) ) || + ( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true; + + return area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 && + area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0; + +} + +// check if a polygon diagonal intersects any polygon segments + +function intersectsPolygon( a, b ) { + + var p = a; + + do { + + if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && + intersects( p, p.next, a, b ) ) { + + return true; + + } + + p = p.next; + + } while ( p !== a ); + + return false; + +} + +// check if a polygon diagonal is locally inside the polygon + +function locallyInside( a, b ) { + + return area( a.prev, a, a.next ) < 0 ? + area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : + area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; + +} + +// check if the middle point of a polygon diagonal is inside the polygon + +function middleInside( a, b ) { + + var p = a, + inside = false, + px = ( a.x + b.x ) / 2, + py = ( a.y + b.y ) / 2; + + do { + + if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && + ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) { + + inside = ! inside; + + } + + p = p.next; + + } while ( p !== a ); + + return inside; + +} + +// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; +// if one belongs to the outer ring and another to a hole, it merges it into a single ring + +function splitPolygon( a, b ) { + + var a2 = new Node( a.i, a.x, a.y ), + b2 = new Node( b.i, b.x, b.y ), + an = a.next, + bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + +} + +// create a node and optionally link it with previous one (in a circular doubly linked list) + +function insertNode( i, x, y, last ) { + + var p = new Node( i, x, y ); + + if ( ! last ) { + + p.prev = p; + p.next = p; + + } else { + + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + + } + + return p; + +} + +function removeNode( p ) { + + p.next.prev = p.prev; + p.prev.next = p.next; + + if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; + if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; + +} + +function Node( i, x, y ) { + + // vertice index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertice nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = null; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + +} + +function signedArea( data, start, end, dim ) { + + var sum = 0; + + for ( var i = start, j = end - dim; i < end; i += dim ) { + + sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); + j = i; + + } + + return sum; + +} + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +var ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + var n = contour.length; + var a = 0.0; + + for ( var p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + }, + + triangulateShape: function ( contour, holes ) { + + function removeDupEndPts( points ) { + + var l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + function addContour( vertices, contour ) { + + for ( var i = 0; i < contour.length; i ++ ) { + + vertices.push( contour[ i ].x ); + vertices.push( contour[ i ].y ); + + } + + } + + var vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] + var holeIndices = []; // array of hole indices + var faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] + + removeDupEndPts( contour ); + addContour( vertices, contour ); + + // + + var holeIndex = contour.length; + holes.forEach( removeDupEndPts ); + + for ( i = 0; i < holes.length; i ++ ) { + + holeIndices.push( holeIndex ); + holeIndex += holes[ i ].length; + addContour( vertices, holes[ i ] ); + + } + + // + + var triangles = Earcut.triangulate( vertices, holeIndices ); + + // + + for ( var i = 0; i < triangles.length; i += 3 ) { + + faces.push( triangles.slice( i, i + 3 ) ); + + } + + return faces; + + } + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * amount: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline is bevel + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * frames: // containing arrays of tangents, normals, binormals + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + +// ExtrudeGeometry + +function ExtrudeGeometry( shapes, options ) { + + Geometry.call( this ); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + +} + +ExtrudeGeometry.prototype = Object.create( Geometry.prototype ); +ExtrudeGeometry.prototype.constructor = ExtrudeGeometry; + +// ExtrudeBufferGeometry + +function ExtrudeBufferGeometry( shapes, options ) { + + if ( typeof ( shapes ) === "undefined" ) { + + return; + + } + + BufferGeometry.call( this ); + + this.type = 'ExtrudeBufferGeometry'; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + this.addShapeList( shapes, options ); + + this.computeVertexNormals(); + + // can't really use automatic vertex normals + // as then front and back sides get smoothed too + // should do separate smoothing just for sides + + //this.computeVertexNormals(); + + //console.log( "took", ( Date.now() - startTime ) ); + +} + +ExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry; + +ExtrudeBufferGeometry.prototype.getArrays = function () { + + var positionAttribute = this.getAttribute( "position" ); + var verticesArray = positionAttribute ? Array.prototype.slice.call( positionAttribute.array ) : []; + + var uvAttribute = this.getAttribute( "uv" ); + var uvArray = uvAttribute ? Array.prototype.slice.call( uvAttribute.array ) : []; + + var IndexAttribute = this.index; + var indicesArray = IndexAttribute ? Array.prototype.slice.call( IndexAttribute.array ) : []; + + return { + position: verticesArray, + uv: uvArray, + index: indicesArray + }; + +}; + +ExtrudeBufferGeometry.prototype.addShapeList = function ( shapes, options ) { + + var sl = shapes.length; + options.arrays = this.getArrays(); + + for ( var s = 0; s < sl; s ++ ) { + + var shape = shapes[ s ]; + this.addShape( shape, options ); + + } + + this.setIndex( options.arrays.index ); + this.addAttribute( 'position', new Float32BufferAttribute( options.arrays.position, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) ); + +}; + +ExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) { + + var arrays = options.arrays ? options.arrays : this.getArrays(); + var verticesArray = arrays.position; + var indicesArray = arrays.index; + var uvArray = arrays.uv; + + var placeholder = []; + + + var amount = options.amount !== undefined ? options.amount : 100; + + var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10 + var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8 + var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false + + var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + + var steps = options.steps !== undefined ? options.steps : 1; + + var extrudePath = options.extrudePath; + var extrudePts, extrudeByPath = false; + + // Use default WorldUVGenerator if no UV generators are specified. + var uvgen = options.UVGenerator !== undefined ? options.UVGenerator : ExtrudeGeometry.WorldUVGenerator; + + var splineTube, binormal, normal, position2; + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = options.frames !== undefined ? options.frames : extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + + } + + // Variables initialization + + var ahole, h, hl; // looping of holes + var scope = this; + + var shapePoints = shape.extractPoints( curveSegments ); + + var vertices = shapePoints.shape; + var holes = shapePoints.holes; + + var reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + var faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + var contour = vertices; // vertices has all points but contour has only points of circumference + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + var b, bs, t, z, + vert, vlen = vertices.length, + face, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + var v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + var v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + var v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + var collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + var v_prev_len = Math.sqrt( v_prev_lensq ); + var v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + var ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + var ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + var ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + var ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + var sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + var v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + var direction_eq = false; // assumes: opposite + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + var contourMovements = []; + + for ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + var holesMovements = [], + oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + bs = bevelSize; + + // Back facing vertices + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + var s; + + for ( s = 1; s <= steps; s ++ ) { + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( b = bevelSegments - 1; b >= 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, amount + z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + var start = verticesArray.length / 3; + + if ( bevelEnabled ) { + + var layer = 0; // steps + 1 + var offset = vlen * layer; + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length / 3 - start, options.material !== undefined ? options.material : 0 ); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + var start = verticesArray.length / 3; + var layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length / 3 - start, options.extrudeMaterial !== undefined ? options.extrudeMaterial : 1 ); + + + } + + function sidewalls( contour, layeroffset ) { + + var j, k; + i = contour.length; + + while ( -- i >= 0 ) { + + j = i; + k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + var s = 0, + sl = steps + bevelSegments * 2; + + for ( s = 0; s < sl; s ++ ) { + + var slen1 = vlen * s; + var slen2 = vlen * ( s + 1 ); + + var a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + indicesArray.push( verticesArray.length / 3 ); + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + if ( ! options.arrays ) { + + this.setIndex( indicesArray ); + this.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); + + } + +}; + +ExtrudeGeometry.WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var a_z = vertices[ indexA * 3 + 2 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var b_z = vertices[ indexB * 3 + 2 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + var c_z = vertices[ indexC * 3 + 2 ]; + var d_x = vertices[ indexD * 3 ]; + var d_y = vertices[ indexD * 3 + 1 ]; + var d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author alteredq / http://alteredqualia.com/ + * + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: // how far from text outline is bevel + * } + */ + +// TextGeometry + +function TextGeometry( text, parameters ) { + + Geometry.call( this ); + + this.type = 'TextGeometry'; + + this.parameters = { + text: text, + parameters: parameters + }; + + this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); + this.mergeVertices(); + +} + +TextGeometry.prototype = Object.create( Geometry.prototype ); +TextGeometry.prototype.constructor = TextGeometry; + +// TextBufferGeometry + +function TextBufferGeometry( text, parameters ) { + + parameters = parameters || {}; + + var font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new Geometry(); + + } + + var shapes = font.generateShapes( text, parameters.size, parameters.curveSegments ); + + // translate parameters to ExtrudeGeometry API + + parameters.amount = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; + if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; + if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; + + ExtrudeBufferGeometry.call( this, shapes, parameters ); + + this.type = 'TextBufferGeometry'; + +} + +TextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype ); +TextBufferGeometry.prototype.constructor = TextBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + */ + +// SphereGeometry + +function SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +SphereGeometry.prototype = Object.create( Geometry.prototype ); +SphereGeometry.prototype.constructor = SphereGeometry; + +// SphereBufferGeometry + +function SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 1; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 ); + + phiStart = phiStart !== undefined ? phiStart : 0; + phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; + + var thetaEnd = thetaStart + thetaLength; + + var ix, iy; + + var index = 0; + var grid = []; + + var vertex = new Vector3(); + var normal = new Vector3(); + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy <= heightSegments; iy ++ ) { + + var verticesRow = []; + + var v = iy / heightSegments; + + for ( ix = 0; ix <= widthSegments; ix ++ ) { + + var u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( vertex.x, vertex.y, vertex.z ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( iy = 0; iy < heightSegments; iy ++ ) { + + for ( ix = 0; ix < widthSegments; ix ++ ) { + + var a = grid[ iy ][ ix + 1 ]; + var b = grid[ iy ][ ix ]; + var c = grid[ iy + 1 ][ ix ]; + var d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +SphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +SphereBufferGeometry.prototype.constructor = SphereBufferGeometry; + +/** + * @author Kaleb Murphy + * @author Mugen87 / https://github.com/Mugen87 + */ + +// RingGeometry + +function RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +RingGeometry.prototype = Object.create( Geometry.prototype ); +RingGeometry.prototype.constructor = RingGeometry; + +// RingBufferGeometry + +function RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'RingBufferGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + innerRadius = innerRadius || 0.5; + outerRadius = outerRadius || 1; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + thetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8; + phiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // some helper variables + + var segment; + var radius = innerRadius; + var radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + var vertex = new Vector3(); + var uv = new Vector2(); + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= phiSegments; j ++ ) { + + for ( i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( j = 0; j < phiSegments; j ++ ) { + + var thetaSegmentLevel = j * ( thetaSegments + 1 ); + + for ( i = 0; i < thetaSegments; i ++ ) { + + segment = i + thetaSegmentLevel; + + var a = segment; + var b = segment + thetaSegments + 1; + var c = segment + thetaSegments + 2; + var d = segment + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +RingBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +RingBufferGeometry.prototype.constructor = RingBufferGeometry; + +/** + * @author astrodud / http://astrodud.isgreat.org/ + * @author zz85 / https://github.com/zz85 + * @author bhouston / http://clara.io + * @author Mugen87 / https://github.com/Mugen87 + */ + +// LatheGeometry + +function LatheGeometry( points, segments, phiStart, phiLength ) { + + Geometry.call( this ); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); + this.mergeVertices(); + +} + +LatheGeometry.prototype = Object.create( Geometry.prototype ); +LatheGeometry.prototype.constructor = LatheGeometry; + +// LatheBufferGeometry + +function LatheBufferGeometry( points, segments, phiStart, phiLength ) { + + BufferGeometry.call( this ); + + this.type = 'LatheBufferGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ) || 12; + phiStart = phiStart || 0; + phiLength = phiLength || Math.PI * 2; + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = _Math.clamp( phiLength, 0, Math.PI * 2 ); + + + // buffers + + var indices = []; + var vertices = []; + var uvs = []; + + // helper variables + + var base; + var inverseSegments = 1.0 / segments; + var vertex = new Vector3(); + var uv = new Vector2(); + var i, j; + + // generate vertices and uvs + + for ( i = 0; i <= segments; i ++ ) { + + var phi = phiStart + i * inverseSegments * phiLength; + + var sin = Math.sin( phi ); + var cos = Math.cos( phi ); + + for ( j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( i = 0; i < segments; i ++ ) { + + for ( j = 0; j < ( points.length - 1 ); j ++ ) { + + base = j + i * points.length; + + var a = base; + var b = base + points.length; + var c = base + points.length + 1; + var d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + var normals = this.attributes.normal.array; + var n1 = new Vector3(); + var n2 = new Vector3(); + var n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + base = segments * points.length * 3; + + for ( i = 0, j = 0; i < points.length; i ++, j += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j + 0 ]; + n1.y = normals[ j + 1 ]; + n1.z = normals[ j + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base + j + 0 ]; + n2.y = normals[ base + j + 1 ]; + n2.z = normals[ base + j + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; + normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; + normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; + + } + + } + +} + +LatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +LatheBufferGeometry.prototype.constructor = LatheBufferGeometry; + +/** + * @author jonobr1 / http://jonobr1.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// ShapeGeometry + +function ShapeGeometry( shapes, curveSegments ) { + + Geometry.call( this ); + + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + +} + +ShapeGeometry.prototype = Object.create( Geometry.prototype ); +ShapeGeometry.prototype.constructor = ShapeGeometry; + +ShapeGeometry.prototype.toJSON = function () { + + var data = Geometry.prototype.toJSON.call( this ); + + var shapes = this.parameters.shapes; + + return toJSON( shapes, data ); + +}; + +// ShapeBufferGeometry + +function ShapeBufferGeometry( shapes, curveSegments ) { + + BufferGeometry.call( this ); + + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + curveSegments = curveSegments || 12; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var groupStart = 0; + var groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( var i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + + // helper functions + + function addShape( shape ) { + + var i, l, shapeHole; + + var indexOffset = vertices.length / 3; + var points = shape.extractPoints( curveSegments ); + + var shapeVertices = points.shape; + var shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + // also check if holes are in the opposite direction + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + } + + var faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( i = 0, l = shapeVertices.length; i < l; i ++ ) { + + var vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var a = face[ 0 ] + indexOffset; + var b = face[ 1 ] + indexOffset; + var c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + +} + +ShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry; + +ShapeBufferGeometry.prototype.toJSON = function () { + + var data = BufferGeometry.prototype.toJSON.call( this ); + + var shapes = this.parameters.shapes; + + return toJSON( shapes, data ); + +}; + +// + +function toJSON( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + +} + +/** + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +function EdgesGeometry( geometry, thresholdAngle ) { + + BufferGeometry.call( this ); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + // buffer + + var vertices = []; + + // helper variables + + var thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle ); + var edge = [ 0, 0 ], edges = {}, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + + // prepare source geometry + + var geometry2; + + if ( geometry.isBufferGeometry ) { + + geometry2 = new Geometry(); + geometry2.fromBufferGeometry( geometry ); + + } else { + + geometry2 = geometry.clone(); + + } + + geometry2.mergeVertices(); + geometry2.computeFaceNormals(); + + var sourceVertices = geometry2.vertices; + var faces = geometry2.faces; + + // now create a data structure where each entry represents an edge with its adjoining faces + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined }; + + } else { + + edges[ key ].face2 = i; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + var e = edges[ key ]; + + // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree. + + if ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) { + + var vertex = sourceVertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = sourceVertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +EdgesGeometry.prototype = Object.create( BufferGeometry.prototype ); +EdgesGeometry.prototype.constructor = EdgesGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// CylinderGeometry + +function CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CylinderGeometry.prototype = Object.create( Geometry.prototype ); +CylinderGeometry.prototype.constructor = CylinderGeometry; + +// CylinderBufferGeometry + +function CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + var scope = this; + + radiusTop = radiusTop !== undefined ? radiusTop : 1; + radiusBottom = radiusBottom !== undefined ? radiusBottom : 1; + height = height || 1; + + radialSegments = Math.floor( radialSegments ) || 8; + heightSegments = Math.floor( heightSegments ) || 1; + + openEnded = openEnded !== undefined ? openEnded : false; + thetaStart = thetaStart !== undefined ? thetaStart : 0.0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var index = 0; + var indexArray = []; + var halfHeight = height / 2; + var groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function generateTorso() { + + var x, y; + var normal = new Vector3(); + var vertex = new Vector3(); + + var groupCount = 0; + + // this will be used to calculate the normal + var slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( y = 0; y <= heightSegments; y ++ ) { + + var indexRow = []; + + var v = y / heightSegments; + + // calculate the radius of the current row + + var radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + + var theta = u * thetaLength + thetaStart; + + var sinTheta = Math.sin( theta ); + var cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + for ( y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + var a = indexArray[ y ][ x ]; + var b = indexArray[ y + 1 ][ x ]; + var c = indexArray[ y + 1 ][ x + 1 ]; + var d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + var x, centerIndexStart, centerIndexEnd; + + var uv = new Vector2(); + var vertex = new Vector3(); + + var groupCount = 0; + + var radius = ( top === true ) ? radiusTop : radiusBottom; + var sign = ( top === true ) ? 1 : - 1; + + // save the index of the first center vertex + centerIndexStart = index; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + + centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + var theta = u * thetaLength + thetaStart; + + var cosTheta = Math.cos( theta ); + var sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + var c = centerIndexStart + x; + var i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + +} + +CylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry; + +/** + * @author abelnation / http://github.com/abelnation + */ + +// ConeGeometry + +function ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeGeometry.prototype = Object.create( CylinderGeometry.prototype ); +ConeGeometry.prototype.constructor = ConeGeometry; + +// ConeBufferGeometry + +function ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype ); +ConeBufferGeometry.prototype.constructor = ConeBufferGeometry; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + * @author hughes + */ + +// CircleGeometry + +function CircleGeometry( radius, segments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CircleGeometry.prototype = Object.create( Geometry.prototype ); +CircleGeometry.prototype.constructor = CircleGeometry; + +// CircleBufferGeometry + +function CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CircleBufferGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 1; + segments = segments !== undefined ? Math.max( 3, segments ) : 8; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, s; + var vertex = new Vector3(); + var uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + var segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( i = 1; i <= segments; i ++ ) { + + indices.push( i, i + 1, 0 ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +CircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CircleBufferGeometry.prototype.constructor = CircleBufferGeometry; + + + +var Geometries = Object.freeze({ + WireframeGeometry: WireframeGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + EdgesGeometry: EdgesGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry +}); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * parameters = { + * color: , + * opacity: + * } + */ + +function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.opacity = 1.0; + + this.lights = true; + this.transparent = true; + + this.setValues( parameters ); + +} + +ShadowMaterial.prototype = Object.create( Material.prototype ); +ShadowMaterial.prototype.constructor = ShadowMaterial; + +ShadowMaterial.prototype.isShadowMaterial = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + +} + +RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); +RawShaderMaterial.prototype.constructor = RawShaderMaterial; + +RawShaderMaterial.prototype.isRawShaderMaterial = true; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 0.5; + this.metalness = 0.5; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshStandardMaterial.prototype = Object.create( Material.prototype ); +MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + +MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + +MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * reflectivity: + * } + */ + +function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { 'PHYSICAL': '' }; + + this.type = 'MeshPhysicalMaterial'; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + this.clearCoat = 0.0; + this.clearCoatRoughness = 0.0; + + this.setValues( parameters ); + +} + +MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); +MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + +MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + +MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { 'PHYSICAL': '' }; + + this.reflectivity = source.reflectivity; + + this.clearCoat = source.clearCoat; + this.clearCoatRoughness = source.clearCoatRoughness; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshPhongMaterial.prototype = Object.create( Material.prototype ); +MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + +MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + +MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author takahirox / http://github.com/takahirox + * + * parameters = { + * gradientMap: new THREE.Texture( ) + * } + */ + +function MeshToonMaterial( parameters ) { + + MeshPhongMaterial.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.gradientMap = null; + + this.setValues( parameters ); + +} + +MeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype ); +MeshToonMaterial.prototype.constructor = MeshToonMaterial; + +MeshToonMaterial.prototype.isMeshToonMaterial = true; + +MeshToonMaterial.prototype.copy = function ( source ) { + + MeshPhongMaterial.prototype.copy.call( this, source ); + + this.gradientMap = source.gradientMap; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshNormalMaterial.prototype = Object.create( Material.prototype ); +MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + +MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + +MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshLambertMaterial.prototype = Object.create( Material.prototype ); +MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + +MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + +MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + +function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + +} + +LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); +LineDashedMaterial.prototype.constructor = LineDashedMaterial; + +LineDashedMaterial.prototype.isLineDashedMaterial = true; + +LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + +}; + + + +var Materials = Object.freeze({ + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material +}); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LoadingManager( onLoad, onProgress, onError ) { + + var scope = this; + + var isLoading = false; + var itemsLoaded = 0; + var itemsTotal = 0; + var urlModifier = undefined; + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + + this.resolveURL = function ( url ) { + + if ( urlModifier ) { + + return urlModifier( url ); + + } + + return url; + + }; + + this.setURLModifier = function ( transform ) { + + urlModifier = transform; + return this; + + }; + +} + +var DefaultLoadingManager = new LoadingManager(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var loading = {}; + +function FileLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FileLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check if request is duplicate + + if ( loading[ url ] !== undefined ) { + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + return; + + } + + // Check for data: URI + var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + var dataUriRegexResult = url.match( dataUriRegex ); + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + var mimeType = dataUriRegexResult[ 1 ]; + var isBase64 = !! dataUriRegexResult[ 2 ]; + var data = dataUriRegexResult[ 3 ]; + + data = window.decodeURIComponent( data ); + + if ( isBase64 ) data = window.atob( data ); + + try { + + var response; + var responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + var view = new Uint8Array( data.length ); + + for ( var i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ view.buffer ], { type: mimeType } ); + + } else { + + response = view.buffer; + + } + + break; + + case 'document': + + var parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + window.setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + window.setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, 0 ); + + } + + } else { + + // Initialise array for duplicate requests + + loading[ url ] = []; + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + var request = new XMLHttpRequest(); + + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + var response = this.response; + + Cache.add( url, response ); + + var callbacks = loading[ url ]; + + delete loading[ url ]; + + if ( this.status === 200 ) { + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onLoad ) callback.onLoad( response ); + + } + + scope.manager.itemEnd( url ); + + } else if ( this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onLoad ) callback.onLoad( response ); + + } + + scope.manager.itemEnd( url ); + + } else { + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } + + }, false ); + + request.addEventListener( 'progress', function ( event ) { + + var callbacks = loading[ url ]; + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onProgress ) callback.onProgress( event ); + + } + + }, false ); + + request.addEventListener( 'error', function ( event ) { + + var callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( var header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + }, + + setRequestHeader: function ( value ) { + + this.requestHeader = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * Abstract Base class to block based textures loader (dds, pvr, ...) + */ + +function CompressedTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( CompressedTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var images = []; + + var texture = new CompressedTexture(); + texture.image = images; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) + texture.minFilter = LinearFilter; + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + var loaded = 0; + + for ( var i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + if ( texDatas.isCubemap ) { + + var faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( var f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps: [] }; + + for ( var i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author Nikos M. / https://github.com/foo123/ + * + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + */ + +function DataTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( DataTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texture = new DataTexture(); + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( buffer ) { + + var texData = scope._parser( buffer ); + + if ( ! texData ) return; + + if ( undefined !== texData.image ) { + + texture.image = texData.image; + + } else if ( undefined !== texData.data ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter; + texture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter; + + texture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1; + + if ( undefined !== texData.format ) { + + texture.format = texData.format; + + } + if ( undefined !== texData.type ) { + + texture.type = texData.type; + + } + + if ( undefined !== texData.mipmaps ) { + + texture.mipmaps = texData.mipmaps; + + } + + if ( 1 === texData.mipmapCount ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ImageLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( ImageLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + image.addEventListener( 'load', function () { + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + }, false ); + + /* + image.addEventListener( 'progress', function ( event ) { + + if ( onProgress ) onProgress( event ); + + }, false ); + */ + + image.addEventListener( 'error', function ( event ) { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( CubeTextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( urls, onLoad, onProgress, onError ) { + + var texture = new CubeTexture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( var i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function TextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( TextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + var texture = new Texture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + loader.load( url, function ( image ) { + + texture.image = image; + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + var isJPEG = url.search( /\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Extensible curve object + * + * Some common of curve methods: + * .getPoint( t, optionalTarget ), .getTangent( t ) + * .getPointAt( u, optionalTarget ), .getTangentAt( u ) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + +/************************************************************** + * Abstract Curve base class + **************************************************************/ + +function Curve() { + + this.type = 'Curve'; + + this.arcLengthDivisions = 200; + +} + +Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function ( /* t, optionalTarget */ ) { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u, optionalTarget ) { + + var t = this.getUtoTmapping( u ); + return this.getPoint( t, optionalTarget ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + var lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) divisions = this.arcLengthDivisions; + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + var cache = []; + var current, last = this.getPoint( 0 ); + var p, sum = 0; + + cache.push( 0 ); + + for ( p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + var arcLengths = this.getLengths(); + + var i = 0, il = arcLengths.length; + + var targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + var low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + var lengthBefore = arcLengths[ i ]; + var lengthAfter = arcLengths[ i + 1 ]; + + var segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + var t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t ) { + + var delta = 0.0001; + var t1 = t - delta; + var t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + var pt1 = this.getPoint( t1 ); + var pt2 = this.getPoint( t2 ); + + var vec = pt2.clone().sub( pt1 ); + return vec.normalize(); + + }, + + getTangentAt: function ( u ) { + + var t = this.getUtoTmapping( u ); + return this.getTangent( t ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + var normal = new Vector3(); + + var tangents = []; + var normals = []; + var binormals = []; + + var vec = new Vector3(); + var mat = new Matrix4(); + + var i, u, theta; + + // compute the tangent vectors for each segment on the curve + + for ( i = 0; i <= segments; i ++ ) { + + u = i / segments; + + tangents[ i ] = this.getTangentAt( u ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + var min = Number.MAX_VALUE; + var tx = Math.abs( tangents[ 0 ].x ); + var ty = Math.abs( tangents[ 0 ].y ); + var tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + theta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + theta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.arcLengthDivisions = source.arcLengthDivisions; + + return this; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Curve', + generator: 'Curve.toJSON' + } + }; + + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + + return data; + + }, + + fromJSON: function ( json ) { + + this.arcLengthDivisions = json.arcLengthDivisions; + + return this; + + } + +} ); + +function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.type = 'EllipseCurve'; + + this.aX = aX || 0; + this.aY = aY || 0; + + this.xRadius = xRadius || 1; + this.yRadius = yRadius || 1; + + this.aStartAngle = aStartAngle || 0; + this.aEndAngle = aEndAngle || 2 * Math.PI; + + this.aClockwise = aClockwise || false; + + this.aRotation = aRotation || 0; + +} + +EllipseCurve.prototype = Object.create( Curve.prototype ); +EllipseCurve.prototype.constructor = EllipseCurve; + +EllipseCurve.prototype.isEllipseCurve = true; + +EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var twoPi = Math.PI * 2; + var deltaAngle = this.aEndAngle - this.aStartAngle; + var samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + var angle = this.aStartAngle + t * deltaAngle; + var x = this.aX + this.xRadius * Math.cos( angle ); + var y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + var cos = Math.cos( this.aRotation ); + var sin = Math.sin( this.aRotation ); + + var tx = x - this.aX; + var ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return point.set( x, y ); + +}; + +EllipseCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.aX = source.aX; + this.aY = source.aY; + + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + + this.aClockwise = source.aClockwise; + + this.aRotation = source.aRotation; + + return this; + +}; + + +EllipseCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.aX = this.aX; + data.aY = this.aY; + + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + + data.aClockwise = this.aClockwise; + + data.aRotation = this.aRotation; + + return data; + +}; + +EllipseCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.aX = json.aX; + this.aY = json.aY; + + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + + this.aClockwise = json.aClockwise; + + this.aRotation = json.aRotation; + + return this; + +}; + +function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + this.type = 'ArcCurve'; + +} + +ArcCurve.prototype = Object.create( EllipseCurve.prototype ); +ArcCurve.prototype.constructor = ArcCurve; + +ArcCurve.prototype.isArcCurve = true; + +/** + * @author zz85 https://github.com/zz85 + * + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + +/* +Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + +This CubicPoly class could be used for reusing some variables and calculations, +but for three.js curve use, it could be possible inlined and flatten into a single function call +which can be placed in CurveUtils. +*/ + +function CubicPoly() { + + var c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + var t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + var t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + var t2 = t * t; + var t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + +} + +// + +var tmp = new Vector3(); +var px = new CubicPoly(); +var py = new CubicPoly(); +var pz = new CubicPoly(); + +function CatmullRomCurve3( points, closed, curveType, tension ) { + + Curve.call( this ); + + this.type = 'CatmullRomCurve3'; + + this.points = points || []; + this.closed = closed || false; + this.curveType = curveType || 'centripetal'; + this.tension = tension || 0.5; + +} + +CatmullRomCurve3.prototype = Object.create( Curve.prototype ); +CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + +CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; + +CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var points = this.points; + var l = points.length; + + var p = ( l - ( this.closed ? 0 : 1 ) ) * t; + var intPoint = Math.floor( p ); + var weight = p - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + var p0, p1, p2, p3; // 4 points + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + p1 = points[ intPoint % l ]; + p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + var pow = this.curveType === 'chordal' ? 0.5 : 0.25; + var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.curveType === 'catmullrom' ) { + + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); + + } + + point.set( + px.calc( weight ), + py.calc( weight ), + pz.calc( weight ) + ); + + return point; + +}; + +CatmullRomCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( var i = 0, l = source.points.length; i < l; i ++ ) { + + var point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + + return this; + +}; + +CatmullRomCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( var i = 0, l = this.points.length; i < l; i ++ ) { + + var point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + + return data; + +}; + +CatmullRomCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( var i = 0, l = json.points.length; i < l; i ++ ) { + + var point = json.points[ i ]; + this.points.push( new Vector3().fromArray( point ) ); + + } + + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + + return this; + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + +function CatmullRom( t, p0, p1, p2, p3 ) { + + var v0 = ( p2 - p0 ) * 0.5; + var v1 = ( p3 - p1 ) * 0.5; + var t2 = t * t; + var t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + +} + +// + +function QuadraticBezierP0( t, p ) { + + var k = 1 - t; + return k * k * p; + +} + +function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + +} + +function QuadraticBezierP2( t, p ) { + + return t * t * p; + +} + +function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + +} + +// + +function CubicBezierP0( t, p ) { + + var k = 1 - t; + return k * k * k * p; + +} + +function CubicBezierP1( t, p ) { + + var k = 1 - t; + return 3 * k * k * t * p; + +} + +function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + +} + +function CubicBezierP3( t, p ) { + + return t * t * t * p; + +} + +function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + +} + +function CubicBezierCurve( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve'; + + this.v0 = v0 || new Vector2(); + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + this.v3 = v3 || new Vector2(); + +} + +CubicBezierCurve.prototype = Object.create( Curve.prototype ); +CubicBezierCurve.prototype.constructor = CubicBezierCurve; + +CubicBezierCurve.prototype.isCubicBezierCurve = true; + +CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + + return point; + +}; + +CubicBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + +}; + +CubicBezierCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + +}; + +CubicBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + +}; + +function CubicBezierCurve3( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve3'; + + this.v0 = v0 || new Vector3(); + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + this.v3 = v3 || new Vector3(); + +} + +CubicBezierCurve3.prototype = Object.create( Curve.prototype ); +CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + +CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; + +CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + + return point; + +}; + +CubicBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + +}; + +CubicBezierCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + +}; + +CubicBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + +}; + +function LineCurve( v1, v2 ) { + + Curve.call( this ); + + this.type = 'LineCurve'; + + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + +} + +LineCurve.prototype = Object.create( Curve.prototype ); +LineCurve.prototype.constructor = LineCurve; + +LineCurve.prototype.isLineCurve = true; + +LineCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + +}; + +// Line curve is linear, so we can overwrite default getPointAt + +LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + +}; + +LineCurve.prototype.getTangent = function ( /* t */ ) { + + var tangent = this.v2.clone().sub( this.v1 ); + + return tangent.normalize(); + +}; + +LineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + +}; + +LineCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + +}; + +LineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + +}; + +function LineCurve3( v1, v2 ) { + + Curve.call( this ); + + this.type = 'LineCurve3'; + + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + +} + +LineCurve3.prototype = Object.create( Curve.prototype ); +LineCurve3.prototype.constructor = LineCurve3; + +LineCurve3.prototype.isLineCurve3 = true; + +LineCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + +}; + +// Line curve is linear, so we can overwrite default getPointAt + +LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + +}; + +LineCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + +}; + +LineCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + +}; + +LineCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + +}; + +function QuadraticBezierCurve( v0, v1, v2 ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve'; + + this.v0 = v0 || new Vector2(); + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + +} + +QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + +QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; + +QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + + return point; + +}; + +QuadraticBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + +}; + +QuadraticBezierCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + +}; + +QuadraticBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + +}; + +function QuadraticBezierCurve3( v0, v1, v2 ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve3'; + + this.v0 = v0 || new Vector3(); + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + +} + +QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + +QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; + +QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + + return point; + +}; + +QuadraticBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + +}; + +QuadraticBezierCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + +}; + +QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + +}; + +function SplineCurve( points /* array of Vector2 */ ) { + + Curve.call( this ); + + this.type = 'SplineCurve'; + + this.points = points || []; + +} + +SplineCurve.prototype = Object.create( Curve.prototype ); +SplineCurve.prototype.constructor = SplineCurve; + +SplineCurve.prototype.isSplineCurve = true; + +SplineCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var points = this.points; + var p = ( points.length - 1 ) * t; + + var intPoint = Math.floor( p ); + var weight = p - intPoint; + + var p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + var p1 = points[ intPoint ]; + var p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + var p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + point.set( + CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), + CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) + ); + + return point; + +}; + +SplineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( var i = 0, l = source.points.length; i < l; i ++ ) { + + var point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + return this; + +}; + +SplineCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( var i = 0, l = this.points.length; i < l; i ++ ) { + + var point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + return data; + +}; + +SplineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( var i = 0, l = json.points.length; i < l; i ++ ) { + + var point = json.points[ i ]; + this.points.push( new Vector2().fromArray( point ) ); + + } + + return this; + +}; + + + +var Curves = Object.freeze({ + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve +}); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + **/ + +/************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + +function CurvePath() { + + Curve.call( this ); + + this.type = 'CurvePath'; + + this.curves = []; + this.autoClose = false; // Automatically closes the path + +} + +CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + var startPoint = this.curves[ 0 ].getPoint( 0 ); + var endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + var d = t * this.getLength(); + var curveLengths = this.getCurveLengths(); + var i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + var diff = curveLengths[ i ] - d; + var curve = this.curves[ i ]; + + var segmentLength = curve.getLength(); + var u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + copy: function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.curves = []; + + for ( var i = 0, l = source.curves.length; i < l; i ++ ) { + + var curve = source.curves[ i ]; + + this.curves.push( curve.clone() ); + + } + + this.autoClose = source.autoClose; + + return this; + + }, + + toJSON: function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.autoClose = this.autoClose; + data.curves = []; + + for ( var i = 0, l = this.curves.length; i < l; i ++ ) { + + var curve = this.curves[ i ]; + data.curves.push( curve.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.autoClose = json.autoClose; + this.curves = []; + + for ( var i = 0, l = json.curves.length; i < l; i ++ ) { + + var curve = json.curves[ i ]; + this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); + + } + + return this; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Creates free form 2d path using series of points, lines or curves. + **/ + +function Path( points ) { + + CurvePath.call( this ); + + this.type = 'Path'; + + this.currentPoint = new Vector2(); + + if ( points ) { + + this.setFromPoints( points ); + + } + +} + +Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { + + constructor: Path, + + setFromPoints: function ( points ) { + + this.moveTo( points[ 0 ].x, points[ 0 ].y ); + + for ( var i = 1, l = points.length; i < l; i ++ ) { + + this.lineTo( points[ i ].x, points[ i ].y ); + + } + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + }, + + lineTo: function ( x, y ) { + + var curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + var curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + var curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + var npts = [ this.currentPoint.clone() ].concat( pts ); + + var curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + var firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + var lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + }, + + copy: function ( source ) { + + CurvePath.prototype.copy.call( this, source ); + + this.currentPoint.copy( source.currentPoint ); + + return this; + + }, + + toJSON: function () { + + var data = CurvePath.prototype.toJSON.call( this ); + + data.currentPoint = this.currentPoint.toArray(); + + return data; + + }, + + fromJSON: function ( json ) { + + CurvePath.prototype.fromJSON.call( this, json ); + + this.currentPoint.fromArray( json.currentPoint ); + + return this; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Defines a 2d shape plane using paths. + **/ + +// STEP 1 Create a path. +// STEP 2 Turn path into shape. +// STEP 3 ExtrudeGeometry takes in Shape/Shapes +// STEP 3a - Extract points from each shape, turn to vertices +// STEP 3b - Triangulate each shape, add faces. + +function Shape( points ) { + + Path.call( this, points ); + + this.uuid = _Math.generateUUID(); + + this.type = 'Shape'; + + this.holes = []; + +} + +Shape.prototype = Object.assign( Object.create( Path.prototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + var holesPts = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // get points of shape and holes (keypoints based on segments parameter) + + extractPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + copy: function ( source ) { + + Path.prototype.copy.call( this, source ); + + this.holes = []; + + for ( var i = 0, l = source.holes.length; i < l; i ++ ) { + + var hole = source.holes[ i ]; + + this.holes.push( hole.clone() ); + + } + + return this; + + }, + + toJSON: function () { + + var data = Path.prototype.toJSON.call( this ); + + data.uuid = this.uuid; + data.holes = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + var hole = this.holes[ i ]; + data.holes.push( hole.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Path.prototype.fromJSON.call( this, json ); + + this.uuid = json.uuid; + this.holes = []; + + for ( var i = 0, l = json.holes.length; i < l; i ++ ) { + + var hole = json.holes[ i ]; + this.holes.push( new Path().fromJSON( hole ) ); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Light( color, intensity ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity !== undefined ? intensity : 1; + + this.receiveShadow = undefined; + +} + +Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.castShadow = undefined; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + +} + +HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.matrix = new Matrix4(); + +} + +Object.assign( LightShadow.prototype, { + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + var object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + +} + +SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + update: function ( light ) { + + var camera = this.camera; + + var fov = _Math.RAD2DEG * 2 * light.angle; + var aspect = this.mapSize.width / this.mapSize.height; + var far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / Math.PI; + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + +} + +SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + + +function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / ( 4 * Math.PI ); + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + +} + +PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectionalLightShadow( ) { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + +} + +DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + +} + +DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + this.castShadow = undefined; + +} + +AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + +} ); + +/** + * @author abelnation / http://github.com/abelnation + */ + +function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.position.set( 0, 1, 0 ); + this.updateMatrix(); + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + // TODO (abelnation): distance/decay + + // TODO (abelnation): update method for RectAreaLight to update transform to lookat target + + // TODO (abelnation): shadows + +} + +// TODO (abelnation): RectAreaLight update when light shape is changed +RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + +} ); + +/** + * + * A Track that interpolates Strings + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + +} + +StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + +} ); + +/** + * + * A Track of Boolean keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrack.call( this, name, times, values ); + +} + +BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + +} ); + +/** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + * @author tschw + */ + +function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + +} + +Object.assign( Interpolant.prototype, { + + evaluate: function ( t ) { + + var pp = this.parameterPositions, + i1 = this._cachedIndex, + + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + var right; + + linear_scan: { + + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( var giveUpAt = i1 + 2; ; ) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + var t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( var giveUpAt = i1 - 2; ; ) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + var mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function () { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function ( index ) { + + // copies a sample value to the result buffer + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function ( /* i1, t0, t, t1 */ ) { + + throw new Error( 'call to abstract method' ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function ( /* i1, t0, t1 */ ) { + + // empty + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + +} ); + +/** + * Spherical linear unit quaternion interpolant. + * + * @author tschw + */ + +function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset = i1 * stride, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + for ( var end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + +} ); + +/** + * + * A Track of quaternion keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + +} + +QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + +} ); + +/** + * + * A Track of keyframe values that represent color. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + +} + +ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + +} ); + +/** + * + * A Track of numeric keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + +} + +NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + * + * @author tschw + */ + +function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = - 0; + this._offsetPrev = - 0; + this._weightNext = - 0; + this._offsetNext = - 0; + +} + +CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function ( i1, t0, t1 ) { + + var pp = this.parameterPositions, + iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + var halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + var sP = - wP * ppp + 2 * wP * pp - wP * p; + var s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; + var s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + var sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + +} ); + +/** + * @author tschw + */ + +function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + +} ); + +/** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + * + * @author tschw + */ + +function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function ( i1 /*, t0, t, t1 */ ) { + + return this.copySampleValue_( i1 - 1 ); + + } + +} ); + +/** + * @author tschw + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +var AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + var n = times.length; + var result = new Array( n ); + for ( var i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + var nValues = values.length; + var result = new values.constructor( nValues ); + + for ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + var srcOffset = order[ i ] * stride; + + for ( var j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + var i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + var value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + } + +}; + +/** + * + * A timed sequence of keyframes for a specific property. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function KeyframeTrack( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); + if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + this.validate(); + this.optimize(); + +} + +// Static methods: + +Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + parse: function ( json ) { + + if ( json.type === undefined ) { + + throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); + + } + + var trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + var times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( json.name, json.times, json.values, json.interpolation ); + + } + + }, + + toJSON: function ( track ) { + + var trackType = track.constructor; + + var json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + var interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + }, + + _getTrackTypeForValueTypeName: function ( typeName ) { + + switch ( typeName.toLowerCase() ) { + + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + + return NumberKeyframeTrack; + + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + + return VectorKeyframeTrack; + + case 'color': + + return ColorKeyframeTrack; + + case 'quaternion': + + return QuaternionKeyframeTrack; + + case 'bool': + case 'boolean': + + return BooleanKeyframeTrack; + + case 'string': + + return StringKeyframeTrack; + + } + + throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); + + } + +} ); + +Object.assign( KeyframeTrack.prototype, { + + constructor: KeyframeTrack, + + TimeBufferType: Float32Array, + + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + var factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + var message = "unsupported interpolation for " + + this.ValueTypeName + " keyframe track named " + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrack:', message ); + return; + + } + + this.createInterpolant = factoryMethod; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + var times = this.times, + nKeys = times.length, + from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) { + + ++ from; + + } + + while ( to !== - 1 && times[ to ] > endTime ) { + + -- to; + + } + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) to = Math.max( to, 1 ), from = to - 1; + + var stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + var valid = true; + + var valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); + valid = false; + + } + + var times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrack: Track is empty.', this ); + valid = false; + + } + + var prevTime = null; + + for ( var i = 0; i !== nKeys; i ++ ) { + + var currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( var i = 0, n = values.length; i !== n; ++ i ) { + + var value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + var times = this.times, + values = this.values, + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + writeIndex = 1, + lastIndex = times.length - 1; + + for ( var i = 1; i < lastIndex; ++ i ) { + + var keep = false; + + var time = times[ i ]; + var timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + var offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( var j = 0; j !== stride; ++ j ) { + + var value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else { + + keep = true; + + } + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + var readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( var j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } + + return this; + + } + +} ); + +/** + * + * A Track of vectored keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + +} + +VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * + * Reusable set of Tracks that represent an animation. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +function AnimationClip( name, duration, tracks ) { + + this.name = name; + this.tracks = tracks; + this.duration = ( duration !== undefined ) ? duration : - 1; + + this.uuid = _Math.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + this.optimize(); + +} + +Object.assign( AnimationClip, { + + parse: function ( json ) { + + var tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + return new AnimationClip( json.name, json.duration, tracks ); + + }, + + toJSON: function ( clip ) { + + var tracks = [], + clipTracks = clip.tracks; + + var json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks + + }; + + for ( var i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + var numMorphTargets = morphTargetSequence.length; + var tracks = []; + + for ( var i = 0; i < numMorphTargets; i ++ ) { + + var times = []; + var values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + var order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + var clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + var o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( var i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + var animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + var pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( var i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = morphTargets[ i ]; + var parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + var name = parts[ 1 ]; + + var animationMorphTargets = animationToMorphTargets[ name ]; + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + var clips = []; + + for ( var name in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + var addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + var times = []; + var values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + var tracks = []; + + var clipName = animation.name || 'default'; + // automatic length determination in AnimationClip. + var duration = animation.length || - 1; + var fps = animation.fps || 30; + + var hierarchyTracks = animation.hierarchy || []; + + for ( var h = 0; h < hierarchyTracks.length; h ++ ) { + + var animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + var morphTargetNames = {}; + + for ( var k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( var morphTargetName in morphTargetNames ) { + + var times = []; + var values = []; + + for ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + var animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + var boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + var clip = new AnimationClip( clipName, duration, tracks ); + + return clip; + + } + +} ); + +Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + var tracks = this.tracks, duration = 0; + + for ( var i = 0, n = tracks.length; i !== n; ++ i ) { + + var track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + }, + + trim: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + optimize: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function MaterialLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.textures = {}; + +} + +Object.assign( MaterialLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + setTextures: function ( value ) { + + this.textures = value; + + }, + + parse: function ( json ) { + + var textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + var material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat; + if ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness; + if ( json.uniforms !== undefined ) material.uniforms = json.uniforms; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + if ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors; + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.side !== undefined ) material.side = json.side; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.rotation !== undefined ) material.rotation = json.rotation; + + if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; + if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; + if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; + if ( json.scale !== undefined ) material.scale = json.scale; + + if ( json.skinning !== undefined ) material.skinning = json.skinning; + if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.visible !== undefined ) material.visible = json.visible; + if ( json.userData !== undefined ) material.userData = json.userData; + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + + if ( json.alphaMap !== undefined ) { + + material.alphaMap = getTexture( json.alphaMap ); + material.transparent = true; + + } + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalScale !== undefined ) { + + var normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + return material; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferGeometryLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( BufferGeometryLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var geometry = new BufferGeometry(); + + var index = json.data.index; + + if ( index !== undefined ) { + + var typedArray = new TYPED_ARRAYS[ index.type ]( index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + var attributes = json.data.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + var typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array ); + + geometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) ); + + } + + var groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( var i = 0, n = groups.length; i !== n; ++ i ) { + + var group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + var boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + var center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + return geometry; + + } + +} ); + +var TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Loader() { + + this.onLoadStart = function () {}; + this.onLoadProgress = function () {}; + this.onLoadComplete = function () {}; + +} + +Loader.Handlers = { + + handlers: [], + + add: function ( regex, loader ) { + + this.handlers.push( regex, loader ); + + }, + + get: function ( file ) { + + var handlers = this.handlers; + + for ( var i = 0, l = handlers.length; i < l; i += 2 ) { + + var regex = handlers[ i ]; + var loader = handlers[ i + 1 ]; + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + } + +}; + +Object.assign( Loader.prototype, { + + crossOrigin: undefined, + + initMaterials: function ( materials, texturePath, crossOrigin ) { + + var array = []; + + for ( var i = 0; i < materials.length; ++ i ) { + + array[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin ); + + } + + return array; + + }, + + createMaterial: ( function () { + + var BlendingMode = { + NoBlending: NoBlending, + NormalBlending: NormalBlending, + AdditiveBlending: AdditiveBlending, + SubtractiveBlending: SubtractiveBlending, + MultiplyBlending: MultiplyBlending, + CustomBlending: CustomBlending + }; + + var color = new Color(); + var textureLoader = new TextureLoader(); + var materialLoader = new MaterialLoader(); + + return function createMaterial( m, texturePath, crossOrigin ) { + + // convert from old material format + + var textures = {}; + + function loadTexture( path, repeat, offset, wrap, anisotropy ) { + + var fullPath = texturePath + path; + var loader = Loader.Handlers.get( fullPath ); + + var texture; + + if ( loader !== null ) { + + texture = loader.load( fullPath ); + + } else { + + textureLoader.setCrossOrigin( crossOrigin ); + texture = textureLoader.load( fullPath ); + + } + + if ( repeat !== undefined ) { + + texture.repeat.fromArray( repeat ); + + if ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping; + if ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping; + + } + + if ( offset !== undefined ) { + + texture.offset.fromArray( offset ); + + } + + if ( wrap !== undefined ) { + + if ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping; + if ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping; + + if ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping; + if ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping; + + } + + if ( anisotropy !== undefined ) { + + texture.anisotropy = anisotropy; + + } + + var uuid = _Math.generateUUID(); + + textures[ uuid ] = texture; + + return uuid; + + } + + // + + var json = { + uuid: _Math.generateUUID(), + type: 'MeshLambertMaterial' + }; + + for ( var name in m ) { + + var value = m[ name ]; + + switch ( name ) { + + case 'DbgColor': + case 'DbgIndex': + case 'opticalDensity': + case 'illumination': + break; + case 'DbgName': + json.name = value; + break; + case 'blending': + json.blending = BlendingMode[ value ]; + break; + case 'colorAmbient': + case 'mapAmbient': + console.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' ); + break; + case 'colorDiffuse': + json.color = color.fromArray( value ).getHex(); + break; + case 'colorSpecular': + json.specular = color.fromArray( value ).getHex(); + break; + case 'colorEmissive': + json.emissive = color.fromArray( value ).getHex(); + break; + case 'specularCoef': + json.shininess = value; + break; + case 'shading': + if ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial'; + if ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial'; + if ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial'; + break; + case 'mapDiffuse': + json.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy ); + break; + case 'mapDiffuseRepeat': + case 'mapDiffuseOffset': + case 'mapDiffuseWrap': + case 'mapDiffuseAnisotropy': + break; + case 'mapEmissive': + json.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy ); + break; + case 'mapEmissiveRepeat': + case 'mapEmissiveOffset': + case 'mapEmissiveWrap': + case 'mapEmissiveAnisotropy': + break; + case 'mapLight': + json.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy ); + break; + case 'mapLightRepeat': + case 'mapLightOffset': + case 'mapLightWrap': + case 'mapLightAnisotropy': + break; + case 'mapAO': + json.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy ); + break; + case 'mapAORepeat': + case 'mapAOOffset': + case 'mapAOWrap': + case 'mapAOAnisotropy': + break; + case 'mapBump': + json.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy ); + break; + case 'mapBumpScale': + json.bumpScale = value; + break; + case 'mapBumpRepeat': + case 'mapBumpOffset': + case 'mapBumpWrap': + case 'mapBumpAnisotropy': + break; + case 'mapNormal': + json.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy ); + break; + case 'mapNormalFactor': + json.normalScale = [ value, value ]; + break; + case 'mapNormalRepeat': + case 'mapNormalOffset': + case 'mapNormalWrap': + case 'mapNormalAnisotropy': + break; + case 'mapSpecular': + json.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy ); + break; + case 'mapSpecularRepeat': + case 'mapSpecularOffset': + case 'mapSpecularWrap': + case 'mapSpecularAnisotropy': + break; + case 'mapMetalness': + json.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy ); + break; + case 'mapMetalnessRepeat': + case 'mapMetalnessOffset': + case 'mapMetalnessWrap': + case 'mapMetalnessAnisotropy': + break; + case 'mapRoughness': + json.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy ); + break; + case 'mapRoughnessRepeat': + case 'mapRoughnessOffset': + case 'mapRoughnessWrap': + case 'mapRoughnessAnisotropy': + break; + case 'mapAlpha': + json.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy ); + break; + case 'mapAlphaRepeat': + case 'mapAlphaOffset': + case 'mapAlphaWrap': + case 'mapAlphaAnisotropy': + break; + case 'flipSided': + json.side = BackSide; + break; + case 'doubleSided': + json.side = DoubleSide; + break; + case 'transparency': + console.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' ); + json.opacity = value; + break; + case 'depthTest': + case 'depthWrite': + case 'colorWrite': + case 'opacity': + case 'reflectivity': + case 'transparent': + case 'visible': + case 'wireframe': + json[ name ] = value; + break; + case 'vertexColors': + if ( value === true ) json.vertexColors = VertexColors; + if ( value === 'face' ) json.vertexColors = FaceColors; + break; + default: + console.error( 'THREE.Loader.createMaterial: Unsupported', name, value ); + break; + + } + + } + + if ( json.type === 'MeshBasicMaterial' ) delete json.emissive; + if ( json.type !== 'MeshPhongMaterial' ) delete json.specular; + + if ( json.opacity < 1 ) json.transparent = true; + + materialLoader.setTextures( textures ); + + return materialLoader.parse( json ); + + }; + + } )() + +} ); + +/** + * @author Don McCurdy / https://www.donmccurdy.com + */ + +var LoaderUtils = { + + decodeText: function ( array ) { + + if ( typeof TextDecoder !== 'undefined' ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + var s = ''; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + // Implicitly assumes little-endian. + s += String.fromCharCode( array[ i ] ); + + } + + return s; + + }, + + extractUrlBase: function ( url ) { + + var parts = url.split( '/' ); + + if ( parts.length === 1 ) return './'; + + parts.pop(); + + return parts.join( '/' ) + '/'; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function JSONLoader( manager ) { + + if ( typeof manager === 'boolean' ) { + + console.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' ); + manager = undefined; + + } + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.withCredentials = false; + +} + +Object.assign( JSONLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url ); + + var loader = new FileLoader( this.manager ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + var json = JSON.parse( text ); + var metadata = json.metadata; + + if ( metadata !== undefined ) { + + var type = metadata.type; + + if ( type !== undefined ) { + + if ( type.toLowerCase() === 'object' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' ); + return; + + } + + if ( type.toLowerCase() === 'scene' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' ); + return; + + } + + } + + } + + var object = scope.parse( json, texturePath ); + onLoad( object.geometry, object.materials ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + parse: ( function () { + + function parseModel( json, geometry ) { + + function isBitSet( value, position ) { + + return value & ( 1 << position ); + + } + + var i, j, fi, + + offset, zLength, + + colorIndex, normalIndex, uvIndex, materialIndex, + + type, + isQuad, + hasMaterial, + hasFaceVertexUv, + hasFaceNormal, hasFaceVertexNormal, + hasFaceColor, hasFaceVertexColor, + + vertex, face, faceA, faceB, hex, normal, + + uvLayer, uv, u, v, + + faces = json.faces, + vertices = json.vertices, + normals = json.normals, + colors = json.colors, + + scale = json.scale, + + nUvLayers = 0; + + + if ( json.uvs !== undefined ) { + + // disregard empty arrays + + for ( i = 0; i < json.uvs.length; i ++ ) { + + if ( json.uvs[ i ].length ) nUvLayers ++; + + } + + for ( i = 0; i < nUvLayers; i ++ ) { + + geometry.faceVertexUvs[ i ] = []; + + } + + } + + offset = 0; + zLength = vertices.length; + + while ( offset < zLength ) { + + vertex = new Vector3(); + + vertex.x = vertices[ offset ++ ] * scale; + vertex.y = vertices[ offset ++ ] * scale; + vertex.z = vertices[ offset ++ ] * scale; + + geometry.vertices.push( vertex ); + + } + + offset = 0; + zLength = faces.length; + + while ( offset < zLength ) { + + type = faces[ offset ++ ]; + + isQuad = isBitSet( type, 0 ); + hasMaterial = isBitSet( type, 1 ); + hasFaceVertexUv = isBitSet( type, 3 ); + hasFaceNormal = isBitSet( type, 4 ); + hasFaceVertexNormal = isBitSet( type, 5 ); + hasFaceColor = isBitSet( type, 6 ); + hasFaceVertexColor = isBitSet( type, 7 ); + + // console.log("type", type, "bits", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor); + + if ( isQuad ) { + + faceA = new Face3(); + faceA.a = faces[ offset ]; + faceA.b = faces[ offset + 1 ]; + faceA.c = faces[ offset + 3 ]; + + faceB = new Face3(); + faceB.a = faces[ offset + 1 ]; + faceB.b = faces[ offset + 2 ]; + faceB.c = faces[ offset + 3 ]; + + offset += 4; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + faceA.materialIndex = materialIndex; + faceB.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + geometry.faceVertexUvs[ i ][ fi + 1 ] = []; + + for ( j = 0; j < 4; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + if ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv ); + if ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + faceA.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + faceB.normal.copy( faceA.normal ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 4; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + + if ( i !== 2 ) faceA.vertexNormals.push( normal ); + if ( i !== 0 ) faceB.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + faceA.color.setHex( hex ); + faceB.color.setHex( hex ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 4; i ++ ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + if ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) ); + if ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) ); + + } + + } + + geometry.faces.push( faceA ); + geometry.faces.push( faceB ); + + } else { + + face = new Face3(); + face.a = faces[ offset ++ ]; + face.b = faces[ offset ++ ]; + face.c = faces[ offset ++ ]; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + face.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + + for ( j = 0; j < 3; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + geometry.faceVertexUvs[ i ][ fi ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + face.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 3; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + face.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + face.color.setHex( colors[ colorIndex ] ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 3; i ++ ) { + + colorIndex = faces[ offset ++ ]; + face.vertexColors.push( new Color( colors[ colorIndex ] ) ); + + } + + } + + geometry.faces.push( face ); + + } + + } + + } + + function parseSkin( json, geometry ) { + + var influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2; + + if ( json.skinWeights ) { + + for ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) { + + var x = json.skinWeights[ i ]; + var y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0; + var z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0; + var w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0; + + geometry.skinWeights.push( new Vector4( x, y, z, w ) ); + + } + + } + + if ( json.skinIndices ) { + + for ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) { + + var a = json.skinIndices[ i ]; + var b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0; + var c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0; + var d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0; + + geometry.skinIndices.push( new Vector4( a, b, c, d ) ); + + } + + } + + geometry.bones = json.bones; + + if ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) { + + console.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' + + geometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' ); + + } + + } + + function parseMorphing( json, geometry ) { + + var scale = json.scale; + + if ( json.morphTargets !== undefined ) { + + for ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) { + + geometry.morphTargets[ i ] = {}; + geometry.morphTargets[ i ].name = json.morphTargets[ i ].name; + geometry.morphTargets[ i ].vertices = []; + + var dstVertices = geometry.morphTargets[ i ].vertices; + var srcVertices = json.morphTargets[ i ].vertices; + + for ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) { + + var vertex = new Vector3(); + vertex.x = srcVertices[ v ] * scale; + vertex.y = srcVertices[ v + 1 ] * scale; + vertex.z = srcVertices[ v + 2 ] * scale; + + dstVertices.push( vertex ); + + } + + } + + } + + if ( json.morphColors !== undefined && json.morphColors.length > 0 ) { + + console.warn( 'THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.' ); + + var faces = geometry.faces; + var morphColors = json.morphColors[ 0 ].colors; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + faces[ i ].color.fromArray( morphColors, i * 3 ); + + } + + } + + } + + function parseAnimations( json, geometry ) { + + var outputAnimations = []; + + // parse old style Bone/Hierarchy animations + var animations = []; + + if ( json.animation !== undefined ) { + + animations.push( json.animation ); + + } + + if ( json.animations !== undefined ) { + + if ( json.animations.length ) { + + animations = animations.concat( json.animations ); + + } else { + + animations.push( json.animations ); + + } + + } + + for ( var i = 0; i < animations.length; i ++ ) { + + var clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones ); + if ( clip ) outputAnimations.push( clip ); + + } + + // parse implicit morph animations + if ( geometry.morphTargets ) { + + // TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary. + var morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 ); + outputAnimations = outputAnimations.concat( morphAnimationClips ); + + } + + if ( outputAnimations.length > 0 ) geometry.animations = outputAnimations; + + } + + return function ( json, texturePath ) { + + if ( json.data !== undefined ) { + + // Geometry 4.0 spec + json = json.data; + + } + + if ( json.scale !== undefined ) { + + json.scale = 1.0 / json.scale; + + } else { + + json.scale = 1.0; + + } + + var geometry = new Geometry(); + + parseModel( json, geometry ); + parseSkin( json, geometry ); + parseMorphing( json, geometry ); + parseAnimations( json, geometry ); + + geometry.computeFaceNormals(); + geometry.computeBoundingSphere(); + + if ( json.materials === undefined || json.materials.length === 0 ) { + + return { geometry: geometry }; + + } else { + + var materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin ); + + return { geometry: geometry, materials: materials }; + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ObjectLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.texturePath = ''; + +} + +Object.assign( ObjectLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.texturePath === '' ) { + + this.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 ); + + } + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + var json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) onError( error ); + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + var metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url + '. Use THREE.JSONLoader instead.' ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + parse: function ( json, onLoad ) { + + var shapes = this.parseShape( json.shapes ); + var geometries = this.parseGeometries( json.geometries, shapes ); + + var images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) onLoad( object ); + + } ); + + var textures = this.parseTextures( json.textures, images ); + var materials = this.parseMaterials( json.materials, textures ); + + var object = this.parseObject( json.object, geometries, materials ); + + if ( json.animations ) { + + object.animations = this.parseAnimations( json.animations ); + + } + + if ( json.images === undefined || json.images.length === 0 ) { + + if ( onLoad !== undefined ) onLoad( object ); + + } + + return object; + + }, + + parseShape: function ( json ) { + + var shapes = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var shape = new Shape().fromJSON( json[ i ] ); + + shapes[ shape.uuid ] = shape; + + } + + } + + return shapes; + + }, + + parseGeometries: function ( json, shapes ) { + + var geometries = {}; + + if ( json !== undefined ) { + + var geometryLoader = new JSONLoader(); + var bufferGeometryLoader = new BufferGeometryLoader(); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var geometry; + var data = json[ i ]; + + switch ( data.type ) { + + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.widthSegments, + data.heightSegments + ); + + break; + + case 'BoxGeometry': + case 'BoxBufferGeometry': + case 'CubeGeometry': // backwards compatible + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.depth, + data.widthSegments, + data.heightSegments, + data.depthSegments + ); + + break; + + case 'CircleGeometry': + case 'CircleBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.segments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radiusTop, + data.radiusBottom, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'ConeGeometry': + case 'ConeBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'SphereGeometry': + case 'SphereBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.widthSegments, + data.heightSegments, + data.phiStart, + data.phiLength, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'DodecahedronGeometry': + case 'DodecahedronBufferGeometry': + case 'IcosahedronGeometry': + case 'IcosahedronBufferGeometry': + case 'OctahedronGeometry': + case 'OctahedronBufferGeometry': + case 'TetrahedronGeometry': + case 'TetrahedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.detail + ); + + break; + + case 'RingGeometry': + case 'RingBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.innerRadius, + data.outerRadius, + data.thetaSegments, + data.phiSegments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'TorusGeometry': + case 'TorusBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.radialSegments, + data.tubularSegments, + data.arc + ); + + break; + + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.tubularSegments, + data.radialSegments, + data.p, + data.q + ); + + break; + + case 'LatheGeometry': + case 'LatheBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.points, + data.segments, + data.phiStart, + data.phiLength + ); + + break; + + case 'PolyhedronGeometry': + case 'PolyhedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.vertices, + data.indices, + data.radius, + data.details + ); + + break; + + case 'ShapeGeometry': + case 'ShapeBufferGeometry': + + var geometryShapes = []; + + for ( var i = 0, l = data.shapes.length; i < l; i ++ ) { + + var shape = shapes[ data.shapes[ i ] ]; + + geometryShapes.push( shape ); + + } + + geometry = new Geometries[ data.type ]( + geometryShapes, + data.curveSegments + ); + + break; + + case 'BufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + geometry = geometryLoader.parse( data, this.texturePath ).geometry; + + break; + + default: + + console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); + + continue; + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) geometry.name = data.name; + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + }, + + parseMaterials: function ( json, textures ) { + + var materials = {}; + + if ( json !== undefined ) { + + var loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + var array = []; + + for ( var j = 0; j < data.materials.length; j ++ ) { + + array.push( loader.parse( data.materials[ j ] ) ); + + } + + materials[ data.uuid ] = array; + + } else { + + materials[ data.uuid ] = loader.parse( data ); + + } + + } + + } + + return materials; + + }, + + parseAnimations: function ( json ) { + + var animations = []; + + for ( var i = 0; i < json.length; i ++ ) { + + var clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + }, + + parseImages: function ( json, onLoad ) { + + var scope = this; + var images = {}; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } ); + + } + + if ( json !== undefined && json.length > 0 ) { + + var manager = new LoadingManager( onLoad ); + + var loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var image = json[ i ]; + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; + + images[ image.uuid ] = loadImage( path ); + + } + + } + + return images; + + }, + + parseTextures: function ( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof value === 'number' ) return value; + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + var textures = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + var texture = new Texture( images[ data.image ] ); + texture.needsUpdate = true; + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) texture.name = data.name; + + if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + + if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); + if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); + if ( data.center !== undefined ) texture.center.fromArray( data.center ); + if ( data.rotation !== undefined ) texture.rotation = data.rotation; + + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); + if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); + if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; + + if ( data.flipY !== undefined ) texture.flipY = data.flipY; + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + }, + + parseObject: function () { + + var matrix = new Matrix4(); + + return function parseObject( data, geometries, materials ) { + + var object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) return undefined; + + if ( Array.isArray( name ) ) { + + var array = []; + + for ( var i = 0, l = name.length; i < l; i ++ ) { + + var uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) object.focus = data.focus; + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; + if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'SkinnedMesh': + + console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' ); + + case 'Mesh': + + var geometry = getGeometry( data.geometry ); + var material = getMaterial( data.material ); + + if ( geometry.bones && geometry.bones.length > 0 ) { + + object = new SkinnedMesh( geometry, material ); + + } else { + + object = new Mesh( geometry, material ); + + } + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) object.name = data.name; + if ( data.matrix !== undefined ) { + + matrix.fromArray( data.matrix ); + matrix.decompose( object.position, object.quaternion, object.scale ); + + } else { + + if ( data.position !== undefined ) object.position.fromArray( data.position ); + if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); + if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); + if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); + + } + + if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; + if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; + if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; + if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); + if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); + + } + + if ( data.visible !== undefined ) object.visible = data.visible; + if ( data.userData !== undefined ) object.userData = data.userData; + + if ( data.children !== undefined ) { + + var children = data.children; + + for ( var i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials ) ); + + } + + } + + if ( data.type === 'LOD' ) { + + var levels = data.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + var level = levels[ l ]; + var child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + }; + + }() + +} ); + +var TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + SphericalReflectionMapping: SphericalReflectionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping +}; + +var TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping +}; + +var TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipMapNearestFilter: NearestMipMapNearestFilter, + NearestMipMapLinearFilter: NearestMipMapLinearFilter, + LinearFilter: LinearFilter, + LinearMipMapNearestFilter: LinearMipMapNearestFilter, + LinearMipMapLinearFilter: LinearMipMapLinearFilter +}; + +/** + * @author thespite / http://clicktorelease.com/ + */ + +function ImageBitmapLoader( manager ) { + + if ( typeof createImageBitmap === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); + + } + + if ( typeof fetch === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); + + } + + this.manager = manager !== undefined ? manager : DefaultLoadingManager; + this.options = undefined; + +} + +ImageBitmapLoader.prototype = { + + constructor: ImageBitmapLoader, + + setOptions: function setOptions( options ) { + + this.options = options; + + return this; + + }, + + load: function load( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + fetch( url ).then( function ( res ) { + + return res.blob(); + + } ).then( function ( blob ) { + + return createImageBitmap( blob, scope.options ); + + } ).then( function ( imageBitmap ) { + + Cache.add( url, imageBitmap ); + + if ( onLoad ) onLoad( imageBitmap ); + + scope.manager.itemEnd( url ); + + } ).catch( function ( e ) { + + if ( onError ) onError( e ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } ); + + }, + + setCrossOrigin: function ( /* value */ ) { + + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * minimal class for proxing functions to Path. Replaces old "extractSubpaths()" + **/ + +function ShapePath() { + + this.type = 'ShapePath'; + + this.subPaths = []; + this.currentPath = null; + +} + +Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + var shapes = []; + + for ( var i = 0, l = inSubpaths.length; i < l; i ++ ) { + + var tmpPath = inSubpaths[ i ]; + + var tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + var polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + var inside = false; + for ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + var edgeLowPt = inPolygon[ p ]; + var edgeHighPt = inPolygon[ q ]; + + var edgeDx = edgeHighPt.x - edgeLowPt.x; + var edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + var perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + var isClockWise = ShapeUtils.isClockWise; + + var subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + var solid, tmpPath, tmpShape, shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + var holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + var betterShapeHoles = []; + var newShapes = []; + var newShapeHoles = []; + var mainIdx = 0; + var tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( var i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + var ambiguous = false; + var toChange = []; + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + var sho = newShapeHoles[ sIdx ]; + + for ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + var ho = sho[ hIdx ]; + var hole_unassigned = true; + + for ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + var tmpHoles; + + for ( var i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author mrdoob / http://mrdoob.com/ + */ + +function Font( data ) { + + this.type = 'Font'; + + this.data = data; + +} + +Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size, divisions ) { + + function createPaths( text ) { + + var chars = String( text ).split( '' ); + var scale = size / data.resolution; + var line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + var offsetX = 0, offsetY = 0; + + var paths = []; + + for ( var i = 0; i < chars.length; i ++ ) { + + var char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + var ret = createPath( char, scale, offsetX, offsetY ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( c, scale, offsetX, offsetY ) { + + var glyph = data.glyphs[ c ] || data.glyphs[ '?' ]; + + if ( ! glyph ) return; + + var path = new ShapePath(); + + var pts = []; + var x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2, laste; + + if ( glyph.o ) { + + var outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( var i = 0, l = outline.length; i < l; ) { + + var action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + + + } + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + + + } + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + // + + if ( size === undefined ) size = 100; + if ( divisions === undefined ) divisions = 4; + + var data = this.data; + + var paths = createPaths( text ); + var shapes = []; + + for ( var p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function FontLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FontLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.load( url, function ( text ) { + + var json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + var font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var context; + +var AudioContext = { + + getContext: function () { + + if ( context === undefined ) { + + context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return context; + + }, + + setContext: function ( value ) { + + context = value; + + } + +}; + +/** + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function AudioLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( AudioLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.load( url, function ( buffer ) { + + var context = AudioContext.getContext(); + + context.decodeAudioData( buffer, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + }, onProgress, onError ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + +} + +Object.assign( StereoCamera.prototype, { + + update: ( function () { + + var instance, focus, fov, aspect, near, far, zoom, eyeSep; + + var eyeRight = new Matrix4(); + var eyeLeft = new Matrix4(); + + return function update( camera ) { + + var needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov || + aspect !== camera.aspect * this.aspect || near !== camera.near || + far !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + instance = this; + focus = camera.focus; + fov = camera.fov; + aspect = camera.aspect * this.aspect; + near = camera.near; + far = camera.far; + zoom = camera.zoom; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + var projectionMatrix = camera.projectionMatrix.clone(); + eyeSep = this.eyeSep / 2; + var eyeSepOnProjection = eyeSep * near / focus; + var ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom; + var xmin, xmax; + + // translate xOffset + + eyeLeft.elements[ 12 ] = - eyeSep; + eyeRight.elements[ 12 ] = eyeSep; + + // for left eye + + xmin = - ymax * aspect + eyeSepOnProjection; + xmax = ymax * aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * aspect - eyeSepOnProjection; + xmax = ymax * aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight ); + + }; + + } )() + +} ); + +/** + * Camera for rendering cube maps + * - renders scene into axis-aligned cube + * + * @author alteredq / http://alteredqualia.com/ + */ + +function CubeCamera( near, far, cubeResolution ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + var fov = 90, aspect = 1; + + var cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + var cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + var cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + var cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + var cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + var cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + var options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter }; + + this.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options ); + this.renderTarget.texture.name = "CubeCamera"; + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + var renderTarget = this.renderTarget; + var generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderTarget.activeCubeFace = 0; + renderer.render( scene, cameraPX, renderTarget ); + + renderTarget.activeCubeFace = 1; + renderer.render( scene, cameraNX, renderTarget ); + + renderTarget.activeCubeFace = 2; + renderer.render( scene, cameraPY, renderTarget ); + + renderTarget.activeCubeFace = 3; + renderer.render( scene, cameraNY, renderTarget ); + + renderTarget.activeCubeFace = 4; + renderer.render( scene, cameraPZ, renderTarget ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderTarget.activeCubeFace = 5; + renderer.render( scene, cameraNZ, renderTarget ); + + renderer.setRenderTarget( null ); + + }; + + this.clear = function ( renderer, color, depth, stencil ) { + + var renderTarget = this.renderTarget; + + for ( var i = 0; i < 6; i ++ ) { + + renderTarget.activeCubeFace = i; + renderer.setRenderTarget( renderTarget ); + + renderer.clear( color, depth, stencil ); + + } + + renderer.setRenderTarget( null ); + + }; + +} + +CubeCamera.prototype = Object.create( Object3D.prototype ); +CubeCamera.prototype.constructor = CubeCamera; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioListener() { + + Object3D.call( this ); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + +} + +AudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: AudioListener, + + getInput: function () { + + return this.gain; + + }, + + removeFilter: function ( ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + }, + + getFilter: function () { + + return this.filter; + + }, + + setFilter: function ( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + }, + + getMasterVolume: function () { + + return this.gain.gain.value; + + }, + + setMasterVolume: function ( value ) { + + this.gain.gain.value = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + var scale = new Vector3(); + + var orientation = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + var listener = this.context.listener; + var up = this.up; + + this.matrixWorld.decompose( position, quaternion, scale ); + + orientation.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + if ( listener.positionX ) { + + listener.positionX.setValueAtTime( position.x, this.context.currentTime ); + listener.positionY.setValueAtTime( position.y, this.context.currentTime ); + listener.positionZ.setValueAtTime( position.z, this.context.currentTime ); + listener.forwardX.setValueAtTime( orientation.x, this.context.currentTime ); + listener.forwardY.setValueAtTime( orientation.y, this.context.currentTime ); + listener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime ); + listener.upX.setValueAtTime( up.x, this.context.currentTime ); + listener.upY.setValueAtTime( up.y, this.context.currentTime ); + listener.upZ.setValueAtTime( up.z, this.context.currentTime ); + + } else { + + listener.setPosition( position.x, position.y, position.z ); + listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z ); + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function Audio( listener ) { + + Object3D.call( this ); + + this.type = 'Audio'; + + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.loop = false; + this.startTime = 0; + this.offset = 0; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.sourceType = 'empty'; + + this.filters = []; + +} + +Audio.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Audio, + + getOutput: function () { + + return this.gain; + + }, + + setNodeSource: function ( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + }, + + setBuffer: function ( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + }, + + play: function () { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + var source = this.context.createBufferSource(); + + source.buffer = this.buffer; + source.loop = this.loop; + source.onended = this.onEnded.bind( this ); + source.playbackRate.setValueAtTime( this.playbackRate, this.startTime ); + this.startTime = this.context.currentTime; + source.start( this.startTime, this.offset ); + + this.isPlaying = true; + + this.source = source; + + return this.connect(); + + }, + + pause: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + if ( this.isPlaying === true ) { + + this.source.stop(); + this.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate; + this.isPlaying = false; + + } + + return this; + + }, + + stop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.source.stop(); + this.offset = 0; + this.isPlaying = false; + + return this; + + }, + + connect: function () { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + return this; + + }, + + disconnect: function () { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + return this; + + }, + + getFilters: function () { + + return this.filters; + + }, + + setFilters: function ( value ) { + + if ( ! value ) value = []; + + if ( this.isPlaying === true ) { + + this.disconnect(); + this.filters = value; + this.connect(); + + } else { + + this.filters = value; + + } + + return this; + + }, + + getFilter: function () { + + return this.getFilters()[ 0 ]; + + }, + + setFilter: function ( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + }, + + setPlaybackRate: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime ); + + } + + return this; + + }, + + getPlaybackRate: function () { + + return this.playbackRate; + + }, + + onEnded: function () { + + this.isPlaying = false; + + }, + + getLoop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + }, + + setLoop: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + }, + + getVolume: function () { + + return this.gain.gain.value; + + }, + + setVolume: function ( value ) { + + this.gain.gain.value = value; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function PositionalAudio( listener ) { + + Audio.call( this, listener ); + + this.panner = this.context.createPanner(); + this.panner.connect( this.gain ); + +} + +PositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), { + + constructor: PositionalAudio, + + getOutput: function () { + + return this.panner; + + }, + + getRefDistance: function () { + + return this.panner.refDistance; + + }, + + setRefDistance: function ( value ) { + + this.panner.refDistance = value; + + }, + + getRolloffFactor: function () { + + return this.panner.rolloffFactor; + + }, + + setRolloffFactor: function ( value ) { + + this.panner.rolloffFactor = value; + + }, + + getDistanceModel: function () { + + return this.panner.distanceModel; + + }, + + setDistanceModel: function ( value ) { + + this.panner.distanceModel = value; + + }, + + getMaxDistance: function () { + + return this.panner.maxDistance; + + }, + + setMaxDistance: function ( value ) { + + this.panner.maxDistance = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + position.setFromMatrixPosition( this.matrixWorld ); + + this.panner.setPosition( position.x, position.y, position.z ); + + }; + + } )() + + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioAnalyser( audio, fftSize ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + +} + +Object.assign( AudioAnalyser.prototype, { + + getFrequencyData: function () { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + }, + + getAverageFrequency: function () { + + var value = 0, data = this.getFrequencyData(); + + for ( var i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + } + +} ); + +/** + * + * Buffered scene graph property that allows weighted accumulation. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + var bufferType = Float64Array, + mixFunction; + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + break; + + case 'string': + case 'bool': + bufferType = Array; + mixFunction = this._select; + break; + + default: + mixFunction = this._lerp; + + } + + this.buffer = new bufferType( valueSize * 4 ); + // layout: [ incoming | accu0 | accu1 | orig ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + + this._mixBufferRegion = mixFunction; + + this.cumulativeWeight = 0; + + this.useCount = 0; + this.referenceCount = 0; + +} + +Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + var buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride, + + currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + var mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + var stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + + binding = this.binding; + + this.cumulativeWeight = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + var originalValueOffset = stride * 3; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + for ( var i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + var binding = this.binding; + + var buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * 3; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( var i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + this.cumulativeWeight = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + var originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + var s = 1 - t; + + for ( var i = 0; i !== stride; ++ i ) { + + var j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + } + +} ); + +/** + * + * A reference to a real property in the scene graph. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function Composite( targetGroup, path, optionalParsedPath ) { + + var parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + +} + +Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + var firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + }, + + setValue: function ( array, offset ) { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + +} ); + + +function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + +} + +Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( /[^\w-]/g, '' ); + + }, + + parseTrackName: function () { + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + var directoryRe = /((?:[\w-]+[\/:])*)/; + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + var nodeRe = /([\w-\.]+)?/; + + // Object on target node, and accessor. Name may contain only word + // characters. Accessor may contain any character except closing bracket. + var objectRe = /(?:\.([\w-]+)(?:\[(.+)\])?)?/; + + // Property and accessor. May contain only word characters. Accessor may + // contain any non-bracket characters. + var propertyRe = /\.([\w-]+)(?:\[(.+)\])?/; + + var trackRe = new RegExp( '' + + '^' + + directoryRe.source + + nodeRe.source + + objectRe.source + + propertyRe.source + + '$' + ); + + var supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + return function ( trackName ) { + + var matches = trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + var results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + var lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== - 1 ) { + + var objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against a whitelist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( supportedObjectNames.indexOf( objectName ) !== - 1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }; + + }(), + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === "" || nodeName === "root" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + var searchSkeleton = function ( skeleton ) { + + for ( var i = 0; i < skeleton.bones.length; i ++ ) { + + var bone = skeleton.bones[ i ]; + + if ( bone.name === nodeName ) { + + return bone; + + } + + } + + return null; + + }; + + var bone = searchSkeleton( root.skeleton ); + + if ( bone ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + var searchNodeSubtree = function ( children ) { + + for ( var i = 0; i < children.length; i ++ ) { + + var childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + var result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + var subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + +} ); + +Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + var source = this.resolvedProperty; + + for ( var i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + var targetObject = this.node, + parsedPath = this.parsedPath, + + objectName = parsedPath.objectName, + propertyName = parsedPath.propertyName, + propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + var objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( var i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + var nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + var nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + var versioning = this.Versioning.None; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + this.targetObject = targetObject; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + this.targetObject = targetObject; + + } + + // determine how the property gets bound + var bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === "morphTargetInfluences" ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) { + + if ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + + } else { + + if ( ! targetObject.geometry.morphTargets ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) { + + if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + +} ); + +/** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + * + * @author tschw + */ + +function AnimationObjectGroup() { + + this.uuid = _Math.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + var indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + var scope = this; + + this.stats = { + + objects: { + get total() { + + return scope._objects.length; + + }, + get inUse() { + + return this.total - scope.nCachedObjects_; + + } + }, + get bindingsPerObject() { + + return scope._bindings.length; + + } + + }; + +} + +Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function () { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ], + knownObject = undefined; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function () { + + var objects = this._objects, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + var lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function () { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + var lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + indicesByUUID[ lastObject.uuid ] = index; + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ], + bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + var paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + var object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + var paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + +} ); + +/** + * + * Action provided by AnimationMixer for scheduling clip playback on specific + * objects. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + * + */ + +function AnimationAction( mixer, clip, localRoot ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot || null; + + var tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + var interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( var i = 0; i !== nTracks; ++ i ) { + + var interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = - 1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false; // keep feeding the last frame? + + this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true; // clips for start, loop and end + +} + +Object.assign( AnimationAction.prototype, { + + // State & Scheduling + + play: function () { + + this._mixer._activateAction( this ); + + return this; + + }, + + stop: function () { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + }, + + reset: function () { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = - 1; // forget previous loops + this._startTime = null; // forget scheduling + + return this.stopFading().stopWarping(); + + }, + + isRunning: function () { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + }, + + // return true when play has been called + isScheduled: function () { + + return this._mixer._isActiveAction( this ); + + }, + + startAt: function ( time ) { + + this._startTime = time; + + return this; + + }, + + setLoop: function ( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + }, + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight: function ( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + }, + + // return the weight considering fading and .enabled + getEffectiveWeight: function () { + + return this._effectiveWeight; + + }, + + fadeIn: function ( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + }, + + fadeOut: function ( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + }, + + crossFadeFrom: function ( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if ( warp ) { + + var fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + }, + + crossFadeTo: function ( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + }, + + stopFading: function () { + + var weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + }, + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale: function ( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + + return this.stopWarping(); + + }, + + // return the time scale considering warping and .paused + getEffectiveTimeScale: function () { + + return this._effectiveTimeScale; + + }, + + setDuration: function ( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + }, + + syncWith: function ( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + }, + + halt: function ( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + }, + + warp: function ( startTimeScale, endTimeScale, duration ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._timeScaleInterpolant, + + timeScale = this.timeScale; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + }, + + stopWarping: function () { + + var timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + }, + + // Object Accessors + + getMixer: function () { + + return this._mixer; + + }, + + getClip: function () { + + return this._clip; + + }, + + getRoot: function () { + + return this._localRoot || this._mixer._root; + + }, + + // Interna + + _update: function ( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + var startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + var timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + var clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + var weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + var interpolants = this._interpolants; + var propertyMixers = this._propertyBindings; + + for ( var j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + }, + + _updateWeight: function ( time ) { + + var weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + var interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + }, + + _updateTimeScale: function ( time ) { + + var timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + var interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + }, + + _updateTime: function ( deltaTime ) { + + var time = this.time + deltaTime; + + if ( deltaTime === 0 ) return time; + + var duration = this._clip.duration, + + loop = this.loop, + loopCount = this._loopCount; + + if ( loop === LoopOnce ) { + + if ( loopCount === - 1 ) { + + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else break handle_stop; + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? - 1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + var pingPong = ( loop === LoopPingPong ); + + if ( loopCount === - 1 ) { + + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + + // wrap around + + var loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + var pending = this.repetitions - loopCount; + + if ( pending < 0 ) { + + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : - 1 + } ); + + } else { + + // keep running + + if ( pending === 0 ) { + + // entering the last round + + var atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + + // invert time for the "pong round" + + this.time = time; + return duration - time; + + } + + } + + this.time = time; + return time; + + }, + + _setEndings: function ( atStart, atEnd, pingPong ) { + + var settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + }, + + _scheduleFading: function ( duration, weightNow, weightThen ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; values[ 0 ] = weightNow; + times[ 1 ] = now + duration; values[ 1 ] = weightThen; + + return this; + + } + +} ); + +/** + * + * Player for AnimationClips. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + +} + +AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: AnimationMixer, + + _bindAction: function ( action, prototypeAction ) { + + var root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName, + bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( var i = 0; i !== nTracks; ++ i ) { + + var track = tracks[ i ], + trackName = track.name, + binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + var path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + var rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + var bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + var bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + var scope = this; + + this.stats = { + + actions: { + get total() { + + return scope._actions.length; + + }, + get inUse() { + + return scope._nActiveActions; + + } + }, + bindings: { + get total() { + + return scope._bindings.length; + + }, + get inUse() { + + return scope._nActiveBindings; + + } + }, + controlInterpolants: { + get total() { + + return scope._controlInterpolants.length; + + }, + get inUse() { + + return scope._nActiveControlInterpolants; + + } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + var index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + var actions = this._actions, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + var knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + var actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + var clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + var actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + var bindings = action._propertyBindings; + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + var actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + var actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + bindings = this._bindings; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + var bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + remove_empty_map: { + + for ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + var interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++, + interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + var interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject !== null ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ], + prototypeAction = null; + + if ( actionsForClip !== undefined ) { + + var existingAction = + actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + var newAction = new AnimationAction( this, clipObject, optionalRoot ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + var actions = this._actions, + nActions = this._nActiveActions, + bindings = this._bindings, + nBindings = this._nActiveBindings; + + this._nActiveActions = 0; + this._nActiveBindings = 0; + + for ( var i = 0; i !== nActions; ++ i ) { + + actions[ i ].reset(); + + } + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].useCount = 0; + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + var actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( var i = 0; i !== nActions; ++ i ) { + + var action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + var bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + var actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + var actionsToRemove = actionsForClip.knownActions; + + for ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + var action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + var cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + var rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( var clipUuid in actionsByClip ) { + + var actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( var trackName in bindingByName ) { + + var binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + var action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Uniform( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + +} + +Uniform.prototype.clone = function () { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + +}; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.maxInstancedCount = undefined; + +} + +InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + copy: function ( source ) { + + BufferGeometry.prototype.copy.call( this, source ); + + this.maxInstancedCount = source.maxInstancedCount; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.uuid = _Math.generateUUID(); + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + +} + +Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + } + +} ); + +Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBuffer( array, stride ) { + + this.uuid = _Math.generateUUID(); + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.stride : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( var i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferAttribute( array, itemSize, meshPerAttribute ) { + + BufferAttribute.call( this, array, itemSize ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author bhouston / http://clara.io/ + * @author stephomi / http://stephaneginier.com/ + */ + +function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + + this.params = { + Mesh: {}, + Line: {}, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + + } + } + } ); + +} + +function ascSort( a, b ) { + + return a.distance - b.distance; + +} + +function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.visible === false ) return; + + object.raycast( raycaster, intersects ); + + if ( recursive === true ) { + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + +} + +Object.assign( Raycaster.prototype, { + + linePrecision: 1, + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( ( camera && camera.isPerspectiveCamera ) ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + + } else if ( ( camera && camera.isOrthographicCamera ) ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type.' ); + + } + + }, + + intersectObject: function ( object, recursive ) { + + var intersects = []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive ) { + + var intersects = []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( var i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Clock( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + +} + +Object.assign( Clock.prototype, { + + start: function () { + + this.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + }, + + stop: function () { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + }, + + getElapsedTime: function () { + + this.getDelta(); + return this.elapsedTime; + + }, + + getDelta: function () { + + var diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + var newTime = ( typeof performance === 'undefined' ? Date : performance ).now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The poles (phi) are at the positive and negative y axis. + * The equator starts at positive z. + */ + +function Spherical( radius, phi, theta ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; + this.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole + this.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere + + return this; + +} + +Object.assign( Spherical.prototype, { + + set: function ( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + }, + + // restrict phi to be betwee EPS and PI-EPS + makeSafe: function () { + + var EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + }, + + setFromVector3: function ( vec3 ) { + + this.radius = vec3.length(); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis + this.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle + + } + + return this; + + } + +} ); + +/** + * @author Mugen87 / https://github.com/Mugen87 + * + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + * + */ + +function Cylindrical( radius, theta, y ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane + this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane + + return this; + +} + +Object.assign( Cylindrical.prototype, { + + set: function ( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + }, + + setFromVector3: function ( vec3 ) { + + this.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z ); + this.theta = Math.atan2( vec3.x, vec3.z ); + this.y = vec3.y; + + return this; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( /* renderCallback */ ) {}; + +} + +ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); +ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + +ImmediateRenderObject.prototype.isImmediateRenderObject = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function VertexNormalsHelper( object, size, hex, linewidth ) { + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xff0000; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length * 3; + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + nNormals = objGeometry.attributes.normal.count; + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + + this.update(); + +} + +VertexNormalsHelper.prototype = Object.create( LineSegments.prototype ); +VertexNormalsHelper.prototype.constructor = VertexNormalsHelper; + +VertexNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + var keys = [ 'a', 'b', 'c' ]; + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + var vertex = vertices[ face[ keys[ j ] ] ]; + + var normal = face.vertexNormals[ j ]; + + v1.copy( vertex ).applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + var objPos = objGeometry.attributes.position; + + var objNorm = objGeometry.attributes.normal; + + var idx = 0; + + // for simplicity, ignore index and drawcalls, and render every normal + + for ( var j = 0, jl = objPos.count; j < jl; j ++ ) { + + v1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld ); + + v2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) ); + + v2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function SpotLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new BufferGeometry(); + + var positions = [ + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, - 1, 0, 1, + 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, - 1, 1 + ]; + + for ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + var p1 = ( i / l ) * Math.PI * 2; + var p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + +} + +SpotLightHelper.prototype = Object.create( Object3D.prototype ); +SpotLightHelper.prototype.constructor = SpotLightHelper; + +SpotLightHelper.prototype.dispose = function () { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + +}; + +SpotLightHelper.prototype.update = function () { + + var vector = new Vector3(); + var vector2 = new Vector3(); + + return function update() { + + this.light.updateMatrixWorld(); + + var coneLength = this.light.distance ? this.light.distance : 1000; + var coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + vector.setFromMatrixPosition( this.light.matrixWorld ); + vector2.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( vector2.sub( vector ) ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + }; + +}(); + +/** + * @author Sean Griffin / http://twitter.com/sgrif + * @author Michael Guerrero / http://realitymeltdown.com + * @author mrdoob / http://mrdoob.com/ + * @author ikerr / http://verold.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +function getBoneList( object ) { + + var boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( var i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + +} + +function SkeletonHelper( object ) { + + var bones = getBoneList( object ); + + var geometry = new BufferGeometry(); + + var vertices = []; + var colors = []; + + var color1 = new Color( 0, 0, 1 ); + var color2 = new Color( 0, 1, 0 ); + + for ( var i = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } ); + + LineSegments.call( this, geometry, material ); + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + +} + +SkeletonHelper.prototype = Object.create( LineSegments.prototype ); +SkeletonHelper.prototype.constructor = SkeletonHelper; + +SkeletonHelper.prototype.updateMatrixWorld = function () { + + var vector = new Vector3(); + + var boneMatrix = new Matrix4(); + var matrixWorldInv = new Matrix4(); + + return function updateMatrixWorld( force ) { + + var bones = this.bones; + + var geometry = this.geometry; + var position = geometry.getAttribute( 'position' ); + + matrixWorldInv.getInverse( this.root.matrixWorld ); + + for ( var i = 0, j = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j, vector.x, vector.y, vector.z ); + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j + 1, vector.x, vector.y, vector.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function PointLightHelper( light, sphereSize, color ) { + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + var geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); + var material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + + Mesh.call( this, geometry, material ); + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + var distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); + var distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + var d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + +} + +PointLightHelper.prototype = Object.create( Mesh.prototype ); +PointLightHelper.prototype.constructor = PointLightHelper; + +PointLightHelper.prototype.dispose = function () { + + this.geometry.dispose(); + this.material.dispose(); + +}; + +PointLightHelper.prototype.update = function () { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + var d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + +}; + +/** + * @author abelnation / http://github.com/abelnation + * @author Mugen87 / http://github.com/Mugen87 + * @author WestLangley / http://github.com/WestLangley + */ + +function RectAreaLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var material = new LineBasicMaterial( { fog: false } ); + + var geometry = new BufferGeometry(); + + geometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) ); + + this.line = new Line( geometry, material ); + this.add( this.line ); + + + this.update(); + +} + +RectAreaLightHelper.prototype = Object.create( Object3D.prototype ); +RectAreaLightHelper.prototype.constructor = RectAreaLightHelper; + +RectAreaLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +RectAreaLightHelper.prototype.update = function () { + + // calculate new dimensions of the helper + + var hx = this.light.width * 0.5; + var hy = this.light.height * 0.5; + + var position = this.line.geometry.attributes.position; + var array = position.array; + + // update vertices + + array[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0; + array[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0; + array[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0; + array[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0; + array[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0; + + position.needsUpdate = true; + + if ( this.color !== undefined ) { + + this.line.material.color.set( this.color ); + + } else { + + this.line.material.color.copy( this.light.color ); + + } + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function HemisphereLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new OctahedronBufferGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + if ( this.color === undefined ) this.material.vertexColors = VertexColors; + + var position = geometry.getAttribute( 'position' ); + var colors = new Float32Array( position.count * 3 ); + + geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + +} + +HemisphereLightHelper.prototype = Object.create( Object3D.prototype ); +HemisphereLightHelper.prototype.constructor = HemisphereLightHelper; + +HemisphereLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +HemisphereLightHelper.prototype.update = function () { + + var vector = new Vector3(); + + var color1 = new Color(); + var color2 = new Color(); + + return function update() { + + var mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + var colors = mesh.geometry.getAttribute( 'color' ); + + color1.copy( this.light.color ); + color2.copy( this.light.groundColor ); + + for ( var i = 0, l = colors.count; i < l; i ++ ) { + + var color = ( i < ( l / 2 ) ) ? color1 : color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function GridHelper( size, divisions, color1, color2 ) { + + size = size || 10; + divisions = divisions || 10; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var center = divisions / 2; + var step = size / divisions; + var halfSize = size / 2; + + var vertices = [], colors = []; + + for ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + var color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +GridHelper.prototype = Object.create( LineSegments.prototype ); +GridHelper.prototype.constructor = GridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + * @author Hectate / http://www.github.com/Hectate + */ + +function PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) { + + radius = radius || 10; + radials = radials || 16; + circles = circles || 8; + divisions = divisions || 64; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var vertices = []; + var colors = []; + + var x, z; + var v, i, j, r, color; + + // create the radials + + for ( i = 0; i <= radials; i ++ ) { + + v = ( i / radials ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * radius; + z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( i = 0; i <= circles; i ++ ) { + + color = ( i & 1 ) ? color1 : color2; + + r = radius - ( radius / circles * i ); + + for ( j = 0; j < divisions; j ++ ) { + + // first vertex + + v = ( j / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + // second vertex + + v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + } + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +PolarGridHelper.prototype = Object.create( LineSegments.prototype ); +PolarGridHelper.prototype.constructor = PolarGridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function FaceNormalsHelper( object, size, hex, linewidth ) { + + // FaceNormalsHelper only supports THREE.Geometry + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length; + + } else { + + console.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' ); + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + this.update(); + +} + +FaceNormalsHelper.prototype = Object.create( LineSegments.prototype ); +FaceNormalsHelper.prototype.constructor = FaceNormalsHelper; + +FaceNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var normal = face.normal; + + v1.copy( vertices[ face.a ] ) + .add( vertices[ face.b ] ) + .add( vertices[ face.c ] ) + .divideScalar( 3 ) + .applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function DirectionalLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) size = 1; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + +} + +DirectionalLightHelper.prototype = Object.create( Object3D.prototype ); +DirectionalLightHelper.prototype.constructor = DirectionalLightHelper; + +DirectionalLightHelper.prototype.dispose = function () { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + +}; + +DirectionalLightHelper.prototype.update = function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var v3 = new Vector3(); + + return function update() { + + v1.setFromMatrixPosition( this.light.matrixWorld ); + v2.setFromMatrixPosition( this.light.target.matrixWorld ); + v3.subVectors( v2, v1 ); + + this.lightPlane.lookAt( v3 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( v3 ); + this.targetLine.scale.z = v3.length(); + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author Mugen87 / https://github.com/Mugen87 + * + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + +function CameraHelper( camera ) { + + var geometry = new BufferGeometry(); + var material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } ); + + var vertices = []; + var colors = []; + + var pointMap = {}; + + // colors + + var colorFrustum = new Color( 0xffaa00 ); + var colorCone = new Color( 0xff0000 ); + var colorUp = new Color( 0x00aaff ); + var colorTarget = new Color( 0xffffff ); + var colorCross = new Color( 0x333333 ); + + // near + + addLine( 'n1', 'n2', colorFrustum ); + addLine( 'n2', 'n4', colorFrustum ); + addLine( 'n4', 'n3', colorFrustum ); + addLine( 'n3', 'n1', colorFrustum ); + + // far + + addLine( 'f1', 'f2', colorFrustum ); + addLine( 'f2', 'f4', colorFrustum ); + addLine( 'f4', 'f3', colorFrustum ); + addLine( 'f3', 'f1', colorFrustum ); + + // sides + + addLine( 'n1', 'f1', colorFrustum ); + addLine( 'n2', 'f2', colorFrustum ); + addLine( 'n3', 'f3', colorFrustum ); + addLine( 'n4', 'f4', colorFrustum ); + + // cone + + addLine( 'p', 'n1', colorCone ); + addLine( 'p', 'n2', colorCone ); + addLine( 'p', 'n3', colorCone ); + addLine( 'p', 'n4', colorCone ); + + // up + + addLine( 'u1', 'u2', colorUp ); + addLine( 'u2', 'u3', colorUp ); + addLine( 'u3', 'u1', colorUp ); + + // target + + addLine( 'c', 't', colorTarget ); + addLine( 'p', 'c', colorCross ); + + // cross + + addLine( 'cn1', 'cn2', colorCross ); + addLine( 'cn3', 'cn4', colorCross ); + + addLine( 'cf1', 'cf2', colorCross ); + addLine( 'cf3', 'cf4', colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + LineSegments.call( this, geometry, material ); + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + +} + +CameraHelper.prototype = Object.create( LineSegments.prototype ); +CameraHelper.prototype.constructor = CameraHelper; + +CameraHelper.prototype.update = function () { + + var geometry, pointMap; + + var vector = new Vector3(); + var camera = new Camera(); + + function setPoint( point, x, y, z ) { + + vector.set( x, y, z ).unproject( camera ); + + var points = pointMap[ point ]; + + if ( points !== undefined ) { + + var position = geometry.getAttribute( 'position' ); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], vector.x, vector.y, vector.z ); + + } + + } + + } + + return function update() { + + geometry = this.geometry; + pointMap = this.pointMap; + + var w = 1, h = 1; + + // we need just camera projection matrix + // world matrix must be identity + + camera.projectionMatrix.copy( this.camera.projectionMatrix ); + + // center / target + + setPoint( 'c', 0, 0, - 1 ); + setPoint( 't', 0, 0, 1 ); + + // near + + setPoint( 'n1', - w, - h, - 1 ); + setPoint( 'n2', w, - h, - 1 ); + setPoint( 'n3', - w, h, - 1 ); + setPoint( 'n4', w, h, - 1 ); + + // far + + setPoint( 'f1', - w, - h, 1 ); + setPoint( 'f2', w, - h, 1 ); + setPoint( 'f3', - w, h, 1 ); + setPoint( 'f4', w, h, 1 ); + + // up + + setPoint( 'u1', w * 0.7, h * 1.1, - 1 ); + setPoint( 'u2', - w * 0.7, h * 1.1, - 1 ); + setPoint( 'u3', 0, h * 2, - 1 ); + + // cross + + setPoint( 'cf1', - w, 0, 1 ); + setPoint( 'cf2', w, 0, 1 ); + setPoint( 'cf3', 0, - h, 1 ); + setPoint( 'cf4', 0, h, 1 ); + + setPoint( 'cn1', - w, 0, - 1 ); + setPoint( 'cn2', w, 0, - 1 ); + setPoint( 'cn3', 0, - h, - 1 ); + setPoint( 'cn4', 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + */ + +function BoxHelper( object, color ) { + + this.object = object; + + if ( color === undefined ) color = 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + var positions = new Float32Array( 8 * 3 ); + + var geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.matrixAutoUpdate = false; + + this.update(); + +} + +BoxHelper.prototype = Object.create( LineSegments.prototype ); +BoxHelper.prototype.constructor = BoxHelper; + +BoxHelper.prototype.update = ( function () { + + var box = new Box3(); + + return function update( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + box.setFromObject( this.object ); + + } + + if ( box.isEmpty() ) return; + + var min = box.min; + var max = box.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + var position = this.geometry.attributes.position; + var array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + }; + +} )(); + +BoxHelper.prototype.setFromObject = function ( object ) { + + this.object = object; + this.update(); + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3Helper( box, hex ) { + + this.type = 'Box3Helper'; + + this.box = box; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + + var positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; + + var geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.geometry.computeBoundingSphere(); + +} + +Box3Helper.prototype = Object.create( LineSegments.prototype ); +Box3Helper.prototype.constructor = Box3Helper; + +Box3Helper.prototype.updateMatrixWorld = function ( force ) { + + var box = this.box; + + if ( box.isEmpty() ) return; + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + + Object3D.prototype.updateMatrixWorld.call( this, force ); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function PlaneHelper( plane, size, hex ) { + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = ( size === undefined ) ? 1 : size; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + Line.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + // + + var positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + var geometry2 = new BufferGeometry(); + geometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) ); + +} + +PlaneHelper.prototype = Object.create( Line.prototype ); +PlaneHelper.prototype.constructor = PlaneHelper; + +PlaneHelper.prototype.updateMatrixWorld = function ( force ) { + + var scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.lookAt( this.plane.normal ); + + Object3D.prototype.updateMatrixWorld.call( this, force ); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * @author zz85 / http://github.com/zz85 + * @author bhouston / http://clara.io + * + * Creates an arrow for visualizing directions + * + * Parameters: + * dir - Vector3 + * origin - Vector3 + * length - Number + * color - color in hex value + * headLength - Number + * headWidth - Number + */ + +var lineGeometry; +var coneGeometry; + +function ArrowHelper( dir, origin, length, color, headLength, headWidth ) { + + // dir is assumed to be normalized + + Object3D.call( this ); + + if ( color === undefined ) color = 0xffff00; + if ( length === undefined ) length = 1; + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + if ( lineGeometry === undefined ) { + + lineGeometry = new BufferGeometry(); + lineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); + coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + +} + +ArrowHelper.prototype = Object.create( Object3D.prototype ); +ArrowHelper.prototype.constructor = ArrowHelper; + +ArrowHelper.prototype.setDirection = ( function () { + + var axis = new Vector3(); + var radians; + + return function setDirection( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + axis.set( dir.z, 0, - dir.x ).normalize(); + + radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( axis, radians ); + + } + + }; + +}() ); + +ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) { + + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + this.line.scale.set( 1, Math.max( 0, length - headLength ), 1 ); + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + +}; + +ArrowHelper.prototype.setColor = function ( color ) { + + this.line.material.color.copy( color ); + this.cone.material.color.copy( color ); + +}; + +/** + * @author sroucheray / http://sroucheray.org/ + * @author mrdoob / http://mrdoob.com/ + */ + +function AxesHelper( size ) { + + size = size || 1; + + var vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + var colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +AxesHelper.prototype = Object.create( LineSegments.prototype ); +AxesHelper.prototype.constructor = AxesHelper; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +var SceneUtils = { + + createMultiMaterialObject: function ( geometry, materials ) { + + var group = new Group(); + + for ( var i = 0, l = materials.length; i < l; i ++ ) { + + group.add( new Mesh( geometry, materials[ i ] ) ); + + } + + return group; + + }, + + detach: function ( child, parent, scene ) { + + child.applyMatrix( parent.matrixWorld ); + parent.remove( child ); + scene.add( child ); + + }, + + attach: function ( child, scene, parent ) { + + child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) ); + + scene.remove( child ); + parent.add( child ); + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Face4( a, b, c, d, normal, color, materialIndex ) { + + console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); + return new Face3( a, b, c, normal, color, materialIndex ); + +} + +var LineStrip = 0; + +var LinePieces = 1; + +function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + +} + +function MultiMaterial( materials ) { + + if ( materials === undefined ) materials = []; + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + return materials; + +} + +function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + +} + +function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + +} + +// + +function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' ); + return new BufferAttribute( array, itemSize ).setDynamic( true ); + +} + +function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + +} + +function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + +} + +function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + +} + +function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + +} + +function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + +} + +function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + +} + +function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + +} + +function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + +} + +function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + +} + +// + +Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + +}; + +// + +Object.assign( CurvePath.prototype, { + + createPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from path points (for Line or Points objects) + + var pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createSpacedPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from equidistant sampling along the path + + var pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + var geometry = new Geometry(); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + +} ); + +// + +Object.assign( Path.prototype, { + + fromPoints: function ( points ) { + + console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); + this.setFromPoints( points ); + + } + +} ); + +// + +function ClosedSplineCurve3( points ) { + + console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + this.closed = true; + +} + +ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function SplineCurve3( points ) { + + console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + +Object.assign( Spline.prototype, { + + initFromArray: function ( /* a */ ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( /* optionalTarget */ ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( /* samplingCoef */ ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + +} ); + +// + +function AxisHelper( size ) { + + console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' ); + return new AxesHelper( size ); + +} + +function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + +} + +function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + +}; + +SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + +}; + +function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +// + +Object.assign( Loader.prototype, { + + extractUrlBase: function ( url ) { + + console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); + return LoaderUtils.extractUrlBase( url ); + + } + +} ); + +function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + +} + +function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + +} + +// + +Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +Object.assign( _Math, { + + random16: function () { + + console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + + }, + + nearestPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); + return _Math.floorPowerOfTwo( value ); + + }, + + nextPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); + return _Math.ceilPowerOfTwo( value ); + + } + +} ); + +Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBuffer: function ( buffer /*, offset, length */ ) { + + console.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + } + +} ); + +Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + var v1; + + return function getPosition() { + + if ( v1 === undefined ) v1 = new Vector3(); + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return v1.setFromMatrixColumn( this, 3 ); + + }; + + }(), + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBuffer: function ( buffer /*, offset, length */ ) { + + console.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function ( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + } + +} ); + +Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + +}; + +Quaternion.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + +}; + +Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + +} ); + +Object.assign( Shape.prototype, { + + extractAllPoints: function ( divisions ) { + + console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); + return this.extractPoints( divisions ); + + }, + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + +} ); + +Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + +} ); + +Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + +} ); + +Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + +} ); + +// + +Geometry.prototype.computeTangents = function () { + + console.warn( 'THREE.Geometry: .computeTangents() has been removed.' ); + +}; + +Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + } + +} ); + +Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + +} ); + +Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + +} ); + +Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + +} ); + +Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + +} ); + +// + +PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + + "Use .setFocalLength and .filmGauge for a photographic setup." ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + +}; + +// + +Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } +} ); + +// + +Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + } + +} ); + +Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + } + +} ); + +Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + +} ); + +// + +Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + +} ); + +// + +Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + } + +} ); + +Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + +} ); + +Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + +} ); + +// + +Object.assign( WebGLRenderer.prototype, { + + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + + resetGLState: function () { + + console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); + return this.state.reset(); + + }, + + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + } + +} ); + +Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + return this.shadowMap.cullFace; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' ); + this.shadowMap.cullFace = value; + + } + } +} ); + +Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + return this.renderReverseSided ? CullFaceFront : CullFaceBack; + + }, + set: function ( cullFace ) { + + var value = ( cullFace !== CullFaceBack ); + console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." ); + this.renderReverseSided = value; + + } + } + +} ); + +// + +Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + +} ); + +// + +Object.assign( WebVRManager.prototype, { + + getStandingMatrix: function () { + + console.warn( 'THREE.WebVRManager: .getStandingMatrix() has been removed.' ); + + } + +} ); + +Object.defineProperties( WebVRManager.prototype, { + + standing: { + set: function ( /* value */ ) { + + console.warn( 'THREE.WebVRManager: .standing has been removed.' ); + + } + } + +} ); + +// + +Audio.prototype.load = function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + var scope = this; + var audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + +}; + +AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + +}; + +// + +CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + +}; + +// + +var GeometryUtils = { + + merge: function ( geometry1, geometry2, materialIndexOffset ) { + + console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); + var matrix; + + if ( geometry2.isMesh ) { + + geometry2.matrixAutoUpdate && geometry2.updateMatrix(); + + matrix = geometry2.matrix; + geometry2 = geometry2.geometry; + + } + + geometry1.merge( geometry2, matrix, materialIndexOffset ); + + }, + + center: function ( geometry ) { + + console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); + return geometry.center(); + + } + +}; + +var ImageUtils = { + + crossOrigin: undefined, + + loadTexture: function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + var loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadTextureCube: function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + var loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadCompressedTexture: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }, + + loadCompressedTextureCube: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + } + +}; + +// + +function Projector() { + + console.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' ); + + this.projectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .projectVector() is now vector.project().' ); + vector.project( camera ); + + }; + + this.unprojectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' ); + vector.unproject( camera ); + + }; + + this.pickingRay = function () { + + console.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' ); + + }; + +} + +// + +function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' ); + + this.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + this.clear = function () {}; + this.render = function () {}; + this.setClearColor = function () {}; + this.setSize = function () {}; + +} + + +var THREE = Object.freeze({ + WebGLRenderTargetCube: WebGLRenderTargetCube, + WebGLRenderTarget: WebGLRenderTarget, + WebGLRenderer: WebGLRenderer, + ShaderLib: ShaderLib, + UniformsLib: UniformsLib, + UniformsUtils: UniformsUtils, + ShaderChunk: ShaderChunk, + FogExp2: FogExp2, + Fog: Fog, + Scene: Scene, + LensFlare: LensFlare, + Sprite: Sprite, + LOD: LOD, + SkinnedMesh: SkinnedMesh, + Skeleton: Skeleton, + Bone: Bone, + Mesh: Mesh, + LineSegments: LineSegments, + LineLoop: LineLoop, + Line: Line, + Points: Points, + Group: Group, + VideoTexture: VideoTexture, + DataTexture: DataTexture, + CompressedTexture: CompressedTexture, + CubeTexture: CubeTexture, + CanvasTexture: CanvasTexture, + DepthTexture: DepthTexture, + Texture: Texture, + CompressedTextureLoader: CompressedTextureLoader, + DataTextureLoader: DataTextureLoader, + CubeTextureLoader: CubeTextureLoader, + TextureLoader: TextureLoader, + ObjectLoader: ObjectLoader, + MaterialLoader: MaterialLoader, + BufferGeometryLoader: BufferGeometryLoader, + DefaultLoadingManager: DefaultLoadingManager, + LoadingManager: LoadingManager, + JSONLoader: JSONLoader, + ImageLoader: ImageLoader, + ImageBitmapLoader: ImageBitmapLoader, + FontLoader: FontLoader, + FileLoader: FileLoader, + Loader: Loader, + LoaderUtils: LoaderUtils, + Cache: Cache, + AudioLoader: AudioLoader, + SpotLightShadow: SpotLightShadow, + SpotLight: SpotLight, + PointLight: PointLight, + RectAreaLight: RectAreaLight, + HemisphereLight: HemisphereLight, + DirectionalLightShadow: DirectionalLightShadow, + DirectionalLight: DirectionalLight, + AmbientLight: AmbientLight, + LightShadow: LightShadow, + Light: Light, + StereoCamera: StereoCamera, + PerspectiveCamera: PerspectiveCamera, + OrthographicCamera: OrthographicCamera, + CubeCamera: CubeCamera, + ArrayCamera: ArrayCamera, + Camera: Camera, + AudioListener: AudioListener, + PositionalAudio: PositionalAudio, + AudioContext: AudioContext, + AudioAnalyser: AudioAnalyser, + Audio: Audio, + VectorKeyframeTrack: VectorKeyframeTrack, + StringKeyframeTrack: StringKeyframeTrack, + QuaternionKeyframeTrack: QuaternionKeyframeTrack, + NumberKeyframeTrack: NumberKeyframeTrack, + ColorKeyframeTrack: ColorKeyframeTrack, + BooleanKeyframeTrack: BooleanKeyframeTrack, + PropertyMixer: PropertyMixer, + PropertyBinding: PropertyBinding, + KeyframeTrack: KeyframeTrack, + AnimationUtils: AnimationUtils, + AnimationObjectGroup: AnimationObjectGroup, + AnimationMixer: AnimationMixer, + AnimationClip: AnimationClip, + Uniform: Uniform, + InstancedBufferGeometry: InstancedBufferGeometry, + BufferGeometry: BufferGeometry, + Geometry: Geometry, + InterleavedBufferAttribute: InterleavedBufferAttribute, + InstancedInterleavedBuffer: InstancedInterleavedBuffer, + InterleavedBuffer: InterleavedBuffer, + InstancedBufferAttribute: InstancedBufferAttribute, + Face3: Face3, + Object3D: Object3D, + Raycaster: Raycaster, + Layers: Layers, + EventDispatcher: EventDispatcher, + Clock: Clock, + QuaternionLinearInterpolant: QuaternionLinearInterpolant, + LinearInterpolant: LinearInterpolant, + DiscreteInterpolant: DiscreteInterpolant, + CubicInterpolant: CubicInterpolant, + Interpolant: Interpolant, + Triangle: Triangle, + Math: _Math, + Spherical: Spherical, + Cylindrical: Cylindrical, + Plane: Plane, + Frustum: Frustum, + Sphere: Sphere, + Ray: Ray, + Matrix4: Matrix4, + Matrix3: Matrix3, + Box3: Box3, + Box2: Box2, + Line3: Line3, + Euler: Euler, + Vector4: Vector4, + Vector3: Vector3, + Vector2: Vector2, + Quaternion: Quaternion, + Color: Color, + ImmediateRenderObject: ImmediateRenderObject, + VertexNormalsHelper: VertexNormalsHelper, + SpotLightHelper: SpotLightHelper, + SkeletonHelper: SkeletonHelper, + PointLightHelper: PointLightHelper, + RectAreaLightHelper: RectAreaLightHelper, + HemisphereLightHelper: HemisphereLightHelper, + GridHelper: GridHelper, + PolarGridHelper: PolarGridHelper, + FaceNormalsHelper: FaceNormalsHelper, + DirectionalLightHelper: DirectionalLightHelper, + CameraHelper: CameraHelper, + BoxHelper: BoxHelper, + Box3Helper: Box3Helper, + PlaneHelper: PlaneHelper, + ArrowHelper: ArrowHelper, + AxesHelper: AxesHelper, + Shape: Shape, + Path: Path, + ShapePath: ShapePath, + Font: Font, + CurvePath: CurvePath, + Curve: Curve, + ShapeUtils: ShapeUtils, + SceneUtils: SceneUtils, + WebGLUtils: WebGLUtils, + WireframeGeometry: WireframeGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + EdgesGeometry: EdgesGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry, + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material, + Float64BufferAttribute: Float64BufferAttribute, + Float32BufferAttribute: Float32BufferAttribute, + Uint32BufferAttribute: Uint32BufferAttribute, + Int32BufferAttribute: Int32BufferAttribute, + Uint16BufferAttribute: Uint16BufferAttribute, + Int16BufferAttribute: Int16BufferAttribute, + Uint8ClampedBufferAttribute: Uint8ClampedBufferAttribute, + Uint8BufferAttribute: Uint8BufferAttribute, + Int8BufferAttribute: Int8BufferAttribute, + BufferAttribute: BufferAttribute, + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve, + REVISION: REVISION, + MOUSE: MOUSE, + CullFaceNone: CullFaceNone, + CullFaceBack: CullFaceBack, + CullFaceFront: CullFaceFront, + CullFaceFrontBack: CullFaceFrontBack, + FrontFaceDirectionCW: FrontFaceDirectionCW, + FrontFaceDirectionCCW: FrontFaceDirectionCCW, + BasicShadowMap: BasicShadowMap, + PCFShadowMap: PCFShadowMap, + PCFSoftShadowMap: PCFSoftShadowMap, + FrontSide: FrontSide, + BackSide: BackSide, + DoubleSide: DoubleSide, + FlatShading: FlatShading, + SmoothShading: SmoothShading, + NoColors: NoColors, + FaceColors: FaceColors, + VertexColors: VertexColors, + NoBlending: NoBlending, + NormalBlending: NormalBlending, + AdditiveBlending: AdditiveBlending, + SubtractiveBlending: SubtractiveBlending, + MultiplyBlending: MultiplyBlending, + CustomBlending: CustomBlending, + AddEquation: AddEquation, + SubtractEquation: SubtractEquation, + ReverseSubtractEquation: ReverseSubtractEquation, + MinEquation: MinEquation, + MaxEquation: MaxEquation, + ZeroFactor: ZeroFactor, + OneFactor: OneFactor, + SrcColorFactor: SrcColorFactor, + OneMinusSrcColorFactor: OneMinusSrcColorFactor, + SrcAlphaFactor: SrcAlphaFactor, + OneMinusSrcAlphaFactor: OneMinusSrcAlphaFactor, + DstAlphaFactor: DstAlphaFactor, + OneMinusDstAlphaFactor: OneMinusDstAlphaFactor, + DstColorFactor: DstColorFactor, + OneMinusDstColorFactor: OneMinusDstColorFactor, + SrcAlphaSaturateFactor: SrcAlphaSaturateFactor, + NeverDepth: NeverDepth, + AlwaysDepth: AlwaysDepth, + LessDepth: LessDepth, + LessEqualDepth: LessEqualDepth, + EqualDepth: EqualDepth, + GreaterEqualDepth: GreaterEqualDepth, + GreaterDepth: GreaterDepth, + NotEqualDepth: NotEqualDepth, + MultiplyOperation: MultiplyOperation, + MixOperation: MixOperation, + AddOperation: AddOperation, + NoToneMapping: NoToneMapping, + LinearToneMapping: LinearToneMapping, + ReinhardToneMapping: ReinhardToneMapping, + Uncharted2ToneMapping: Uncharted2ToneMapping, + CineonToneMapping: CineonToneMapping, + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + SphericalReflectionMapping: SphericalReflectionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping, + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping, + NearestFilter: NearestFilter, + NearestMipMapNearestFilter: NearestMipMapNearestFilter, + NearestMipMapLinearFilter: NearestMipMapLinearFilter, + LinearFilter: LinearFilter, + LinearMipMapNearestFilter: LinearMipMapNearestFilter, + LinearMipMapLinearFilter: LinearMipMapLinearFilter, + UnsignedByteType: UnsignedByteType, + ByteType: ByteType, + ShortType: ShortType, + UnsignedShortType: UnsignedShortType, + IntType: IntType, + UnsignedIntType: UnsignedIntType, + FloatType: FloatType, + HalfFloatType: HalfFloatType, + UnsignedShort4444Type: UnsignedShort4444Type, + UnsignedShort5551Type: UnsignedShort5551Type, + UnsignedShort565Type: UnsignedShort565Type, + UnsignedInt248Type: UnsignedInt248Type, + AlphaFormat: AlphaFormat, + RGBFormat: RGBFormat, + RGBAFormat: RGBAFormat, + LuminanceFormat: LuminanceFormat, + LuminanceAlphaFormat: LuminanceAlphaFormat, + RGBEFormat: RGBEFormat, + DepthFormat: DepthFormat, + DepthStencilFormat: DepthStencilFormat, + RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format, + RGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format, + RGBA_S3TC_DXT3_Format: RGBA_S3TC_DXT3_Format, + RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format, + RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format, + RGB_PVRTC_2BPPV1_Format: RGB_PVRTC_2BPPV1_Format, + RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format, + RGBA_PVRTC_2BPPV1_Format: RGBA_PVRTC_2BPPV1_Format, + RGB_ETC1_Format: RGB_ETC1_Format, + LoopOnce: LoopOnce, + LoopRepeat: LoopRepeat, + LoopPingPong: LoopPingPong, + InterpolateDiscrete: InterpolateDiscrete, + InterpolateLinear: InterpolateLinear, + InterpolateSmooth: InterpolateSmooth, + ZeroCurvatureEnding: ZeroCurvatureEnding, + ZeroSlopeEnding: ZeroSlopeEnding, + WrapAroundEnding: WrapAroundEnding, + TrianglesDrawMode: TrianglesDrawMode, + TriangleStripDrawMode: TriangleStripDrawMode, + TriangleFanDrawMode: TriangleFanDrawMode, + LinearEncoding: LinearEncoding, + sRGBEncoding: sRGBEncoding, + GammaEncoding: GammaEncoding, + RGBEEncoding: RGBEEncoding, + LogLuvEncoding: LogLuvEncoding, + RGBM7Encoding: RGBM7Encoding, + RGBM16Encoding: RGBM16Encoding, + RGBDEncoding: RGBDEncoding, + BasicDepthPacking: BasicDepthPacking, + RGBADepthPacking: RGBADepthPacking, + CubeGeometry: BoxGeometry, + Face4: Face4, + LineStrip: LineStrip, + LinePieces: LinePieces, + MeshFaceMaterial: MeshFaceMaterial, + MultiMaterial: MultiMaterial, + PointCloud: PointCloud, + Particle: Particle, + ParticleSystem: ParticleSystem, + PointCloudMaterial: PointCloudMaterial, + ParticleBasicMaterial: ParticleBasicMaterial, + ParticleSystemMaterial: ParticleSystemMaterial, + Vertex: Vertex, + DynamicBufferAttribute: DynamicBufferAttribute, + Int8Attribute: Int8Attribute, + Uint8Attribute: Uint8Attribute, + Uint8ClampedAttribute: Uint8ClampedAttribute, + Int16Attribute: Int16Attribute, + Uint16Attribute: Uint16Attribute, + Int32Attribute: Int32Attribute, + Uint32Attribute: Uint32Attribute, + Float32Attribute: Float32Attribute, + Float64Attribute: Float64Attribute, + ClosedSplineCurve3: ClosedSplineCurve3, + SplineCurve3: SplineCurve3, + Spline: Spline, + AxisHelper: AxisHelper, + BoundingBoxHelper: BoundingBoxHelper, + EdgesHelper: EdgesHelper, + WireframeHelper: WireframeHelper, + XHRLoader: XHRLoader, + BinaryTextureLoader: BinaryTextureLoader, + GeometryUtils: GeometryUtils, + ImageUtils: ImageUtils, + Projector: Projector, + CanvasRenderer: CanvasRenderer +}); + +var THREE$1 = Object.assign({}, THREE) + // Marker types -ROS3D.MARKER_ARROW = 0; -ROS3D.MARKER_CUBE = 1; -ROS3D.MARKER_SPHERE = 2; -ROS3D.MARKER_CYLINDER = 3; -ROS3D.MARKER_LINE_STRIP = 4; -ROS3D.MARKER_LINE_LIST = 5; -ROS3D.MARKER_CUBE_LIST = 6; -ROS3D.MARKER_SPHERE_LIST = 7; -ROS3D.MARKER_POINTS = 8; -ROS3D.MARKER_TEXT_VIEW_FACING = 9; -ROS3D.MARKER_MESH_RESOURCE = 10; -ROS3D.MARKER_TRIANGLE_LIST = 11; +var MARKER_ARROW = 0; +var MARKER_CUBE = 1; +var MARKER_SPHERE = 2; +var MARKER_CYLINDER = 3; +var MARKER_LINE_STRIP = 4; +var MARKER_LINE_LIST = 5; +var MARKER_CUBE_LIST = 6; +var MARKER_SPHERE_LIST = 7; +var MARKER_POINTS = 8; +var MARKER_TEXT_VIEW_FACING = 9; +var MARKER_MESH_RESOURCE = 10; +var MARKER_TRIANGLE_LIST = 11; // Interactive marker feedback types -ROS3D.INTERACTIVE_MARKER_KEEP_ALIVE = 0; -ROS3D.INTERACTIVE_MARKER_POSE_UPDATE = 1; -ROS3D.INTERACTIVE_MARKER_MENU_SELECT = 2; -ROS3D.INTERACTIVE_MARKER_BUTTON_CLICK = 3; -ROS3D.INTERACTIVE_MARKER_MOUSE_DOWN = 4; -ROS3D.INTERACTIVE_MARKER_MOUSE_UP = 5; +var INTERACTIVE_MARKER_KEEP_ALIVE = 0; +var INTERACTIVE_MARKER_POSE_UPDATE = 1; +var INTERACTIVE_MARKER_MENU_SELECT = 2; +var INTERACTIVE_MARKER_BUTTON_CLICK = 3; +var INTERACTIVE_MARKER_MOUSE_DOWN = 4; +var INTERACTIVE_MARKER_MOUSE_UP = 5; // Interactive marker control types -ROS3D.INTERACTIVE_MARKER_NONE = 0; -ROS3D.INTERACTIVE_MARKER_MENU = 1; -ROS3D.INTERACTIVE_MARKER_BUTTON = 2; -ROS3D.INTERACTIVE_MARKER_MOVE_AXIS = 3; -ROS3D.INTERACTIVE_MARKER_MOVE_PLANE = 4; -ROS3D.INTERACTIVE_MARKER_ROTATE_AXIS = 5; -ROS3D.INTERACTIVE_MARKER_MOVE_ROTATE = 6; +var INTERACTIVE_MARKER_NONE = 0; +var INTERACTIVE_MARKER_MENU = 1; +var INTERACTIVE_MARKER_BUTTON = 2; +var INTERACTIVE_MARKER_MOVE_AXIS = 3; +var INTERACTIVE_MARKER_MOVE_PLANE = 4; +var INTERACTIVE_MARKER_ROTATE_AXIS = 5; +var INTERACTIVE_MARKER_MOVE_ROTATE = 6; +var INTERACTIVE_MARKER_MOVE_3D = 7; +var INTERACTIVE_MARKER_ROTATE_3D = 8; +var INTERACTIVE_MARKER_MOVE_ROTATE_3D = 9; // Interactive marker rotation behavior -ROS3D.INTERACTIVE_MARKER_INHERIT = 0; -ROS3D.INTERACTIVE_MARKER_FIXED = 1; -ROS3D.INTERACTIVE_MARKER_VIEW_FACING = 2; - -// Collada loader types -ROS3D.COLLADA_LOADER = 1; -ROS3D.COLLADA_LOADER_2 = 2; - +var INTERACTIVE_MARKER_INHERIT = 0; +var INTERACTIVE_MARKER_FIXED = 1; +var INTERACTIVE_MARKER_VIEW_FACING = 2; /** * Create a THREE material based on the given RGBA values. @@ -57,25 +46028,25 @@ ROS3D.COLLADA_LOADER_2 = 2; * @param a - the alpha value * @returns the THREE material */ -ROS3D.makeColorMaterial = function(r, g, b, a) { - var color = new THREE.Color(); +var makeColorMaterial = function(r, g, b, a) { + var color = new THREE$1.Color(); color.setRGB(r, g, b); if (a <= 0.99) { - return new THREE.MeshBasicMaterial({ + return new THREE$1.MeshBasicMaterial({ color : color.getHex(), opacity : a + 0.1, transparent : true, depthWrite : true, - blendSrc : THREE.SrcAlphaFactor, - blendDst : THREE.OneMinusSrcAlphaFactor, - blendEquation : THREE.ReverseSubtractEquation, - blending : THREE.NormalBlending + blendSrc : THREE$1.SrcAlphaFactor, + blendDst : THREE$1.OneMinusSrcAlphaFactor, + blendEquation : THREE$1.ReverseSubtractEquation, + blending : THREE$1.NormalBlending }); } else { - return new THREE.MeshPhongMaterial({ + return new THREE$1.MeshPhongMaterial({ color : color.getHex(), opacity : a, - blending : THREE.NormalBlending + blending : THREE$1.NormalBlending }); } }; @@ -88,9 +46059,9 @@ ROS3D.makeColorMaterial = function(r, g, b, a) { * @param planeNormal - the normal of the plane * @returns the intersection point */ -ROS3D.intersectPlane = function(mouseRay, planeOrigin, planeNormal) { - var vector = new THREE.Vector3(); - var intersectPoint = new THREE.Vector3(); +var intersectPlane = function(mouseRay, planeOrigin, planeNormal) { + var vector = new THREE$1.Vector3(); + var intersectPoint = new THREE$1.Vector3(); vector.subVectors(planeOrigin, mouseRay.origin); var dot = mouseRay.direction.dot(planeNormal); @@ -114,8 +46085,8 @@ ROS3D.intersectPlane = function(mouseRay, planeOrigin, planeNormal) { * @param mouseRay - the mouse ray * @param the closest point between the two rays */ -ROS3D.findClosestPoint = function(targetRay, mouseRay) { - var v13 = new THREE.Vector3(); +var findClosestPoint = function(targetRay, mouseRay) { + var v13 = new THREE$1.Vector3(); v13.subVectors(targetRay.origin, mouseRay.origin); var v43 = mouseRay.direction.clone(); var v21 = targetRay.direction.clone(); @@ -144,1010 +46115,5158 @@ ROS3D.findClosestPoint = function(targetRay, mouseRay) { * @param mousePos - the mouse position * @returns the closest axis point */ -ROS3D.closestAxisPoint = function(axisRay, camera, mousePos) { - var projector = new THREE.Projector(); - +var closestAxisPoint = function(axisRay, camera, mousePos) { // project axis onto screen var o = axisRay.origin.clone(); - projector.projectVector(o, camera); + o.project(camera); var o2 = axisRay.direction.clone().add(axisRay.origin); - projector.projectVector(o2, camera); + o2.project(camera); // d is the axis vector in screen space (d = o2-o) var d = o2.clone().sub(o); // t is the 2d ray param of perpendicular projection of mousePos onto o - var tmp = new THREE.Vector2(); + var tmp = new THREE$1.Vector2(); // (t = (mousePos - o) * d / (d*d)) var t = tmp.subVectors(mousePos, o).dot(d) / d.dot(d); // mp is the final 2d-projected mouse pos (mp = o + d*t) - var mp = new THREE.Vector2(); + var mp = new THREE$1.Vector2(); mp.addVectors(o, d.clone().multiplyScalar(t)); // go back to 3d by shooting a ray - var vector = new THREE.Vector3(mp.x, mp.y, 0.5); - projector.unprojectVector(vector, camera); - var mpRay = new THREE.Ray(camera.position, vector.sub(camera.position).normalize()); + var vector = new THREE$1.Vector3(mp.x, mp.y, 0.5); + vector.unproject(camera); + var mpRay = new THREE$1.Ray(camera.position, vector.sub(camera.position).normalize()); - return ROS3D.findClosestPoint(axisRay, mpRay); + return findClosestPoint(axisRay, mpRay); }; /** * @author Julius Kammerl - jkammerl@willowgarage.com */ -/** - * The DepthCloud object. - * - * @constructor - * @param options - object with following keys: - * - * * url - the URL of the stream - * * f (optional) - the camera's focal length (defaults to standard Kinect calibration) - * * pointSize (optional) - point size (pixels) for rendered point cloud - * * width (optional) - width of the video stream - * * height (optional) - height of the video stream - * * whiteness (optional) - blends rgb values to white (0..100) - * * varianceThreshold (optional) - threshold for variance filter, used for compression artifact removal - */ -ROS3D.DepthCloud = function(options) { - options = options || {}; - THREE.Object3D.call(this); - - this.url = options.url; - this.f = options.f || 526; - this.pointSize = options.pointSize || 3; - this.width = options.width || 1024; - this.height = options.height || 1024; - this.whiteness = options.whiteness || 0; - this.varianceThreshold = options.varianceThreshold || 0.000016667; - - var metaLoaded = false; - this.video = document.createElement('video'); - - this.video.addEventListener('loadedmetadata', this.metaLoaded.bind(this), false); - - this.video.loop = true; - this.video.src = this.url; - this.video.crossOrigin = 'Anonymous'; - this.video.setAttribute('crossorigin', 'Anonymous'); - - // define custom shaders - this.vertex_shader = [ - 'uniform sampler2D map;', - '', - 'uniform float width;', - 'uniform float height;', - 'uniform float nearClipping, farClipping;', - '', - 'uniform float pointSize;', - 'uniform float zOffset;', - '', - 'uniform float focallength;', - '', - 'varying vec2 vUvP;', - 'varying vec2 colorP;', - '', - 'varying float depthVariance;', - 'varying float maskVal;', - '', - 'float sampleDepth(vec2 pos)', - ' {', - ' float depth;', - ' ', - ' vec2 vUv = vec2( pos.x / (width*2.0), pos.y / (height*2.0)+0.5 );', - ' vec2 vUv2 = vec2( pos.x / (width*2.0)+0.5, pos.y / (height*2.0)+0.5 );', - ' ', - ' vec4 depthColor = texture2D( map, vUv );', - ' ', - ' depth = ( depthColor.r + depthColor.g + depthColor.b ) / 3.0 ;', - ' ', - ' if (depth>0.99)', - ' {', - ' vec4 depthColor2 = texture2D( map, vUv2 );', - ' float depth2 = ( depthColor2.r + depthColor2.g + depthColor2.b ) / 3.0 ;', - ' depth = 0.99+depth2;', - ' }', - ' ', - ' return depth;', - ' }', - '', - 'float median(float a, float b, float c)', - ' {', - ' float r=a;', - ' ', - ' if ( (a0.5) || (vUvP.y<0.5) || (vUvP.y>0.0))', - ' {', - ' vec2 smp = decodeDepth(vec2(position.x, position.y));', - ' float depth = smp.x;', - ' depthVariance = smp.y;', - ' ', - ' float z = -depth;', - ' ', - ' pos = vec4(', - ' ( position.x / width - 0.5 ) * z * (1000.0/focallength) * -1.0,', - ' ( position.y / height - 0.5 ) * z * (1000.0/focallength),', - ' (- z + zOffset / 1000.0) * 2.0,', - ' 1.0);', - ' ', - ' vec2 maskP = vec2( position.x / (width*2.0), position.y / (height*2.0) );', - ' vec4 maskColor = texture2D( map, maskP );', - ' maskVal = ( maskColor.r + maskColor.g + maskColor.b ) / 3.0 ;', - ' }', - ' ', - ' gl_PointSize = pointSize;', - ' gl_Position = projectionMatrix * modelViewMatrix * pos;', - ' ', - '}' - ].join('\n'); - - this.fragment_shader = [ - 'uniform sampler2D map;', - 'uniform float varianceThreshold;', - 'uniform float whiteness;', - '', - 'varying vec2 vUvP;', - 'varying vec2 colorP;', - '', - 'varying float depthVariance;', - 'varying float maskVal;', - '', - '', - 'void main() {', - ' ', - ' vec4 color;', - ' ', - ' if ( (depthVariance>varianceThreshold) || (maskVal>0.5) ||(vUvP.x<0.0)|| (vUvP.x>0.5) || (vUvP.y<0.5) || (vUvP.y>1.0))', - ' { ', - ' discard;', - ' }', - ' else ', - ' {', - ' color = texture2D( map, colorP );', - ' ', - ' float fader = whiteness /100.0;', - ' ', - ' color.r = color.r * (1.0-fader)+ fader;', - ' ', - ' color.g = color.g * (1.0-fader)+ fader;', - ' ', - ' color.b = color.b * (1.0-fader)+ fader;', - ' ', - ' color.a = 1.0;//smoothstep( 20000.0, -20000.0, gl_FragCoord.z / gl_FragCoord.w );', - ' }', - ' ', - ' gl_FragColor = vec4( color.r, color.g, color.b, color.a );', - ' ', - '}' - ].join('\n'); -}; -ROS3D.DepthCloud.prototype.__proto__ = THREE.Object3D.prototype; - -/** - * Callback called when video metadata is ready - */ -ROS3D.DepthCloud.prototype.metaLoaded = function() { - this.metaLoaded = true; - this.initStreamer(); -}; - -/** - * Callback called when video metadata is ready - */ -ROS3D.DepthCloud.prototype.initStreamer = function() { - - if (this.metaLoaded) { - this.texture = new THREE.Texture(this.video); - this.geometry = new THREE.Geometry(); - - for (var i = 0, l = this.width * this.height; i < l; i++) { - - var vertex = new THREE.Vector3(); - vertex.x = (i % this.width); - vertex.y = Math.floor(i / this.width); - - this.geometry.vertices.push(vertex); - } - - this.material = new THREE.ShaderMaterial({ - uniforms : { - 'map' : { - type : 't', - value : this.texture - }, - 'width' : { - type : 'f', - value : this.width - }, - 'height' : { - type : 'f', - value : this.height - }, - 'focallength' : { - type : 'f', - value : this.f - }, - 'pointSize' : { - type : 'f', - value : this.pointSize - }, - 'zOffset' : { - type : 'f', - value : 0 - }, - 'whiteness' : { - type : 'f', - value : this.whiteness - }, - 'varianceThreshold' : { - type : 'f', - value : this.varianceThreshold - } - }, - vertexShader : this.vertex_shader, - fragmentShader : this.fragment_shader - }); - - this.mesh = new THREE.ParticleSystem(this.geometry, this.material); - this.mesh.position.x = 0; - this.mesh.position.y = 0; - this.add(this.mesh); - - var that = this; - - setInterval(function() { - if (that.video.readyState === that.video.HAVE_ENOUGH_DATA) { - that.texture.needsUpdate = true; - } - }, 1000 / 30); - } -}; - -/** - * Start video playback - */ -ROS3D.DepthCloud.prototype.startStream = function() { - this.video.play(); -}; - -/** - * Stop video playback - */ -ROS3D.DepthCloud.prototype.stopStream = function() { - this.video.pause(); -}; - -/** - * @author David Gossow - dgossow@willowgarage.com - */ - -/** - * The main interactive marker object. - * - * @constructor - * @param options - object with following keys: - * - * * handle - the ROS3D.InteractiveMarkerHandle for this marker - * * camera - the main camera associated with the viewer for this marker - * * path (optional) - the base path to any meshes that will be loaded - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.InteractiveMarker = function(options) { - THREE.Object3D.call(this); - THREE.EventDispatcher.call(this); - - var that = this; - options = options || {}; - var handle = options.handle; - this.name = handle.name; - var camera = options.camera; - var path = options.path || '/'; - var loader = options.loader || ROS3D.COLLADA_LOADER_2; - this.dragging = false; - - // set the initial pose - this.onServerSetPose({ - pose : handle.pose - }); - - // information on where the drag started - this.dragStart = { - position : new THREE.Vector3(), - orientation : new THREE.Quaternion(), - positionWorld : new THREE.Vector3(), - orientationWorld : new THREE.Quaternion(), - event3d : {} - }; - - // add each control message - handle.controls.forEach(function(controlMessage) { - that.add(new ROS3D.InteractiveMarkerControl({ - parent : that, - handle : handle, - message : controlMessage, - camera : camera, - path : path, - loader : loader - })); - }); - - // check for any menus - if (handle.menuEntries.length > 0) { - this.menu = new ROS3D.InteractiveMarkerMenu({ - menuEntries : handle.menuEntries, - menuFontSize : handle.menuFontSize - }); - - // forward menu select events - this.menu.addEventListener('menu-select', function(event) { - that.dispatchEvent(event); - }); - } -}; -ROS3D.InteractiveMarker.prototype.__proto__ = THREE.Object3D.prototype; - -/** - * Show the interactive marker menu associated with this marker. - * - * @param control - the control to use - * @param event - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.showMenu = function(control, event) { - if (this.menu) { - this.menu.show(control, event); - } -}; - -/** - * Move the axis based on the given event information. - * - * @param control - the control to use - * @param origAxis - the origin of the axis - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.moveAxis = function(control, origAxis, event3d) { - if (this.dragging) { - var currentControlOri = control.currentControlOri; - var axis = origAxis.clone().applyQuaternion(currentControlOri); - // get move axis in world coords - var originWorld = this.dragStart.event3d.intersection.point; - var axisWorld = axis.clone().applyQuaternion(this.dragStart.orientationWorld.clone()); - - var axisRay = new THREE.Ray(originWorld, axisWorld); - - // find closest point to mouse on axis - var t = ROS3D.closestAxisPoint(axisRay, event3d.camera, event3d.mousePos); - - // offset from drag start position - var p = new THREE.Vector3(); - p.addVectors(this.dragStart.position, axis.clone().applyQuaternion(this.dragStart.orientation) - .multiplyScalar(t)); - this.setPosition(control, p); - - event3d.stopPropagation(); - } -}; - -/** - * Move with respect to the plane based on the contorl and event. - * - * @param control - the control to use - * @param origNormal - the normal of the origin - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.movePlane = function(control, origNormal, event3d) { - if (this.dragging) { - var currentControlOri = control.currentControlOri; - var normal = origNormal.clone().applyQuaternion(currentControlOri); - // get plane params in world coords - var originWorld = this.dragStart.event3d.intersection.point; - var normalWorld = normal.clone().applyQuaternion(this.dragStart.orientationWorld); - - // intersect mouse ray with plane - var intersection = ROS3D.intersectPlane(event3d.mouseRay, originWorld, normalWorld); - - // offset from drag start position - var p = new THREE.Vector3(); - p.subVectors(intersection, originWorld); - p.add(this.dragStart.positionWorld); - this.setPosition(control, p); - event3d.stopPropagation(); - } -}; - -/** - * Rotate based on the control and event given. - * - * @param control - the control to use - * @param origOrientation - the orientation of the origin - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.rotateAxis = function(control, origOrientation, event3d) { - if (this.dragging) { - control.updateMatrixWorld(); - - var currentControlOri = control.currentControlOri; - var orientation = currentControlOri.clone().multiply(origOrientation.clone()); - - var normal = (new THREE.Vector3(1, 0, 0)).applyQuaternion(orientation); - - // get plane params in world coords - var originWorld = this.dragStart.event3d.intersection.point; - var normalWorld = normal.applyQuaternion(this.dragStart.orientationWorld); - - // intersect mouse ray with plane - var intersection = ROS3D.intersectPlane(event3d.mouseRay, originWorld, normalWorld); - - // offset local origin to lie on intersection plane - var normalRay = new THREE.Ray(this.dragStart.positionWorld, normalWorld); - var rotOrigin = ROS3D.intersectPlane(normalRay, originWorld, normalWorld); - - // rotates from world to plane coords - var orientationWorld = this.dragStart.orientationWorld.clone().multiply(orientation); - var orientationWorldInv = orientationWorld.clone().inverse(); - - // rotate original and current intersection into local coords - intersection.sub(rotOrigin); - intersection.applyQuaternion(orientationWorldInv); - - var origIntersection = this.dragStart.event3d.intersection.point.clone(); - origIntersection.sub(rotOrigin); - origIntersection.applyQuaternion(orientationWorldInv); - - // compute relative 2d angle - var a1 = Math.atan2(intersection.y, intersection.z); - var a2 = Math.atan2(origIntersection.y, origIntersection.z); - var a = a2 - a1; - - var rot = new THREE.Quaternion(); - rot.setFromAxisAngle(normal, a); - - // rotate - this.setOrientation(control, rot.multiply(this.dragStart.orientationWorld)); - - // offset from drag start position - event3d.stopPropagation(); - } -}; - -/** - * Dispatch the given event type. - * - * @param type - the type of event - * @param control - the control to use - */ -ROS3D.InteractiveMarker.prototype.feedbackEvent = function(type, control) { - this.dispatchEvent({ - type : type, - position : this.position.clone(), - orientation : this.quaternion.clone(), - controlName : control.name - }); -}; - -/** - * Start a drag action. - * - * @param control - the control to use - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.startDrag = function(control, event3d) { - if (event3d.domEvent.button === 0) { - event3d.stopPropagation(); - this.dragging = true; - this.updateMatrixWorld(true); - var scale = new THREE.Vector3(); - this.matrixWorld - .decompose(this.dragStart.positionWorld, this.dragStart.orientationWorld, scale); - this.dragStart.position = this.position.clone(); - this.dragStart.orientation = this.quaternion.clone(); - this.dragStart.event3d = event3d; - - this.feedbackEvent('user-mousedown', control); - } -}; - -/** - * Stop a drag action. - * - * @param control - the control to use - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.stopDrag = function(control, event3d) { - if (event3d.domEvent.button === 0) { - event3d.stopPropagation(); - this.dragging = false; - this.dragStart.event3d = {}; - this.onServerSetPose(this.bufferedPoseEvent); - this.bufferedPoseEvent = undefined; - - this.feedbackEvent('user-mouseup', control); - } -}; - -/** - * Handle a button click. - * - * @param control - the control to use - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.buttonClick = function(control, event3d) { - event3d.stopPropagation(); - this.feedbackEvent('user-button-click', control); -}; - -/** - * Handle a user pose change for the position. - * - * @param control - the control to use - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.setPosition = function(control, position) { - this.position = position; - this.feedbackEvent('user-pose-change', control); -}; - -/** - * Handle a user pose change for the orientation. - * - * @param control - the control to use - * @param event3d - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.setOrientation = function(control, orientation) { - orientation.normalize(); - this.quaternion = orientation; - this.feedbackEvent('user-pose-change', control); -}; - -/** - * Update the marker based when the pose is set from the server. - * - * @param event - the event that caused this - */ -ROS3D.InteractiveMarker.prototype.onServerSetPose = function(event) { - if (event !== undefined) { - // don't update while dragging - if (this.dragging) { - this.bufferedPoseEvent = event; - } else { - var pose = event.pose; - - this.position.x = pose.position.x; - this.position.y = pose.position.y; - this.position.z = pose.position.z; - - this.quaternion = new THREE.Quaternion(pose.orientation.x, pose.orientation.y, - pose.orientation.z, pose.orientation.w); - - this.updateMatrixWorld(true); - } - } -}; - -/** - * Free memory of elements in this marker. - */ -ROS3D.InteractiveMarker.prototype.dispose = function() { - var that = this; - this.children.forEach(function(intMarkerControl) { - intMarkerControl.children.forEach(function(marker) { - marker.dispose(); - intMarkerControl.remove(marker); - }); - that.remove(intMarkerControl); - }); -}; - -THREE.EventDispatcher.prototype.apply( ROS3D.InteractiveMarker.prototype ); - -/** - * @author David Gossow - dgossow@willowgarage.com - */ - -/** - * A client for an interactive marker topic. - * - * @constructor - * @param options - object with following keys: - * - * * ros - a handle to the ROS connection - * * tfClient - a handle to the TF client - * * topic (optional) - the topic to subscribe to, like '/basic_controls' - * * path (optional) - the base path to any meshes that will be loaded - * * camera - the main camera associated with the viewer for this marker client - * * rootObject (optional) - the root THREE 3D object to render to - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - * * menuFontSize (optional) - the menu font size - */ -ROS3D.InteractiveMarkerClient = function(options) { - var that = this; - options = options || {}; - this.ros = options.ros; - this.tfClient = options.tfClient; - this.topic = options.topic; - this.path = options.path || '/'; - this.camera = options.camera; - this.rootObject = options.rootObject || new THREE.Object3D(); - this.loader = options.loader || ROS3D.COLLADA_LOADER_2; - this.menuFontSize = options.menuFontSize || '0.8em'; - - this.interactiveMarkers = {}; - this.updateTopic = null; - this.feedbackTopic = null; - - // check for an initial topic - if (this.topic) { - this.subscribe(this.topic); - } -}; - -/** - * Subscribe to the given interactive marker topic. This will unsubscribe from any current topics. - * - * @param topic - the topic to subscribe to, like '/basic_controls' - */ -ROS3D.InteractiveMarkerClient.prototype.subscribe = function(topic) { - // unsubscribe to the other topics - this.unsubscribe(); - - this.updateTopic = new ROSLIB.Topic({ - ros : this.ros, - name : topic + '/tunneled/update', - messageType : 'visualization_msgs/InteractiveMarkerUpdate', - compression : 'png' - }); - this.updateTopic.subscribe(this.processUpdate.bind(this)); - - this.feedbackTopic = new ROSLIB.Topic({ - ros : this.ros, - name : topic + '/feedback', - messageType : 'visualization_msgs/InteractiveMarkerFeedback', - compression : 'png' - }); - this.feedbackTopic.advertise(); - - this.initService = new ROSLIB.Service({ - ros : this.ros, - name : topic + '/tunneled/get_init', - serviceType : 'demo_interactive_markers/GetInit' - }); - var request = new ROSLIB.ServiceRequest({}); - this.initService.callService(request, this.processInit.bind(this)); -}; - -/** - * Unsubscribe from the current interactive marker topic. - */ -ROS3D.InteractiveMarkerClient.prototype.unsubscribe = function() { - if (this.updateTopic) { - this.updateTopic.unsubscribe(); - } - if (this.feedbackTopic) { - this.feedbackTopic.unadvertise(); - } - // erase all markers - for (var intMarkerName in this.interactiveMarkers) { - this.eraseIntMarker(intMarkerName); - } - this.interactiveMarkers = {}; -}; - -/** - * Process the given interactive marker initialization message. - * - * @param initMessage - the interactive marker initialization message to process - */ -ROS3D.InteractiveMarkerClient.prototype.processInit = function(initMessage) { - var message = initMessage.msg; - - // erase any old markers - message.erases = []; - for (var intMarkerName in this.interactiveMarkers) { - message.erases.push(intMarkerName); - } - message.poses = []; - - // treat it as an update - this.processUpdate(message); -}; - -/** - * Process the given interactive marker update message. - * - * @param initMessage - the interactive marker update message to process - */ -ROS3D.InteractiveMarkerClient.prototype.processUpdate = function(message) { - var that = this; - - // erase any markers - message.erases.forEach(function(name) { - that.eraseIntMarker(name); - }); - - // updates marker poses - message.poses.forEach(function(poseMessage) { - var marker = that.interactiveMarkers[poseMessage.name]; - if (marker) { - marker.setPoseFromServer(poseMessage.pose); - } - }); - - // add new markers - message.markers.forEach(function(msg) { - // get rid of anything with the same name - var oldhandle = that.interactiveMarkers[msg.name]; - if (oldhandle) { - that.eraseIntMarker(oldhandle.name); - } - - // create the handle - var handle = new ROS3D.InteractiveMarkerHandle({ - message : msg, - feedbackTopic : that.feedbackTopic, - tfClient : that.tfClient, - menuFontSize : that.menuFontSize - }); - that.interactiveMarkers[msg.name] = handle; - - // create the actual marker - var intMarker = new ROS3D.InteractiveMarker({ - handle : handle, - camera : that.camera, - path : that.path, - loader : that.loader - }); - // add it to the scene - intMarker.name = msg.name; - that.rootObject.add(intMarker); - - // listen for any pose updates from the server - handle.on('pose', function(pose) { - intMarker.onServerSetPose({ - pose : pose - }); - }); - - intMarker.addEventListener('user-pose-change', handle.setPoseFromClient.bind(handle)); - intMarker.addEventListener('user-mousedown', handle.onMouseDown.bind(handle)); - intMarker.addEventListener('user-mouseup', handle.onMouseUp.bind(handle)); - intMarker.addEventListener('user-button-click', handle.onButtonClick.bind(handle)); - intMarker.addEventListener('menu-select', handle.onMenuSelect.bind(handle)); - - // now list for any TF changes - handle.subscribeTf(); - }); -}; - -/** - * Erase the interactive marker with the given name. - * - * @param intMarkerName - the interactive marker name to delete - */ -ROS3D.InteractiveMarkerClient.prototype.eraseIntMarker = function(intMarkerName) { - if (this.interactiveMarkers[intMarkerName]) { - // remove the object - var targetIntMarker = this.rootObject.getObjectByName(intMarkerName); - this.rootObject.remove(targetIntMarker); - delete this.interactiveMarkers[intMarkerName]; - targetIntMarker.dispose(); - } -}; - -/** - * @author David Gossow - dgossow@willowgarage.com - */ - -/** - * The main marker control object for an interactive marker. - * - * @constructor - * @param options - object with following keys: - * - * * parent - the parent of this control - * * message - the interactive marker control message - * * camera - the main camera associated with the viewer for this marker client - * * path (optional) - the base path to any meshes that will be loaded - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.InteractiveMarkerControl = function(options) { - var that = this; - THREE.Object3D.call(this); - - options = options || {}; - this.parent = options.parent; - var handle = options.handle; - var message = options.message; - this.name = message.name; - this.camera = options.camera; - this.path = options.path || '/'; - this.loader = options.loader || ROS3D.COLLADA_LOADER_2; - this.dragging = false; - this.startMousePos = new THREE.Vector2(); - - // orientation for the control - var controlOri = new THREE.Quaternion(message.orientation.x, message.orientation.y, - message.orientation.z, message.orientation.w); - controlOri.normalize(); - - // transform x axis into local frame - var controlAxis = new THREE.Vector3(1, 0, 0); - controlAxis.applyQuaternion(controlOri); - - this.currentControlOri = new THREE.Quaternion(); - - // determine mouse interaction - switch (message.interaction_mode) { - case ROS3D.INTERACTIVE_MARKER_MOVE_AXIS: - this.addEventListener('mousemove', this.parent.moveAxis.bind(this.parent, this, controlAxis)); - this.addEventListener('touchmove', this.parent.moveAxis.bind(this.parent, this, controlAxis)); - break; - case ROS3D.INTERACTIVE_MARKER_ROTATE_AXIS: - this - .addEventListener('mousemove', this.parent.rotateAxis.bind(this.parent, this, controlOri)); - break; - case ROS3D.INTERACTIVE_MARKER_MOVE_PLANE: - this - .addEventListener('mousemove', this.parent.movePlane.bind(this.parent, this, controlAxis)); - break; - case ROS3D.INTERACTIVE_MARKER_BUTTON: - this.addEventListener('click', this.parent.buttonClick.bind(this.parent, this)); - break; - default: - break; - } +class DepthCloud extends THREE$1.Object3D { /** - * Install default listeners for highlighting / dragging. + * The DepthCloud object. * - * @param event - the event to stop + * @constructor + * @param options - object with following keys: + * + * * url - the URL of the stream + * * streamType (optional) - the stream type: mjpeg or vp8 video (defaults to vp8) + * * f (optional) - the camera's focal length (defaults to standard Kinect calibration) + * * maxDepthPerTile (optional) - the factor with which we control the desired depth range (defaults to 1.0) + * * pointSize (optional) - point size (pixels) for rendered point cloud + * * width (optional) - width of the video stream + * * height (optional) - height of the video stream + * * whiteness (optional) - blends rgb values to white (0..100) + * * varianceThreshold (optional) - threshold for variance filter, used for compression artifact removal */ - function stopPropagation(event) { - event.stopPropagation(); + constructor(options) { + super(); + options = options || {}; + + this.url = options.url; + this.streamType = options.streamType || 'vp8'; + this.f = options.f || 526; + this.maxDepthPerTile = options.maxDepthPerTile || 1.0; + this.pointSize = options.pointSize || 3; + this.width = options.width || 1024; + this.height = options.height || 1024; + this.resolutionFactor = Math.max(this.width, this.height) / 1024; + this.whiteness = options.whiteness || 0; + this.varianceThreshold = options.varianceThreshold || 0.000016667; + + this.isMjpeg = this.streamType.toLowerCase() === 'mjpeg'; + + this.video = document.createElement(this.isMjpeg ? 'img' : 'video'); + this.video.addEventListener(this.isMjpeg ? 'load' : 'loadedmetadata', this.metaLoaded.bind(this), false); + + if (!this.isMjpeg) { + this.video.loop = true; + } + + this.video.src = this.url; + this.video.crossOrigin = 'Anonymous'; + this.video.setAttribute('crossorigin', 'Anonymous'); + + // define custom shaders + this.vertex_shader = [ + 'uniform sampler2D map;', + '', + 'uniform float width;', + 'uniform float height;', + 'uniform float nearClipping, farClipping;', + '', + 'uniform float pointSize;', + 'uniform float zOffset;', + '', + 'uniform float focallength;', + 'uniform float maxDepthPerTile;', + 'uniform float resolutionFactor;', + '', + 'varying vec2 vUvP;', + 'varying vec2 colorP;', + '', + 'varying float depthVariance;', + 'varying float maskVal;', + '', + 'float sampleDepth(vec2 pos)', + ' {', + ' float depth;', + ' ', + ' vec2 vUv = vec2( pos.x / (width*2.0), pos.y / (height*2.0)+0.5 );', + ' vec2 vUv2 = vec2( pos.x / (width*2.0)+0.5, pos.y / (height*2.0)+0.5 );', + ' ', + ' vec4 depthColor = texture2D( map, vUv );', + ' ', + ' depth = ( depthColor.r + depthColor.g + depthColor.b ) / 3.0 ;', + ' ', + ' if (depth>0.99)', + ' {', + ' vec4 depthColor2 = texture2D( map, vUv2 );', + ' float depth2 = ( depthColor2.r + depthColor2.g + depthColor2.b ) / 3.0 ;', + ' depth = 0.99+depth2;', + ' }', + ' ', + ' return depth;', + ' }', + '', + 'float median(float a, float b, float c)', + ' {', + ' float r=a;', + ' ', + ' if ( (a0.5) || (vUvP.y<0.5) || (vUvP.y>0.0))', + ' {', + ' vec2 smp = decodeDepth(vec2(position.x, position.y));', + ' float depth = smp.x;', + ' depthVariance = smp.y;', + ' ', + ' float z = -depth;', + ' ', + ' pos = vec4(', + ' ( position.x / width - 0.5 ) * z * 0.5 * maxDepthPerTile * resolutionFactor * (1000.0/focallength) * -1.0,', + ' ( position.y / height - 0.5 ) * z * 0.5 * maxDepthPerTile * resolutionFactor * (1000.0/focallength),', + ' (- z + zOffset / 1000.0) * maxDepthPerTile,', + ' 1.0);', + ' ', + ' vec2 maskP = vec2( position.x / (width*2.0), position.y / (height*2.0) );', + ' vec4 maskColor = texture2D( map, maskP );', + ' maskVal = ( maskColor.r + maskColor.g + maskColor.b ) / 3.0 ;', + ' }', + ' ', + ' gl_PointSize = pointSize;', + ' gl_Position = projectionMatrix * modelViewMatrix * pos;', + ' ', + '}' + ].join('\n'); + + this.fragment_shader = [ + 'uniform sampler2D map;', + 'uniform float varianceThreshold;', + 'uniform float whiteness;', + '', + 'varying vec2 vUvP;', + 'varying vec2 colorP;', + '', + 'varying float depthVariance;', + 'varying float maskVal;', + '', + '', + 'void main() {', + ' ', + ' vec4 color;', + ' ', + ' if ( (depthVariance>varianceThreshold) || (maskVal>0.5) ||(vUvP.x<0.0)|| (vUvP.x>0.5) || (vUvP.y<0.5) || (vUvP.y>1.0))', + ' { ', + ' discard;', + ' }', + ' else ', + ' {', + ' color = texture2D( map, colorP );', + ' ', + ' float fader = whiteness /100.0;', + ' ', + ' color.r = color.r * (1.0-fader)+ fader;', + ' ', + ' color.g = color.g * (1.0-fader)+ fader;', + ' ', + ' color.b = color.b * (1.0-fader)+ fader;', + ' ', + ' color.a = 1.0;//smoothstep( 20000.0, -20000.0, gl_FragCoord.z / gl_FragCoord.w );', + ' }', + ' ', + ' gl_FragColor = vec4( color.r, color.g, color.b, color.a );', + ' ', + '}' + ].join('\n'); + }; + + /** + * Callback called when video metadata is ready + */ + metaLoaded() { + this.metaLoaded = true; + this.initStreamer(); + }; + + /** + * Callback called when video metadata is ready + */ + initStreamer() { + + if (this.metaLoaded) { + this.texture = new THREE$1.Texture(this.video); + this.geometry = new THREE$1.Geometry(); + + for (var i = 0, l = this.width * this.height; i < l; i++) { + + var vertex = new THREE$1.Vector3(); + vertex.x = (i % this.width); + vertex.y = Math.floor(i / this.width); + + this.geometry.vertices.push(vertex); + } + + this.material = new THREE$1.ShaderMaterial({ + uniforms : { + 'map' : { + type : 't', + value : this.texture + }, + 'width' : { + type : 'f', + value : this.width + }, + 'height' : { + type : 'f', + value : this.height + }, + 'focallength' : { + type : 'f', + value : this.f + }, + 'pointSize' : { + type : 'f', + value : this.pointSize + }, + 'zOffset' : { + type : 'f', + value : 0 + }, + 'whiteness' : { + type : 'f', + value : this.whiteness + }, + 'varianceThreshold' : { + type : 'f', + value : this.varianceThreshold + }, + 'maxDepthPerTile': { + type : 'f', + value : this.maxDepthPerTile + }, + 'resolutionFactor': { + type : 'f', + value : this.resolutionFactor + }, + }, + vertexShader : this.vertex_shader, + fragmentShader : this.fragment_shader + }); + + this.mesh = new THREE$1.ParticleSystem(this.geometry, this.material); + this.mesh.position.x = 0; + this.mesh.position.y = 0; + this.add(this.mesh); + + var that = this; + + setInterval(function() { + if (that.isMjpeg || that.video.readyState === that.video.HAVE_ENOUGH_DATA) { + that.texture.needsUpdate = true; + } + }, 1000 / 30); + } + }; + + /** + * Start video playback + */ + startStream() { + if (!this.isMjpeg) { + this.video.play(); + } + }; + + /** + * Stop video playback + */ + stopStream() { + if (!this.isMjpeg) { + this.video.pause(); + } + }; +} + +/** + * @author David Gossow - dgossow@willowgarage.com + */ + +class Arrow extends THREE$1.Mesh { + + /** + * A Arrow is a THREE object that can be used to display an arrow model. + * + * @constructor + * @param options - object with following keys: + * + * * origin (optional) - the origin of the arrow + * * direction (optional) - the direction vector of the arrow + * * length (optional) - the length of the arrow + * * headLength (optional) - the head length of the arrow + * * shaftDiameter (optional) - the shaft diameter of the arrow + * * headDiameter (optional) - the head diameter of the arrow + * * material (optional) - the material to use for this arrow + */ + constructor(options) { + options = options || {}; + var origin = options.origin || new THREE$1.Vector3(0, 0, 0); + var direction = options.direction || new THREE$1.Vector3(1, 0, 0); + var length = options.length || 1; + var headLength = options.headLength || 0.2; + var shaftDiameter = options.shaftDiameter || 0.05; + var headDiameter = options.headDiameter || 0.1; + var material = options.material || new THREE$1.MeshBasicMaterial(); + + var shaftLength = length - headLength; + + // create and merge geometry + var geometry = new THREE$1.CylinderGeometry(shaftDiameter * 0.5, shaftDiameter * 0.5, shaftLength, + 12, 1); + var m = new THREE$1.Matrix4(); + m.setPosition(new THREE$1.Vector3(0, shaftLength * 0.5, 0)); + geometry.applyMatrix(m); + + // create the head + var coneGeometry = new THREE$1.CylinderGeometry(0, headDiameter * 0.5, headLength, 12, 1); + m.setPosition(new THREE$1.Vector3(0, shaftLength + (headLength * 0.5), 0)); + coneGeometry.applyMatrix(m); + + // put the arrow together + geometry.merge(coneGeometry); + + super(geometry, material); + + this.position.copy(origin); + this.setDirection(direction); + }; + + /** + * Set the direction of this arrow to that of the given vector. + * + * @param direction - the direction to set this arrow + */ + setDirection(direction) { + var axis = new THREE$1.Vector3(0, 1, 0).cross(direction); + var radians = Math.acos(new THREE$1.Vector3(0, 1, 0).dot(direction.clone().normalize())); + this.matrix = new THREE$1.Matrix4().makeRotationAxis(axis.normalize(), radians); + this.rotation.setFromRotationMatrix(this.matrix, this.rotation.order); + }; + + /** + * Set this arrow to be the given length. + * + * @param length - the new length of the arrow + */ + setLength(length) { + this.scale.set(length, length, length); + }; + + /** + * Set the color of this arrow to the given hex value. + * + * @param hex - the hex value of the color to use + */ + setColor(hex) { + this.material.color.setHex(hex); + }; + + /* + * Free memory of elements in this marker. + */ + dispose() { + if (this.geometry !== undefined) { + this.geometry.dispose(); + } + if (this.material !== undefined) { + this.material.dispose(); + } + }; +} + +/** + * @author aleeper / http://adamleeper.com/ + * @author mrdoob / http://mrdoob.com/ + * @author gero3 / https://github.com/gero3 + * @author Mugen87 / https://github.com/Mugen87 + * + * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs. + * + * Supports both binary and ASCII encoded files, with automatic detection of type. + * + * The loader returns a non-indexed buffer geometry. + * + * Limitations: + * Binary decoding supports "Magics" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL). + * There is perhaps some question as to how valid it is to always assume little-endian-ness. + * ASCII decoding assumes file is UTF-8. + * + * Usage: + * var loader = new THREE.STLLoader(); + * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) { + * scene.add( new THREE.Mesh( geometry ) ); + * }); + * + * For binary STLs geometry might contain colors for vertices. To use it: + * // use the same code to load STL as above + * if (geometry.hasColors) { + * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: THREE.VertexColors }); + * } else { .... } + * var mesh = new THREE.Mesh( geometry, material ); + */ + +THREE$1.STLLoader = function (manager) { + + this.manager = (manager !== undefined) ? manager : THREE$1.DefaultLoadingManager; + +}; + +THREE$1.STLLoader.prototype = { + + constructor: THREE$1.STLLoader, + + load: function (url, onLoad, onProgress, onError) { + + var scope = this; + + var loader = new THREE$1.FileLoader(scope.manager); + loader.setResponseType('arraybuffer'); + loader.load(url, function (text) { + + onLoad(scope.parse(text)); + + }, onProgress, onError); + + }, + + parse: function (data) { + + function isBinary(data) { + + var expect, face_size, n_faces, reader; + reader = new DataView(data); + face_size = (32 / 8 * 3) + ((32 / 8 * 3) * 3) + (16 / 8); + n_faces = reader.getUint32(80, true); + expect = 80 + (32 / 8) + (n_faces * face_size); + + if (expect === reader.byteLength) { + + return true; + + } + + // An ASCII STL data must begin with 'solid ' as the first six bytes. + // However, ASCII STLs lacking the SPACE after the 'd' are known to be + // plentiful. So, check the first 5 bytes for 'solid'. + + // US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd' + + var solid = [115, 111, 108, 105, 100]; + + for (var i = 0; i < 5; i++) { + + // If solid[ i ] does not match the i-th byte, then it is not an + // ASCII STL; hence, it is binary and return true. + + if (solid[i] != reader.getUint8(i, false)) return true; + + } + + // First 5 bytes read "solid"; declare it to be an ASCII STL + + return false; + + } + + function parseBinary(data) { + + var reader = new DataView(data); + var faces = reader.getUint32(80, true); + + var r, g, b, hasColors = false, colors; + var defaultR, defaultG, defaultB, alpha; + + // process STL header + // check for default color in header ("COLOR=rgba" sequence). + + for (var index = 0; index < 80 - 10; index++) { + + if ((reader.getUint32(index, false) == 0x434F4C4F /*COLO*/) && + (reader.getUint8(index + 4) == 0x52 /*'R'*/) && + (reader.getUint8(index + 5) == 0x3D /*'='*/)) { + + hasColors = true; + colors = []; + + defaultR = reader.getUint8(index + 6) / 255; + defaultG = reader.getUint8(index + 7) / 255; + defaultB = reader.getUint8(index + 8) / 255; + alpha = reader.getUint8(index + 9) / 255; + + } + + } + + var dataOffset = 84; + var faceLength = 12 * 4 + 2; + + var geometry = new THREE$1.BufferGeometry(); + + var vertices = []; + var normals = []; + + for (var face = 0; face < faces; face++) { + + var start = dataOffset + face * faceLength; + var normalX = reader.getFloat32(start, true); + var normalY = reader.getFloat32(start + 4, true); + var normalZ = reader.getFloat32(start + 8, true); + + if (hasColors) { + + var packedColor = reader.getUint16(start + 48, true); + + if ((packedColor & 0x8000) === 0) { + + // facet has its own unique color + + r = (packedColor & 0x1F) / 31; + g = ((packedColor >> 5) & 0x1F) / 31; + b = ((packedColor >> 10) & 0x1F) / 31; + + } else { + + r = defaultR; + g = defaultG; + b = defaultB; + + } + + } + + for (var i = 1; i <= 3; i++) { + + var vertexstart = start + i * 12; + + vertices.push(reader.getFloat32(vertexstart, true)); + vertices.push(reader.getFloat32(vertexstart + 4, true)); + vertices.push(reader.getFloat32(vertexstart + 8, true)); + + normals.push(normalX, normalY, normalZ); + + if (hasColors) { + + colors.push(r, g, b); + + } + + } + + } + + geometry.addAttribute('position', new THREE$1.BufferAttribute(new Float32Array(vertices), 3)); + geometry.addAttribute('normal', new THREE$1.BufferAttribute(new Float32Array(normals), 3)); + + if (hasColors) { + + geometry.addAttribute('color', new THREE$1.BufferAttribute(new Float32Array(colors), 3)); + geometry.hasColors = true; + geometry.alpha = alpha; + + } + + return geometry; + + } + + function parseASCII(data) { + + var geometry = new THREE$1.BufferGeometry(); + var patternFace = /facet([\s\S]*?)endfacet/g; + var faceCounter = 0; + + var patternFloat = /[\s]+([+-]?(?:\d+.\d+|\d+.|\d+|.\d+)(?:[eE][+-]?\d+)?)/.source; + var patternVertex = new RegExp('vertex' + patternFloat + patternFloat + patternFloat, 'g'); + var patternNormal = new RegExp('normal' + patternFloat + patternFloat + patternFloat, 'g'); + + var vertices = []; + var normals = []; + + var normal = new THREE$1.Vector3(); + + var result; + + while ((result = patternFace.exec(data)) !== null) { + + var vertexCountPerFace = 0; + var normalCountPerFace = 0; + + var text = result[0]; + + while ((result = patternNormal.exec(text)) !== null) { + + normal.x = parseFloat(result[1]); + normal.y = parseFloat(result[2]); + normal.z = parseFloat(result[3]); + normalCountPerFace++; + + } + + while ((result = patternVertex.exec(text)) !== null) { + + vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])); + normals.push(normal.x, normal.y, normal.z); + vertexCountPerFace++; + + } + + // every face have to own ONE valid normal + + if (normalCountPerFace !== 1) { + + console.error('THREE.STLLoader: Something isn\'t right with the normal of face number ' + faceCounter); + + } + + // each face have to own THREE valid vertices + + if (vertexCountPerFace !== 3) { + + console.error('THREE.STLLoader: Something isn\'t right with the vertices of face number ' + faceCounter); + + } + + faceCounter++; + + } + + geometry.addAttribute('position', new THREE$1.Float32BufferAttribute(vertices, 3)); + geometry.addAttribute('normal', new THREE$1.Float32BufferAttribute(normals, 3)); + + return geometry; + + } + + function ensureString(buffer) { + + if (typeof buffer !== 'string') { + + var array_buffer = new Uint8Array(buffer); + + if (window.TextDecoder !== undefined) { + + return new TextDecoder().decode(array_buffer); + + } + + var str = ''; + + for (var i = 0, il = buffer.byteLength; i < il; i++) { + + str += String.fromCharCode(array_buffer[i]); // implicitly assumes little-endian + + } + + return str; + + } else { + + return buffer; + + } + + } + + function ensureBinary(buffer) { + + if (typeof buffer === 'string') { + + var array_buffer = new Uint8Array(buffer.length); + for (var i = 0; i < buffer.length; i++) { + + array_buffer[i] = buffer.charCodeAt(i) & 0xff; // implicitly assumes little-endian + + } + return array_buffer.buffer || array_buffer; + + } else { + + return buffer; + + } + + } + + // start + + var binData = ensureBinary(data); + + return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data)); + } - // check the mode - if (message.interaction_mode !== ROS3D.INTERACTIVE_MARKER_NONE) { - this.addEventListener('mousedown', this.parent.startDrag.bind(this.parent, this)); - this.addEventListener('mouseup', this.parent.stopDrag.bind(this.parent, this)); - this.addEventListener('contextmenu', this.parent.showMenu.bind(this.parent, this)); - this.addEventListener('mouseup', function(event3d) { - if (that.startMousePos.distanceToSquared(event3d.mousePos) === 0) { - event3d.type = 'contextmenu'; - that.dispatchEvent(event3d); - } - }); - this.addEventListener('mouseover', stopPropagation); - this.addEventListener('mouseout', stopPropagation); - this.addEventListener('click', stopPropagation); - this.addEventListener('mousedown', function(event3d) { - that.startMousePos = event3d.mousePos; - }); +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + * + * + * @Modified by Jihoon Lee from ColladerLoader.js@r88 + * To support rviz compatible collada viewing. + * See: #202 why it is forked. + * + * It is a fork from ColladerLoader.js in three.js. It follows three.js license. + */ + +THREE$1.ColladaLoader = function (manager) { + + this.manager = (manager !== undefined) ? manager : THREE$1.DefaultLoadingManager; + +}; + +THREE$1.ColladaLoader.prototype = { + + constructor: THREE$1.ColladaLoader, + + crossOrigin: 'Anonymous', + + load: function (url, onLoad, onProgress, onError) { + + var scope = this; + + var path = THREE$1.Loader.prototype.extractUrlBase(url); + + var loader = new THREE$1.FileLoader(scope.manager); + loader.load(url, function (text) { + + onLoad(scope.parse(text, path)); + + }, onProgress, onError); + + }, + + options: { + + set convertUpAxis(value) { + + console.warn('THREE.ColladaLoader: options.convertUpAxis() has been removed. Up axis is converted automatically.'); + + } + + }, + + setCrossOrigin: function (value) { + + this.crossOrigin = value; + + }, + + parse: function (text, path) { + + function getElementsByTagName(xml, name) { + + // Non recursive xml.getElementsByTagName() ... + + var array = []; + var childNodes = xml.childNodes; + + for (var i = 0, l = childNodes.length; i < l; i++) { + + var child = childNodes[i]; + + if (child.nodeName === name) { + + array.push(child); + + } - // touch support - this.addEventListener('touchstart', function(event3d) { - if (event3d.domEvent.touches.length === 1) { - event3d.type = 'mousedown'; - event3d.domEvent.button = 0; - that.dispatchEvent(event3d); } - }); - this.addEventListener('touchmove', function(event3d) { - if (event3d.domEvent.touches.length === 1) { - event3d.type = 'mousemove'; - event3d.domEvent.button = 0; - that.dispatchEvent(event3d); + + return array; + + } + + function parseStrings(text) { + + if (text.length === 0) return []; + + var parts = text.trim().split(/\s+/); + var array = new Array(parts.length); + + for (var i = 0, l = parts.length; i < l; i++) { + + array[i] = parts[i]; + } - }); - this.addEventListener('touchend', function(event3d) { - if (event3d.domEvent.touches.length === 0) { - event3d.domEvent.button = 0; - event3d.type = 'mouseup'; - that.dispatchEvent(event3d); - event3d.type = 'click'; - that.dispatchEvent(event3d); + + return array; + + } + + function parseFloats(text) { + + if (text.length === 0) return []; + + var parts = text.trim().split(/\s+/); + var array = new Array(parts.length); + + for (var i = 0, l = parts.length; i < l; i++) { + + array[i] = parseFloat(parts[i]); + } - }); + + return array; + + } + + function parseInts(text) { + + if (text.length === 0) return []; + + var parts = text.trim().split(/\s+/); + var array = new Array(parts.length); + + for (var i = 0, l = parts.length; i < l; i++) { + + array[i] = parseInt(parts[i]); + + } + + return array; + + } + + function parseId(text) { + + return text.substring(1); + + } + + function generateId() { + + return 'three_default_' + (count++); + + } + + function isEmpty(object) { + + return Object.keys(object).length === 0; + + } + + // asset + + function parseAsset(xml) { + + return { + unit: parseAssetUnit(getElementsByTagName(xml, 'unit')[0]), + upAxis: parseAssetUpAxis(getElementsByTagName(xml, 'up_axis')[0]) + }; + + } + + function parseAssetUnit(xml) { + + return xml !== undefined ? parseFloat(xml.getAttribute('meter')) : 1; + + } + + function parseAssetUpAxis(xml) { + + return xml !== undefined ? xml.textContent : 'Y_UP'; + + } + + // library + + function parseLibrary(xml, libraryName, nodeName, parser) { + + var library = getElementsByTagName(xml, libraryName)[0]; + + if (library !== undefined) { + + var elements = getElementsByTagName(library, nodeName); + + for (var i = 0; i < elements.length; i++) { + + parser(elements[i]); + + } + + } + + } + + function buildLibrary(data, builder) { + + for (var name in data) { + + var object = data[name]; + object.build = builder(data[name]); + + } + + } + + // get + + function getBuild(data, builder) { + + if (data.build !== undefined) return data.build; + + data.build = builder(data); + + return data.build; + + } + + // animation + + function parseAnimation(xml) { + + var data = { + sources: {}, + samplers: {}, + channels: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + var id; + + switch (child.nodeName) { + + case 'source': + id = child.getAttribute('id'); + data.sources[id] = parseSource(child); + break; + + case 'sampler': + id = child.getAttribute('id'); + data.samplers[id] = parseAnimationSampler(child); + break; + + case 'channel': + id = child.getAttribute('target'); + data.channels[id] = parseAnimationChannel(child); + break; + + default: + console.log(child); + + } + + } + + library.animations[xml.getAttribute('id')] = data; + + } + + function parseAnimationSampler(xml) { + + var data = { + inputs: {}, + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'input': + var id = parseId(child.getAttribute('source')); + var semantic = child.getAttribute('semantic'); + data.inputs[semantic] = id; + break; + + } + + } + + return data; + + } + + function parseAnimationChannel(xml) { + + var data = {}; + + var target = xml.getAttribute('target'); + + // parsing SID Addressing Syntax + + var parts = target.split('/'); + + var id = parts.shift(); + var sid = parts.shift(); + + // check selection syntax + + var arraySyntax = (sid.indexOf('(') !== - 1); + var memberSyntax = (sid.indexOf('.') !== - 1); + + if (memberSyntax) { + + // member selection access + + parts = sid.split('.'); + sid = parts.shift(); + data.member = parts.shift(); + + } else if (arraySyntax) { + + // array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices. + + var indices = sid.split('('); + sid = indices.shift(); + + for (var i = 0; i < indices.length; i++) { + + indices[i] = parseInt(indices[i].replace(/\)/, '')); + + } + + data.indices = indices; + + } + + data.id = id; + data.sid = sid; + + data.arraySyntax = arraySyntax; + data.memberSyntax = memberSyntax; + + data.sampler = parseId(xml.getAttribute('source')); + + return data; + + } + + function buildAnimation(data) { + + var tracks = []; + + var channels = data.channels; + var samplers = data.samplers; + var sources = data.sources; + + for (var target in channels) { + + if (channels.hasOwnProperty(target)) { + + var channel = channels[target]; + var sampler = samplers[channel.sampler]; + + var inputId = sampler.inputs.INPUT; + var outputId = sampler.inputs.OUTPUT; + + var inputSource = sources[inputId]; + var outputSource = sources[outputId]; + + var animation = buildAnimationChannel(channel, inputSource, outputSource); + + createKeyframeTracks(animation, tracks); + + } + + } + + return tracks; + + } + + function getAnimation(id) { + + return getBuild(library.animations[id], buildAnimation); + + } + + function buildAnimationChannel(channel, inputSource, outputSource) { + + var node = library.nodes[channel.id]; + var object3D = getNode(node.id); + + var transform = node.transforms[channel.sid]; + var defaultMatrix = node.matrix.clone().transpose(); + + var time, stride; + var i, il, j, jl; + + var data = {}; + + // the collada spec allows the animation of data in various ways. + // depending on the transform type (matrix, translate, rotate, scale), we execute different logic + + switch (transform) { + + case 'matrix': + + for (i = 0, il = inputSource.array.length; i < il; i++) { + + time = inputSource.array[i]; + stride = i * outputSource.stride; + + if (data[time] === undefined) data[time] = {}; + + if (channel.arraySyntax === true) { + + var value = outputSource.array[stride]; + var index = channel.indices[0] + 4 * channel.indices[1]; + + data[time][index] = value; + + } else { + + for (j = 0, jl = outputSource.stride; j < jl; j++) { + + data[time][j] = outputSource.array[stride + j]; + + } + + } + + } + + break; + + case 'translate': + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform); + break; + + case 'rotate': + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform); + break; + + case 'scale': + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform); + break; + + } + + var keyframes = prepareAnimationData(data, defaultMatrix); + + var animation = { + name: object3D.uuid, + keyframes: keyframes + }; + + return animation; + + } + + function prepareAnimationData(data, defaultMatrix) { + + var keyframes = []; + + // transfer data into a sortable array + + for (var time in data) { + + keyframes.push({ time: parseFloat(time), value: data[time] }); + + } + + // ensure keyframes are sorted by time + + keyframes.sort(ascending); + + // now we clean up all animation data, so we can use them for keyframe tracks + + for (var i = 0; i < 16; i++) { + + transformAnimationData(keyframes, i, defaultMatrix.elements[i]); + + } + + return keyframes; + + // array sort function + + function ascending(a, b) { + + return a.time - b.time; + + } + + } + + var position = new THREE$1.Vector3(); + var scale = new THREE$1.Vector3(); + var quaternion = new THREE$1.Quaternion(); + + function createKeyframeTracks(animation, tracks) { + + var keyframes = animation.keyframes; + var name = animation.name; + + var times = []; + var positionData = []; + var quaternionData = []; + var scaleData = []; + + for (var i = 0, l = keyframes.length; i < l; i++) { + + var keyframe = keyframes[i]; + + var time = keyframe.time; + var value = keyframe.value; + + matrix.fromArray(value).transpose(); + matrix.decompose(position, quaternion, scale); + + times.push(time); + positionData.push(position.x, position.y, position.z); + quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w); + scaleData.push(scale.x, scale.y, scale.z); + + } + + if (positionData.length > 0) tracks.push(new THREE$1.VectorKeyframeTrack(name + '.position', times, positionData)); + if (quaternionData.length > 0) tracks.push(new THREE$1.QuaternionKeyframeTrack(name + '.quaternion', times, quaternionData)); + if (scaleData.length > 0) tracks.push(new THREE$1.VectorKeyframeTrack(name + '.scale', times, scaleData)); + + return tracks; + + } + + function transformAnimationData(keyframes, property, defaultValue) { + + var keyframe; + + var empty = true; + var i, l; + + // check, if values of a property are missing in our keyframes + + for (i = 0, l = keyframes.length; i < l; i++) { + + keyframe = keyframes[i]; + + if (keyframe.value[property] === undefined) { + + keyframe.value[property] = null; // mark as missing + + } else { + + empty = false; + + } + + } + + if (empty === true) { + + // no values at all, so we set a default value + + for (i = 0, l = keyframes.length; i < l; i++) { + + keyframe = keyframes[i]; + + keyframe.value[property] = defaultValue; + + } + + } else { + + // filling gaps + + createMissingKeyframes(keyframes, property); + + } + + } + + function createMissingKeyframes(keyframes, property) { + + var prev, next; + + for (var i = 0, l = keyframes.length; i < l; i++) { + + var keyframe = keyframes[i]; + + if (keyframe.value[property] === null) { + + prev = getPrev(keyframes, i, property); + next = getNext(keyframes, i, property); + + if (prev === null) { + + keyframe.value[property] = next.value[property]; + continue; + + } + + if (next === null) { + + keyframe.value[property] = prev.value[property]; + continue; + + } + + interpolate(keyframe, prev, next, property); + + } + + } + + } + + function getPrev(keyframes, i, property) { + + while (i >= 0) { + + var keyframe = keyframes[i]; + + if (keyframe.value[property] !== null) return keyframe; + + i--; + + } + + return null; + + } + + function getNext(keyframes, i, property) { + + while (i < keyframes.length) { + + var keyframe = keyframes[i]; + + if (keyframe.value[property] !== null) return keyframe; + + i++; + + } + + return null; + + } + + function interpolate(key, prev, next, property) { + + if ((next.time - prev.time) === 0) { + + key.value[property] = prev.value[property]; + return; + + } + + key.value[property] = ((key.time - prev.time) * (next.value[property] - prev.value[property]) / (next.time - prev.time)) + prev.value[property]; + + } + + // animation clips + + function parseAnimationClip(xml) { + + var data = { + name: xml.getAttribute('id') || 'default', + start: parseFloat(xml.getAttribute('start') || 0), + end: parseFloat(xml.getAttribute('end') || 0), + animations: [] + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'instance_animation': + data.animations.push(parseId(child.getAttribute('url'))); + break; + + } + + } + + library.clips[xml.getAttribute('id')] = data; + + } + + function buildAnimationClip(data) { + + var tracks = []; + + var name = data.name; + var duration = (data.end - data.start) || - 1; + var animations = data.animations; + + for (var i = 0, il = animations.length; i < il; i++) { + + var animationTracks = getAnimation(animations[i]); + + for (var j = 0, jl = animationTracks.length; j < jl; j++) { + + tracks.push(animationTracks[j]); + + } + + } + + return new THREE$1.AnimationClip(name, duration, tracks); + + } + + function getAnimationClip(id) { + + return getBuild(library.clips[id], buildAnimationClip); + + } + + // controller + + function parseController(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'skin': + // there is exactly one skin per controller + data.id = parseId(child.getAttribute('source')); + data.skin = parseSkin(child); + break; + + case 'morph': + data.id = parseId(child.getAttribute('source')); + console.warn('THREE.ColladaLoader: Morph target animation not supported yet.'); + break; + + } + + } + + library.controllers[xml.getAttribute('id')] = data; + + } + + function parseSkin(xml) { + + var data = { + sources: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'bind_shape_matrix': + data.bindShapeMatrix = parseFloats(child.textContent); + break; + + case 'source': + var id = child.getAttribute('id'); + data.sources[id] = parseSource(child); + break; + + case 'joints': + data.joints = parseJoints(child); + break; + + case 'vertex_weights': + data.vertexWeights = parseVertexWeights(child); + break; + + } + + } + + return data; + + } + + function parseJoints(xml) { + + var data = { + inputs: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'input': + var semantic = child.getAttribute('semantic'); + var id = parseId(child.getAttribute('source')); + data.inputs[semantic] = id; + break; + + } + + } + + return data; + + } + + function parseVertexWeights(xml) { + + var data = { + inputs: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'input': + var semantic = child.getAttribute('semantic'); + var id = parseId(child.getAttribute('source')); + var offset = parseInt(child.getAttribute('offset')); + data.inputs[semantic] = { id: id, offset: offset }; + break; + + case 'vcount': + data.vcount = parseInts(child.textContent); + break; + + case 'v': + data.v = parseInts(child.textContent); + break; + + } + + } + + return data; + + } + + function buildController(data) { + + var build = { + id: data.id + }; + + var geometry = library.geometries[build.id]; + + if (data.skin !== undefined) { + + build.skin = buildSkin(data.skin); + + // we enhance the 'sources' property of the corresponding geometry with our skin data + + geometry.sources.skinIndices = build.skin.indices; + geometry.sources.skinWeights = build.skin.weights; + + } + + return build; + + } + + function buildSkin(data) { + + var BONE_LIMIT = 4; + + var build = { + joints: [], // this must be an array to preserve the joint order + indices: { + array: [], + stride: BONE_LIMIT + }, + weights: { + array: [], + stride: BONE_LIMIT + } + }; + + var sources = data.sources; + var vertexWeights = data.vertexWeights; + + var vcount = vertexWeights.vcount; + var v = vertexWeights.v; + var jointOffset = vertexWeights.inputs.JOINT.offset; + var weightOffset = vertexWeights.inputs.WEIGHT.offset; + + var jointSource = data.sources[data.joints.inputs.JOINT]; + var inverseSource = data.sources[data.joints.inputs.INV_BIND_MATRIX]; + + var weights = sources[vertexWeights.inputs.WEIGHT.id].array; + var stride = 0; + + var i, j, l; + + // procces skin data for each vertex + + for (i = 0, l = vcount.length; i < l; i++) { + + var jointCount = vcount[i]; // this is the amount of joints that affect a single vertex + var vertexSkinData = []; + + for (j = 0; j < jointCount; j++) { + + var skinIndex = v[stride + jointOffset]; + var weightId = v[stride + weightOffset]; + var skinWeight = weights[weightId]; + + vertexSkinData.push({ index: skinIndex, weight: skinWeight }); + + stride += 2; + + } + + // we sort the joints in descending order based on the weights. + // this ensures, we only procced the most important joints of the vertex + + vertexSkinData.sort(descending); + + // now we provide for each vertex a set of four index and weight values. + // the order of the skin data matches the order of vertices + + for (j = 0; j < BONE_LIMIT; j++) { + + var d = vertexSkinData[j]; + + if (d !== undefined) { + + build.indices.array.push(d.index); + build.weights.array.push(d.weight); + + } else { + + build.indices.array.push(0); + build.weights.array.push(0); + + } + + } + + } + + // setup bind matrix + + build.bindMatrix = new THREE$1.Matrix4().fromArray(data.bindShapeMatrix).transpose(); + + // process bones and inverse bind matrix data + + for (i = 0, l = jointSource.array.length; i < l; i++) { + + var name = jointSource.array[i]; + var boneInverse = new THREE$1.Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose(); + + build.joints.push({ name: name, boneInverse: boneInverse }); + + } + + return build; + + // array sort function + + function descending(a, b) { + + return b.weight - a.weight; + + } + + } + + function getController(id) { + + return getBuild(library.controllers[id], buildController); + + } + + // image + + function parseImage(xml) { + + var data = { + init_from: getElementsByTagName(xml, 'init_from')[0].textContent + }; + + library.images[xml.getAttribute('id')] = data; + + } + + function buildImage(data) { + + if (data.build !== undefined) return data.build; + + return data.init_from; + + } + + function getImage(id) { + + return getBuild(library.images[id], buildImage); + + } + + // effect + + function parseEffect(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'profile_COMMON': + data.profile = parseEffectProfileCOMMON(child); + break; + + } + + } + + library.effects[xml.getAttribute('id')] = data; + + } + + function parseEffectProfileCOMMON(xml) { + + var data = { + surfaces: {}, + samplers: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'newparam': + parseEffectNewparam(child, data); + break; + + case 'technique': + data.technique = parseEffectTechnique(child); + break; + + } + + } + + return data; + + } + + function parseEffectNewparam(xml, data) { + + var sid = xml.getAttribute('sid'); + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'surface': + data.surfaces[sid] = parseEffectSurface(child); + break; + + case 'sampler2D': + data.samplers[sid] = parseEffectSampler(child); + break; + + } + + } + + } + + function parseEffectSurface(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'init_from': + data.init_from = child.textContent; + break; + + } + + } + + return data; + + } + + function parseEffectSampler(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'source': + data.source = child.textContent; + break; + + } + + } + + return data; + + } + + function parseEffectTechnique(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'constant': + case 'lambert': + case 'blinn': + case 'phong': + data.type = child.nodeName; + data.parameters = parseEffectParameters(child); + break; + + } + + } + + return data; + + } + + function parseEffectParameters(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'emission': + case 'diffuse': + case 'specular': + case 'shininess': + case 'transparent': + case 'transparency': + data[child.nodeName] = parseEffectParameter(child); + break; + + } + + } + + return data; + + } + + function parseEffectParameter(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'color': + data[child.nodeName] = parseFloats(child.textContent); + break; + + case 'float': + data[child.nodeName] = parseFloat(child.textContent); + break; + + case 'texture': + data[child.nodeName] = { id: child.getAttribute('texture'), extra: parseEffectParameterTexture(child) }; + break; + + } + + } + + return data; + + } + + function parseEffectParameterTexture(xml) { + + var data = { + technique: {} + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'extra': + parseEffectParameterTextureExtra(child, data); + break; + + } + + } + + return data; + + } + + function parseEffectParameterTextureExtra(xml, data) { + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'technique': + parseEffectParameterTextureExtraTechnique(child, data); + break; + + } + + } + + } + + function parseEffectParameterTextureExtraTechnique(xml, data) { + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'repeatU': + case 'repeatV': + case 'offsetU': + case 'offsetV': + data.technique[child.nodeName] = parseFloat(child.textContent); + break; + + case 'wrapU': + case 'wrapV': + + // some files have values for wrapU/wrapV which become NaN via parseInt + + if (child.textContent.toUpperCase() === 'TRUE') { + + data.technique[child.nodeName] = 1; + + } else if (child.textContent.toUpperCase() === 'FALSE') { + + data.technique[child.nodeName] = 0; + + } else { + + data.technique[child.nodeName] = parseInt(child.textContent); + + } + + break; + + } + + } + + } + + function buildEffect(data) { + + return data; + + } + + function getEffect(id) { + + return getBuild(library.effects[id], buildEffect); + + } + + // material + + function parseMaterial(xml) { + + var data = { + name: xml.getAttribute('name') + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'instance_effect': + data.url = parseId(child.getAttribute('url')); + break; + + } + + } + + library.materials[xml.getAttribute('id')] = data; + + } + + function buildMaterial(data) { + + var effect = getEffect(data.url); + var technique = effect.profile.technique; + + var material; + + switch (technique.type) { + + case 'phong': + case 'blinn': + material = new THREE$1.MeshPhongMaterial(); + break; + + case 'lambert': + material = new THREE$1.MeshLambertMaterial(); + break; + + default: + material = new THREE$1.MeshBasicMaterial(); + break; + + } + + material.name = data.name; + + function getTexture(textureObject) { + + var sampler = effect.profile.samplers[textureObject.id]; + + if (sampler !== undefined) { + + var surface = effect.profile.surfaces[sampler.source]; + + var texture = textureLoader.load(getImage(surface.init_from)); + + var extra = textureObject.extra; + + if (extra !== undefined && extra.technique !== undefined && isEmpty(extra.technique) === false) { + + var technique = extra.technique; + + texture.wrapS = technique.wrapU ? THREE$1.RepeatWrapping : THREE$1.ClampToEdgeWrapping; + texture.wrapT = technique.wrapV ? THREE$1.RepeatWrapping : THREE$1.ClampToEdgeWrapping; + + texture.offset.set(technique.offsetU || 0, technique.offsetV || 0); + texture.repeat.set(technique.repeatU || 1, technique.repeatV || 1); + + } else { + + texture.wrapS = THREE$1.RepeatWrapping; + texture.wrapT = THREE$1.RepeatWrapping; + + } + + return texture; + + } + + console.error('THREE.ColladaLoader: Undefined sampler', textureObject.id); + + return null; + + } + + var parameters = technique.parameters; + + for (var key in parameters) { + + var parameter = parameters[key]; + + switch (key) { + + case 'diffuse': + if (parameter.color) material.color.fromArray(parameter.color); + if (parameter.texture) material.map = getTexture(parameter.texture); + break; + case 'specular': + if (parameter.color && material.specular) material.specular.fromArray(parameter.color); + if (parameter.texture) material.specularMap = getTexture(parameter.texture); + break; + case 'shininess': + if (parameter.float && material.shininess) + material.shininess = parameter.float; + break; + case 'emission': + if (parameter.color && material.emissive) + material.emissive.fromArray(parameter.color); + break; + case 'transparent': + // if ( parameter.texture ) material.alphaMap = getTexture( parameter.texture ); + material.transparent = true; + break; + case 'transparency': + if (parameter.float !== undefined) material.opacity = parameter.float; + material.transparent = true; + break; + + } + + } + + return material; + + } + + function getMaterial(id) { + + return getBuild(library.materials[id], buildMaterial); + + } + + // camera + + function parseCamera(xml) { + + var data = { + name: xml.getAttribute('name') + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'optics': + data.optics = parseCameraOptics(child); + break; + + } + + } + + library.cameras[xml.getAttribute('id')] = data; + + } + + function parseCameraOptics(xml) { + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + switch (child.nodeName) { + + case 'technique_common': + return parseCameraTechnique(child); + + } + + } + + return {}; + + } + + function parseCameraTechnique(xml) { + + var data = {}; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + switch (child.nodeName) { + + case 'perspective': + case 'orthographic': + + data.technique = child.nodeName; + data.parameters = parseCameraParameters(child); + + break; + + } + + } + + return data; + + } + + function parseCameraParameters(xml) { + + var data = {}; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + switch (child.nodeName) { + + case 'xfov': + case 'yfov': + case 'xmag': + case 'ymag': + case 'znear': + case 'zfar': + case 'aspect_ratio': + data[child.nodeName] = parseFloat(child.textContent); + break; + + } + + } + + return data; + + } + + function buildCamera(data) { + + var camera; + + switch (data.optics.technique) { + + case 'perspective': + camera = new THREE$1.PerspectiveCamera( + data.optics.parameters.yfov, + data.optics.parameters.aspect_ratio, + data.optics.parameters.znear, + data.optics.parameters.zfar + ); + break; + + case 'orthographic': + var ymag = data.optics.parameters.ymag; + var xmag = data.optics.parameters.xmag; + var aspectRatio = data.optics.parameters.aspect_ratio; + + xmag = (xmag === undefined) ? (ymag * aspectRatio) : xmag; + ymag = (ymag === undefined) ? (xmag / aspectRatio) : ymag; + + xmag *= 0.5; + ymag *= 0.5; + + camera = new THREE$1.OrthographicCamera( + - xmag, xmag, ymag, - ymag, // left, right, top, bottom + data.optics.parameters.znear, + data.optics.parameters.zfar + ); + break; + + default: + camera = new THREE$1.PerspectiveCamera(); + break; + + } + + camera.name = data.name; + + return camera; + + } + + function getCamera(id) { + var data = library.cameras[id]; + if (data !== undefined) { + return getBuild(data, buildCamera); + } + return null; + } + + // light + + function parseLight(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'technique_common': + data = parseLightTechnique(child); + break; + + } + + } + + library.lights[xml.getAttribute('id')] = data; + + } + + function parseLightTechnique(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'directional': + case 'point': + case 'spot': + case 'ambient': + + data.technique = child.nodeName; + data.parameters = parseLightParameters(child); + + } + + } + + return data; + + } + + function parseLightParameters(xml) { + + var data = {}; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'color': + var array = parseFloats(child.textContent); + data.color = new THREE$1.Color().fromArray(array); + break; + + case 'falloff_angle': + data.falloffAngle = parseFloat(child.textContent); + break; + + case 'quadratic_attenuation': + var f = parseFloat(child.textContent); + data.distance = f ? Math.sqrt(1 / f) : 0; + break; + + } + + } + + return data; + + } + + function buildLight(data) { + + var light; + + switch (data.technique) { + + case 'directional': + light = new THREE$1.DirectionalLight(); + break; + + case 'point': + light = new THREE$1.PointLight(); + break; + + case 'spot': + light = new THREE$1.SpotLight(); + break; + + case 'ambient': + light = new THREE$1.AmbientLight(); + break; + + } + + if (data.parameters.color) light.color.copy(data.parameters.color); + if (data.parameters.distance) light.distance = data.parameters.distance; + + return light; + + } + + // geometry + + function parseGeometry(xml) { + + var data = { + name: xml.getAttribute('name'), + sources: {}, + vertices: {}, + primitives: [] + }; + + var mesh = getElementsByTagName(xml, 'mesh')[0]; + + for (var i = 0; i < mesh.childNodes.length; i++) { + + var child = mesh.childNodes[i]; + + if (child.nodeType !== 1) continue; + + var id = child.getAttribute('id'); + + switch (child.nodeName) { + + case 'source': + data.sources[id] = parseSource(child); + break; + + case 'vertices': + // data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ]; + data.vertices = parseGeometryVertices(child); + break; + + case 'polygons': + console.warn('THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName); + break; + + case 'lines': + case 'linestrips': + case 'polylist': + case 'triangles': + data.primitives.push(parseGeometryPrimitive(child)); + break; + + default: + console.log(child); + + } + + } + + library.geometries[xml.getAttribute('id')] = data; + + } + + function parseSource(xml) { + + var data = { + array: [], + stride: 3 + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'float_array': + data.array = parseFloats(child.textContent); + break; + + case 'Name_array': + data.array = parseStrings(child.textContent); + break; + + case 'technique_common': + var accessor = getElementsByTagName(child, 'accessor')[0]; + + if (accessor !== undefined) { + + data.stride = parseInt(accessor.getAttribute('stride')); + + } + break; + + } + + } + + return data; + + } + + function parseGeometryVertices(xml) { + + var data = {}; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + data[child.getAttribute('semantic')] = parseId(child.getAttribute('source')); + + } + + return data; + + } + + function parseGeometryPrimitive(xml) { + + var primitive = { + type: xml.nodeName, + material: xml.getAttribute('material'), + count: parseInt(xml.getAttribute('count')), + inputs: {}, + stride: 0 + }; + + for (var i = 0, l = xml.childNodes.length; i < l; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'input': + var id = parseId(child.getAttribute('source')); + var semantic = child.getAttribute('semantic'); + var offset = parseInt(child.getAttribute('offset')); + primitive.inputs[semantic] = { id: id, offset: offset }; + primitive.stride = Math.max(primitive.stride, offset + 1); + break; + + case 'vcount': + primitive.vcount = parseInts(child.textContent); + break; + + case 'p': + primitive.p = parseInts(child.textContent); + break; + + } + + } + + return primitive; + + } + + function groupPrimitives(primitives) { + + var build = {}; + + for (var i = 0; i < primitives.length; i++) { + + var primitive = primitives[i]; + + if (build[primitive.type] === undefined) build[primitive.type] = []; + + build[primitive.type].push(primitive); + + } + + return build; + + } + + function buildGeometry(data) { + + var build = {}; + + var sources = data.sources; + var vertices = data.vertices; + var primitives = data.primitives; + + if (primitives.length === 0) return {}; + + // our goal is to create one buffer geoemtry for a single type of primitives + // first, we group all primitives by their type + + var groupedPrimitives = groupPrimitives(primitives); + + for (var type in groupedPrimitives) { + + // second, we create for each type of primitives (polylist,triangles or lines) a buffer geometry + + build[type] = buildGeometryType(groupedPrimitives[type], sources, vertices); + + } + + return build; + + } + + function buildGeometryType(primitives, sources, vertices) { + + var build = {}; + + var position = { array: [], stride: 0 }; + var normal = { array: [], stride: 0 }; + var uv = { array: [], stride: 0 }; + var color = { array: [], stride: 0 }; + + var skinIndex = { array: [], stride: 4 }; + var skinWeight = { array: [], stride: 4 }; + + var geometry = new THREE$1.BufferGeometry(); + + var materialKeys = []; + + var start = 0, count = 0; + + for (var p = 0; p < primitives.length; p++) { + + var primitive = primitives[p]; + var inputs = primitive.inputs; + var triangleCount = 1; + + if (primitive.vcount && primitive.vcount[0] === 4) { + + triangleCount = 2; // one quad -> two triangles + + } + + // groups + + if (primitive.type === 'lines' || primitive.type === 'linestrips') { + + count = primitive.count * 2; + + } else { + + count = primitive.count * 3 * triangleCount; + + } + + geometry.addGroup(start, count, p); + start += count; + + // material + + if (primitive.material) { + + materialKeys.push(primitive.material); + + } + + // geometry data + + for (var name in inputs) { + + var input = inputs[name]; + + switch (name) { + + case 'VERTEX': + for (var key in vertices) { + + var id = vertices[key]; + + switch (key) { + + case 'POSITION': + buildGeometryData(primitive, sources[id], input.offset, position.array); + position.stride = sources[id].stride; + + if (sources.skinWeights && sources.skinIndices) { + + buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array); + buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array); + + } + break; + + case 'NORMAL': + buildGeometryData(primitive, sources[id], input.offset, normal.array); + normal.stride = sources[id].stride; + break; + + case 'COLOR': + buildGeometryData(primitive, sources[id], input.offset, color.array); + color.stride = sources[id].stride; + break; + + case 'TEXCOORD': + buildGeometryData(primitive, sources[id], input.offset, uv.array); + uv.stride = sources[id].stride; + break; + + default: + console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.', key); + + } + + } + break; + + case 'NORMAL': + buildGeometryData(primitive, sources[input.id], input.offset, normal.array); + normal.stride = sources[input.id].stride; + break; + + case 'COLOR': + buildGeometryData(primitive, sources[input.id], input.offset, color.array); + color.stride = sources[input.id].stride; + break; + + case 'TEXCOORD': + buildGeometryData(primitive, sources[input.id], input.offset, uv.array); + uv.stride = sources[input.id].stride; + break; + + } + + } + + } + + // build geometry + + if (position.array.length > 0) geometry.addAttribute('position', new THREE$1.Float32BufferAttribute(position.array, position.stride)); + if (normal.array.length > 0) geometry.addAttribute('normal', new THREE$1.Float32BufferAttribute(normal.array, normal.stride)); + if (color.array.length > 0) geometry.addAttribute('color', new THREE$1.Float32BufferAttribute(color.array, color.stride)); + if (uv.array.length > 0) geometry.addAttribute('uv', new THREE$1.Float32BufferAttribute(uv.array, uv.stride)); + + if (skinIndex.array.length > 0) geometry.addAttribute('skinIndex', new THREE$1.Float32BufferAttribute(skinIndex.array, skinIndex.stride)); + if (skinWeight.array.length > 0) geometry.addAttribute('skinWeight', new THREE$1.Float32BufferAttribute(skinWeight.array, skinWeight.stride)); + + build.data = geometry; + build.type = primitives[0].type; + build.materialKeys = materialKeys; + + return build; + + } + + function buildGeometryData(primitive, source, offset, array) { + + var indices = primitive.p; + var stride = primitive.stride; + var vcount = primitive.vcount; + + function pushVector(i) { + + var index = indices[i + offset] * sourceStride; + var length = index + sourceStride; + + for (; index < length; index++) { + + array.push(sourceArray[index]); + + } + + } + + var maxcount = 0; + + var sourceArray = source.array; + var sourceStride = source.stride; + + if (primitive.vcount !== undefined) { + + var index = 0; + + for (var i = 0, l = vcount.length; i < l; i++) { + + var count = vcount[i]; + + if (count === 4) { + + var a = index + stride * 0; + var b = index + stride * 1; + var c = index + stride * 2; + var d = index + stride * 3; + + pushVector(a); pushVector(b); pushVector(d); + pushVector(b); pushVector(c); pushVector(d); + + } else if (count === 3) { + + var a = index + stride * 0; + var b = index + stride * 1; + var c = index + stride * 2; + + pushVector(a); pushVector(b); pushVector(c); + + } else { + + maxcount = Math.max(maxcount, count); + + } + + index += stride * count; + + } + + if (maxcount > 0) { + + console.log('THREE.ColladaLoader: Geometry has faces with more than 4 vertices.'); + + } + + } else { + + for (var i = 0, l = indices.length; i < l; i += stride) { + + pushVector(i); + + } + + } + + } + + function getGeometry(id) { + + return getBuild(library.geometries[id], buildGeometry); + + } + + // kinematics + + function parseKinematicsModel(xml) { + + var data = { + name: xml.getAttribute('name') || '', + joints: {}, + links: [] + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'technique_common': + parseKinematicsTechniqueCommon(child, data); + break; + + } + + } + + library.kinematicsModels[xml.getAttribute('id')] = data; + + } + + function buildKinematicsModel(data) { + + if (data.build !== undefined) return data.build; + + return data; + + } + + function getKinematicsModel(id) { + + return getBuild(library.kinematicsModels[id], buildKinematicsModel); + + } + + function parseKinematicsTechniqueCommon(xml, data) { + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'joint': + data.joints[child.getAttribute('sid')] = parseKinematicsJoint(child); + break; + + case 'link': + data.links.push(parseKinematicsLink(child)); + break; + + } + + } + + } + + function parseKinematicsJoint(xml) { + + var data; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'prismatic': + case 'revolute': + data = parseKinematicsJointParameter(child); + break; + + } + + } + + return data; + + } + + function parseKinematicsJointParameter(xml, data) { + + var data = { + sid: xml.getAttribute('sid'), + name: xml.getAttribute('name') || '', + axis: new THREE$1.Vector3(), + limits: { + min: 0, + max: 0 + }, + type: xml.nodeName, + static: false, + zeroPosition: 0, + middlePosition: 0 + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'axis': + var array = parseFloats(child.textContent); + data.axis.fromArray(array); + break; + case 'limits': + var max = child.getElementsByTagName('max')[0]; + var min = child.getElementsByTagName('min')[0]; + + data.limits.max = parseFloat(max.textContent); + data.limits.min = parseFloat(min.textContent); + break; + + } + + } + + // if min is equal to or greater than max, consider the joint static + + if (data.limits.min >= data.limits.max) { + + data.static = true; + + } + + // calculate middle position + + data.middlePosition = (data.limits.min + data.limits.max) / 2.0; + + return data; + + } + + function parseKinematicsLink(xml) { + + var data = { + sid: xml.getAttribute('sid'), + name: xml.getAttribute('name') || '', + attachments: [], + transforms: [] + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'attachment_full': + data.attachments.push(parseKinematicsAttachment(child)); + break; + + case 'matrix': + case 'translate': + case 'rotate': + data.transforms.push(parseKinematicsTransform(child)); + break; + + } + + } + + return data; + + } + + function parseKinematicsAttachment(xml) { + + var data = { + joint: xml.getAttribute('joint').split('/').pop(), + transforms: [], + links: [] + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'link': + data.links.push(parseKinematicsLink(child)); + break; + + case 'matrix': + case 'translate': + case 'rotate': + data.transforms.push(parseKinematicsTransform(child)); + break; + + } + + } + + return data; + + } + + function parseKinematicsTransform(xml) { + + var data = { + type: xml.nodeName + }; + + var array = parseFloats(xml.textContent); + + switch (data.type) { + + case 'matrix': + data.obj = new THREE$1.Matrix4(); + data.obj.fromArray(array).transpose(); + break; + + case 'translate': + data.obj = new THREE$1.Vector3(); + data.obj.fromArray(array); + break; + + case 'rotate': + data.obj = new THREE$1.Vector3(); + data.obj.fromArray(array); + data.angle = THREE$1.Math.degToRad(array[3]); + break; + + } + + return data; + + } + + function parseKinematicsScene(xml) { + + var data = { + bindJointAxis: [] + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'bind_joint_axis': + data.bindJointAxis.push(parseKinematicsBindJointAxis(child)); + break; + + } + + } + + library.kinematicsScenes[parseId(xml.getAttribute('url'))] = data; + + } + + function parseKinematicsBindJointAxis(xml) { + + var data = { + target: xml.getAttribute('target').split('/').pop() + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'axis': + var param = child.getElementsByTagName('param')[0]; + data.axis = param.textContent; + var tmpJointIndex = data.axis.split('inst_').pop().split('axis')[0]; + data.jointIndex = tmpJointIndex.substr(0, tmpJointIndex.length - 1); + break; + + } + + } + + return data; + + } + + function buildKinematicsScene(data) { + + if (data.build !== undefined) return data.build; + + return data; + + } + + function getKinematicsScene(id) { + + return getBuild(library.kinematicsScenes[id], buildKinematicsScene); + + } + + function setupKinematics() { + + var kinematicsModelId = Object.keys(library.kinematicsModels)[0]; + var kinematicsSceneId = Object.keys(library.kinematicsScenes)[0]; + var visualSceneId = Object.keys(library.visualScenes)[0]; + + if (kinematicsModelId === undefined || kinematicsSceneId === undefined) return; + + var kinematicsModel = getKinematicsModel(kinematicsModelId); + var kinematicsScene = getKinematicsScene(kinematicsSceneId); + var visualScene = getVisualScene(visualSceneId); + + var bindJointAxis = kinematicsScene.bindJointAxis; + var jointMap = {}; + + for (var i = 0, l = bindJointAxis.length; i < l; i++) { + + var axis = bindJointAxis[i]; + + // the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix' + + var targetElement = collada.querySelector('[sid="' + axis.target + '"]'); + + if (targetElement) { + + // get the parent of the transfrom element + + var parentVisualElement = targetElement.parentElement; + + // connect the joint of the kinematics model with the element in the visual scene + + connect(axis.jointIndex, parentVisualElement); + + } + + } + + function connect(jointIndex, visualElement) { + + var visualElementName = visualElement.getAttribute('name'); + var joint = kinematicsModel.joints[jointIndex]; + + visualScene.traverse(function (object) { + + if (object.name === visualElementName) { + + jointMap[jointIndex] = { + object: object, + transforms: buildTransformList(visualElement), + joint: joint, + position: joint.zeroPosition + }; + + } + + }); + + } + + var m0 = new THREE$1.Matrix4(); + + kinematics = { + + joints: kinematicsModel && kinematicsModel.joints, + + getJointValue: function (jointIndex) { + + var jointData = jointMap[jointIndex]; + + if (jointData) { + + return jointData.position; + + } else { + + console.warn('THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\'t exist.'); + + } + + }, + + setJointValue: function (jointIndex, value) { + + var jointData = jointMap[jointIndex]; + + if (jointData) { + + var joint = jointData.joint; + + if (value > joint.limits.max || value < joint.limits.min) { + + console.warn('THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').'); + + } else if (joint.static) { + + console.warn('THREE.ColladaLoader: Joint ' + jointIndex + ' is static.'); + + } else { + + var object = jointData.object; + var axis = joint.axis; + var transforms = jointData.transforms; + + matrix.identity(); + + // each update, we have to apply all transforms in the correct order + + for (var i = 0; i < transforms.length; i++) { + + var transform = transforms[i]; + + // if there is a connection of the transform node with a joint, apply the joint value + + if (transform.sid && transform.sid.indexOf(jointIndex) !== - 1) { + + switch (joint.type) { + + case 'revolute': + matrix.multiply(m0.makeRotationAxis(axis, THREE$1.Math.degToRad(value))); + break; + + case 'prismatic': + matrix.multiply(m0.makeTranslation(axis.x * value, axis.y * value, axis.z * value)); + break; + + default: + console.warn('THREE.ColladaLoader: Unknown joint type: ' + joint.type); + break; + + } + + } else { + + switch (transform.type) { + + case 'matrix': + matrix.multiply(transform.obj); + break; + + case 'translate': + matrix.multiply(m0.makeTranslation(transform.obj.x, transform.obj.y, transform.obj.z)); + break; + + case 'scale': + matrix.scale(transform.obj); + break; + + case 'rotate': + matrix.multiply(m0.makeRotationAxis(transform.obj, transform.angle)); + break; + + } + + } + + } + + object.matrix.copy(matrix); + object.matrix.decompose(object.position, object.quaternion, object.scale); + + jointMap[jointIndex].position = value; + + } + + } else { + + console.log('THREE.ColladaLoader: ' + jointIndex + ' does not exist.'); + + } + + } + + }; + + } + + function buildTransformList(node) { + + var transforms = []; + + var xml = collada.querySelector('[id="' + node.id + '"]'); + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'matrix': + var array = parseFloats(child.textContent); + var matrix = new THREE$1.Matrix4().fromArray(array).transpose(); + transforms.push({ + sid: child.getAttribute('sid'), + type: child.nodeName, + obj: matrix + }); + break; + + case 'translate': + case 'scale': + var array = parseFloats(child.textContent); + var vector = new THREE$1.Vector3().fromArray(array); + transforms.push({ + sid: child.getAttribute('sid'), + type: child.nodeName, + obj: vector + }); + break; + + case 'rotate': + var array = parseFloats(child.textContent); + var vector = new THREE$1.Vector3().fromArray(array); + var angle = THREE$1.Math.degToRad(array[3]); + transforms.push({ + sid: child.getAttribute('sid'), + type: child.nodeName, + obj: vector, + angle: angle + }); + break; + + } + + } + + return transforms; + + } + + // nodes + + function prepareNodes(xml) { + + var elements = xml.getElementsByTagName('node'); + + // ensure all node elements have id attributes + + for (var i = 0; i < elements.length; i++) { + + var element = elements[i]; + + if (element.hasAttribute('id') === false) { + + element.setAttribute('id', generateId()); + + } + + } + + } + + var matrix = new THREE$1.Matrix4(); + var vector = new THREE$1.Vector3(); + + function parseNode(xml) { + + var data = { + name: xml.getAttribute('name') || '', + type: xml.getAttribute('type'), + id: xml.getAttribute('id'), + sid: xml.getAttribute('sid'), + matrix: new THREE$1.Matrix4(), + nodes: [], + instanceCameras: [], + instanceControllers: [], + instanceLights: [], + instanceGeometries: [], + instanceNodes: [], + transforms: {} + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + if (child.nodeType !== 1) continue; + + switch (child.nodeName) { + + case 'node': + data.nodes.push(child.getAttribute('id')); + parseNode(child); + break; + + case 'instance_camera': + data.instanceCameras.push(parseId(child.getAttribute('url'))); + break; + + case 'instance_controller': + data.instanceControllers.push(parseNodeInstance(child)); + break; + + case 'instance_light': + data.instanceLights.push(parseId(child.getAttribute('url'))); + break; + + case 'instance_geometry': + data.instanceGeometries.push(parseNodeInstance(child)); + break; + + case 'instance_node': + data.instanceNodes.push(parseId(child.getAttribute('url'))); + break; + + case 'matrix': + var array = parseFloats(child.textContent); + data.matrix.multiply(matrix.fromArray(array).transpose()); + data.transforms[child.getAttribute('sid')] = child.nodeName; + break; + + case 'translate': + var array = parseFloats(child.textContent); + vector.fromArray(array); + data.matrix.multiply(matrix.makeTranslation(vector.x, vector.y, vector.z)); + data.transforms[child.getAttribute('sid')] = child.nodeName; + break; + + case 'rotate': + var array = parseFloats(child.textContent); + var angle = THREE$1.Math.degToRad(array[3]); + data.matrix.multiply(matrix.makeRotationAxis(vector.fromArray(array), angle)); + data.transforms[child.getAttribute('sid')] = child.nodeName; + break; + + case 'scale': + var array = parseFloats(child.textContent); + data.matrix.scale(vector.fromArray(array)); + data.transforms[child.getAttribute('sid')] = child.nodeName; + break; + + case 'extra': + break; + + default: + console.log(child); + + } + + } + + library.nodes[data.id] = data; + + return data; + + } + + function parseNodeInstance(xml) { + + var data = { + id: parseId(xml.getAttribute('url')), + materials: {}, + skeletons: [] + }; + + for (var i = 0; i < xml.childNodes.length; i++) { + + var child = xml.childNodes[i]; + + switch (child.nodeName) { + + case 'bind_material': + var instances = child.getElementsByTagName('instance_material'); + + for (var j = 0; j < instances.length; j++) { + + var instance = instances[j]; + var symbol = instance.getAttribute('symbol'); + var target = instance.getAttribute('target'); + + data.materials[symbol] = parseId(target); + + } + + break; + + case 'skeleton': + data.skeletons.push(parseId(child.textContent)); + break; + + default: + break; + + } + + } + + return data; + + } + + function buildSkeleton(skeletons, joints) { + + var boneData = []; + var sortedBoneData = []; + + var i, j, data; + + // a skeleton can have multiple root bones. collada expresses this + // situtation with multiple "skeleton" tags per controller instance + + for (i = 0; i < skeletons.length; i++) { + + var skeleton = skeletons[i]; + var root = getNode(skeleton); + + // setup bone data for a single bone hierarchy + + buildBoneHierarchy(root, joints, boneData); + + } + + // sort bone data (the order is defined in the corresponding controller) + + for (i = 0; i < joints.length; i++) { + + for (j = 0; j < boneData.length; j++) { + + data = boneData[j]; + + if (data.bone.name === joints[i].name) { + + sortedBoneData[i] = data; + data.processed = true; + break; + + } + + } + + } + + // add unprocessed bone data at the end of the list + + for (i = 0; i < boneData.length; i++) { + + data = boneData[i]; + + if (data.processed === false) { + + sortedBoneData.push(data); + data.processed = true; + + } + + } + + // setup arrays for skeleton creation + + var bones = []; + var boneInverses = []; + + for (i = 0; i < sortedBoneData.length; i++) { + + data = sortedBoneData[i]; + + bones.push(data.bone); + boneInverses.push(data.boneInverse); + + } + + return new THREE$1.Skeleton(bones, boneInverses); + + } + + function buildBoneHierarchy(root, joints, boneData) { + + // setup bone data from visual scene + + root.traverse(function (object) { + + if (object.isBone === true) { + + var boneInverse; + + // retrieve the boneInverse from the controller data + + for (var i = 0; i < joints.length; i++) { + + var joint = joints[i]; + + if (joint.name === object.name) { + + boneInverse = joint.boneInverse; + break; + + } + + } + + if (boneInverse === undefined) { + + // Unfortunately, there can be joints in the visual scene that are not part of the + // corresponding controller. In this case, we have to create a dummy boneInverse matrix + // for the respective bone. This bone won't affect any vertices, because there are no skin indices + // and weights defined for it. But we still have to add the bone to the sorted bone list in order to + // ensure a correct animation of the model. + + boneInverse = new THREE$1.Matrix4(); + + } + + boneData.push({ bone: object, boneInverse: boneInverse, processed: false }); + + } + + }); + + } + + function buildNode(data) { + + var objects = []; + + var matrix = data.matrix; + var nodes = data.nodes; + var type = data.type; + var instanceCameras = data.instanceCameras; + var instanceControllers = data.instanceControllers; + var instanceLights = data.instanceLights; + var instanceGeometries = data.instanceGeometries; + var instanceNodes = data.instanceNodes; + + // nodes + + for (var i = 0, l = nodes.length; i < l; i++) { + + objects.push(getNode(nodes[i])); + + } + + // instance cameras + + for (var i = 0, l = instanceCameras.length; i < l; i++) { + + var instanceCamera = getCamera(instanceCameras[i]); + + if (instanceCamera !== null) { + + objects.push(instanceCamera.clone()); + + } + + + } + + // instance controllers + + for (var i = 0, l = instanceControllers.length; i < l; i++) { + + var instance = instanceControllers[i]; + var controller = getController(instance.id); + var geometries = getGeometry(controller.id); + var newObjects = buildObjects(geometries, instance.materials); + + var skeletons = instance.skeletons; + var joints = controller.skin.joints; + + var skeleton = buildSkeleton(skeletons, joints); + + for (var j = 0, jl = newObjects.length; j < jl; j++) { + + var object = newObjects[j]; + + if (object.isSkinnedMesh) { + + object.bind(skeleton, controller.skin.bindMatrix); + object.normalizeSkinWeights(); + + } + + objects.push(object); + + } + + } + + // instance lights + + for (var i = 0, l = instanceLights.length; i < l; i++) { + var instanceCamera = getCamera(instanceCameras[i]); + + if (instanceCamera !== null) { + + objects.push(instanceCamera.clone()); + + } + + } + + // instance geometries + + for (var i = 0, l = instanceGeometries.length; i < l; i++) { + + var instance = instanceGeometries[i]; + + // a single geometry instance in collada can lead to multiple object3Ds. + // this is the case when primitives are combined like triangles and lines + + var geometries = getGeometry(instance.id); + var newObjects = buildObjects(geometries, instance.materials); + + for (var j = 0, jl = newObjects.length; j < jl; j++) { + + objects.push(newObjects[j]); + + } + + } + + // instance nodes + + for (var i = 0, l = instanceNodes.length; i < l; i++) { + + objects.push(getNode(instanceNodes[i]).clone()); + + } + + var object; + + if (nodes.length === 0 && objects.length === 1) { + + object = objects[0]; + + } else { + + object = (type === 'JOINT') ? new THREE$1.Bone() : new THREE$1.Group(); + + for (var i = 0; i < objects.length; i++) { + + object.add(objects[i]); + + } + + } + + object.name = (type === 'JOINT') ? data.sid : data.name; + object.matrix.copy(matrix); + object.matrix.decompose(object.position, object.quaternion, object.scale); + + return object; + + } + + function resolveMaterialBinding(keys, instanceMaterials) { + + var materials = []; + + for (var i = 0, l = keys.length; i < l; i++) { + + var id = instanceMaterials[keys[i]]; + materials.push(getMaterial(id)); + + } + + return materials; + + } + + function buildObjects(geometries, instanceMaterials) { + + var objects = []; + + for (var type in geometries) { + + var geometry = geometries[type]; + + var materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials); + + // handle case if no materials are defined + + if (materials.length === 0) { + + if (type === 'lines' || type === 'linestrips') { + + materials.push(new THREE$1.LineBasicMaterial()); + + } else { + + materials.push(new THREE$1.MeshPhongMaterial()); + + } + + } + + // regard skinning + + var skinning = (geometry.data.attributes.skinIndex !== undefined); + + if (skinning) { + + for (var i = 0, l = materials.length; i < l; i++) { + + materials[i].skinning = true; + + } + + } + + // choose between a single or multi materials (material array) + + var material = (materials.length === 1) ? materials[0] : materials; + + // now create a specific 3D object + + var object; + + switch (type) { + + case 'lines': + object = new THREE$1.LineSegments(geometry.data, material); + break; + + case 'linestrips': + object = new THREE$1.Line(geometry.data, material); + break; + + case 'triangles': + case 'polylist': + if (skinning) { + + object = new THREE$1.SkinnedMesh(geometry.data, material); + + } else { + + object = new THREE$1.Mesh(geometry.data, material); + + } + break; + + } + + objects.push(object); + + } + + return objects; + + } + + function getNode(id) { + + return getBuild(library.nodes[id], buildNode); + + } + + // visual scenes + + function parseVisualScene(xml) { + + var data = { + name: xml.getAttribute('name'), + children: [] + }; + + prepareNodes(xml); + + var elements = getElementsByTagName(xml, 'node'); + + for (var i = 0; i < elements.length; i++) { + + data.children.push(parseNode(elements[i])); + + } + + library.visualScenes[xml.getAttribute('id')] = data; + + } + + function buildVisualScene(data) { + + var group = new THREE$1.Group(); + group.name = data.name; + + var children = data.children; + + for (var i = 0; i < children.length; i++) { + + var child = children[i]; + + if (child.id === null) { + + group.add(buildNode(child)); + + } else { + + // if there is an ID, let's try to get the finished build (e.g. joints are already build) + + group.add(getNode(child.id)); + + } + + } + + return group; + + } + + function getVisualScene(id) { + + return getBuild(library.visualScenes[id], buildVisualScene); + + } + + // scenes + + function parseScene(xml) { + + var instance = getElementsByTagName(xml, 'instance_visual_scene')[0]; + return getVisualScene(parseId(instance.getAttribute('url'))); + + } + + function setupAnimations() { + + var clips = library.clips; + + if (isEmpty(clips) === true) { + + if (isEmpty(library.animations) === false) { + + // if there are animations but no clips, we create a default clip for playback + + var tracks = []; + + for (var id in library.animations) { + + var animationTracks = getAnimation(id); + + for (var i = 0, l = animationTracks.length; i < l; i++) { + + tracks.push(animationTracks[i]); + + } + + } + + animations.push(new THREE$1.AnimationClip('default', - 1, tracks)); + + } + + } else { + + for (var id in clips) { + + animations.push(getAnimationClip(id)); + + } + + } + + } + + console.time('THREE.ColladaLoader'); + + if (text.length === 0) { + + return { scene: new THREE$1.Scene() }; + + } + + console.time('THREE.ColladaLoader: DOMParser'); + + var xml = new DOMParser().parseFromString(text, 'application/xml'); + + console.timeEnd('THREE.ColladaLoader: DOMParser'); + + var collada = getElementsByTagName(xml, 'COLLADA')[0]; + + // metadata + + var version = collada.getAttribute('version'); + console.log('THREE.ColladaLoader: File version', version); + + var asset = parseAsset(getElementsByTagName(collada, 'asset')[0]); + var textureLoader = new THREE$1.TextureLoader(this.manager); + textureLoader.setPath(path).setCrossOrigin(this.crossOrigin); + + // + + var animations = []; + var kinematics = {}; + var count = 0; + + // + + var library = { + animations: {}, + clips: {}, + controllers: {}, + images: {}, + effects: {}, + materials: {}, + cameras: {}, + lights: {}, + geometries: {}, + nodes: {}, + visualScenes: {}, + kinematicsModels: {}, + kinematicsScenes: {} + }; + + console.time('THREE.ColladaLoader: Parse'); + + parseLibrary(collada, 'library_animations', 'animation', parseAnimation); + parseLibrary(collada, 'library_animation_clips', 'animation_clip', parseAnimationClip); + parseLibrary(collada, 'library_controllers', 'controller', parseController); + parseLibrary(collada, 'library_images', 'image', parseImage); + parseLibrary(collada, 'library_effects', 'effect', parseEffect); + parseLibrary(collada, 'library_materials', 'material', parseMaterial); + parseLibrary(collada, 'library_cameras', 'camera', parseCamera); + parseLibrary(collada, 'library_lights', 'light', parseLight); + parseLibrary(collada, 'library_geometries', 'geometry', parseGeometry); + parseLibrary(collada, 'library_nodes', 'node', parseNode); + parseLibrary(collada, 'library_visual_scenes', 'visual_scene', parseVisualScene); + parseLibrary(collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel); + parseLibrary(collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene); + + console.timeEnd('THREE.ColladaLoader: Parse'); + + console.time('THREE.ColladaLoader: Build'); + + buildLibrary(library.animations, buildAnimation); + buildLibrary(library.clips, buildAnimationClip); + buildLibrary(library.controllers, buildController); + buildLibrary(library.images, buildImage); + buildLibrary(library.effects, buildEffect); + buildLibrary(library.materials, buildMaterial); + buildLibrary(library.cameras, buildCamera); + buildLibrary(library.lights, buildLight); + buildLibrary(library.geometries, buildGeometry); + buildLibrary(library.visualScenes, buildVisualScene); + + console.timeEnd('THREE.ColladaLoader: Build'); + + setupAnimations(); + setupKinematics(); + + var scene = parseScene(getElementsByTagName(collada, 'scene')[0]); + + /* + * up_axis of some robot models in ROS world aren't properly set because + * rviz ignores this field. Thus, ignores Z_UP to show urdfs just like rviz. + * See https://github.com/ros-visualization/rviz/issues/1045 for the detail + if ( asset.upAxis === 'Z_UP' ) { + + scene.rotation.x = - Math.PI / 2; + + } + */ + + scene.scale.multiplyScalar(asset.unit); + + console.timeEnd('THREE.ColladaLoader'); + + return { + animations: animations, + kinematics: kinematics, + library: library, + scene: scene + }; + } - // rotation behavior - var rotInv = new THREE.Quaternion(); - var posInv = this.parent.position.clone().multiplyScalar(-1); - switch (message.orientation_mode) { - case ROS3D.INTERACTIVE_MARKER_INHERIT: - rotInv = this.parent.quaternion.clone().inverse(); - this.updateMatrixWorld = function(force) { - ROS3D.InteractiveMarkerControl.prototype.updateMatrixWorld.call(that, force); +}; + +/** + * @author Jihoon Lee - jihoonlee.in@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +class MeshResource extends THREE$1.Object3D { + + /** + * A MeshResource is an THREE object that will load from a external mesh file. Currently loads + * Collada files. + * + * @constructor + * @param options - object with following keys: + * + * * path (optional) - the base path to the associated models that will be loaded + * * resource - the resource file name to load + * * material (optional) - the material to use for the object + * * warnings (optional) - if warnings should be printed + */ + constructor(options) { + super(); + var that = this; + options = options || {}; + var path = options.path || '/'; + var resource = options.resource; + var material = options.material || null; + this.warnings = options.warnings; + + + // check for a trailing '/' + if (path.substr(path.length - 1) !== '/') { + path += '/'; + } + + var uri = path + resource; + var fileType = uri.substr(-4).toLowerCase(); + + // check the type + var loader; + if (fileType === '.dae') { + loader = new THREE$1.ColladaLoader(); + loader.log = function(message) { + if (that.warnings) { + console.warn(message); + } + }; + loader.load( + uri, + function colladaReady(collada) { + // check for a scale factor in ColladaLoader2 + // add a texture to anything that is missing one + if(material !== null) { + collada.scene.traverse(function(child) { + if(child instanceof THREE$1.Mesh) { + if(child.material === undefined) { + child.material = material; + } + } + }); + } + + that.add(collada.scene); + }, + /*onProgress=*/null, + function onLoadError(error) { + console.error(error); + }); + } else if (fileType === '.stl') { + loader = new THREE$1.STLLoader(); + { + loader.load(uri, + function ( geometry ) { + geometry.computeFaceNormals(); + var mesh; + if(material !== null) { + mesh = new THREE$1.Mesh( geometry, material ); + } else { + mesh = new THREE$1.Mesh( geometry, + new THREE$1.MeshBasicMaterial( { color: 0x999999 } ) ); + } + that.add(mesh); + }, + /*onProgress=*/null, + function onLoadError(error) { + console.error(error); + }); + } + } + }; +} + +/** + * @author David Gossow - dgossow@willowgarage.com + */ + +class TriangleList extends THREE$1.Object3D { + + /** + * A TriangleList is a THREE object that can be used to display a list of triangles as a geometry. + * + * @constructor + * @param options - object with following keys: + * + * * material (optional) - the material to use for the object + * * vertices - the array of vertices to use + * * colors - the associated array of colors to use + */ + constructor(options) { + options = options || {}; + var material = options.material || new THREE$1.MeshBasicMaterial(); + var vertices = options.vertices; + var colors = options.colors; + + super(); + + // set the material to be double sided + material.side = THREE$1.DoubleSide; + + // construct the geometry + var geometry = new THREE$1.Geometry(); + for (i = 0; i < vertices.length; i++) { + geometry.vertices.push(new THREE$1.Vector3(vertices[i].x, vertices[i].y, vertices[i].z)); + } + + // set the colors + var i, j; + if (colors.length === vertices.length) { + // use per-vertex color + for (i = 0; i < vertices.length; i += 3) { + var faceVert = new THREE$1.Face3(i, i + 1, i + 2); + for (j = i * 3; j < i * 3 + 3; i++) { + var color = new THREE$1.Color(); + color.setRGB(colors[i].r, colors[i].g, colors[i].b); + faceVert.vertexColors.push(color); + } + geometry.faces.push(faceVert); + } + material.vertexColors = THREE$1.VertexColors; + } else if (colors.length === vertices.length / 3) { + // use per-triangle color + for (i = 0; i < vertices.length; i += 3) { + var faceTri = new THREE$1.Face3(i, i + 1, i + 2); + faceTri.color.setRGB(colors[i / 3].r, colors[i / 3].g, colors[i / 3].b); + geometry.faces.push(faceTri); + } + material.vertexColors = THREE$1.FaceColors; + } else { + // use marker color + for (i = 0; i < vertices.length; i += 3) { + var face = new THREE$1.Face3(i, i + 1, i + 2); + geometry.faces.push(face); + } + } + + geometry.computeBoundingBox(); + geometry.computeBoundingSphere(); + geometry.computeFaceNormals(); + + this.add(new THREE$1.Mesh(geometry, material)); + }; + + /** + * Set the color of this object to the given hex value. + * + * @param hex - the hex value of the color to set + */ + setColor(hex) { + this.mesh.material.color.setHex(hex); + }; +} + +/** + * @author David Gossow - dgossow@willowgarage.com + * @author Russell Toris - rctoris@wpi.edu + */ + +class Marker extends THREE$1.Object3D { + + /** + * A Marker can convert a ROS marker message into a THREE object. + * + * @constructor + * @param options - object with following keys: + * + * * path - the base path or URL for any mesh files that will be loaded for this marker + * * message - the marker message + */ + constructor(options) { + super(); + + options = options || {}; + var path = options.path || '/'; + var message = options.message; + + // check for a trailing '/' + if (path.substr(path.length - 1) !== '/') { + path += '/'; + } + + if(message.scale) { + this.msgScale = [message.scale.x, message.scale.y, message.scale.z]; + } + else { + this.msgScale = [1,1,1]; + } + this.msgColor = message.color; + this.msgMesh = undefined; + + // set the pose and get the color + this.setPose(message.pose); + var colorMaterial = makeColorMaterial(this.msgColor.r, + this.msgColor.g, this.msgColor.b, this.msgColor.a); + + // create the object based on the type + switch (message.type) { + case MARKER_ARROW: + // get the sizes for the arrow + var len = message.scale.x; + var headLength = len * 0.23; + var headDiameter = message.scale.y; + var shaftDiameter = headDiameter * 0.5; + + // determine the points + var direction, p1 = null; + if (message.points.length === 2) { + p1 = new THREE$1.Vector3(message.points[0].x, message.points[0].y, message.points[0].z); + var p2 = new THREE$1.Vector3(message.points[1].x, message.points[1].y, message.points[1].z); + direction = p1.clone().negate().add(p2); + // direction = p2 - p1; + len = direction.length(); + headDiameter = message.scale.y; + shaftDiameter = message.scale.x; + + if (message.scale.z !== 0.0) { + headLength = message.scale.z; + } + } + + // add the marker + this.add(new Arrow({ + direction : direction, + origin : p1, + length : len, + headLength : headLength, + shaftDiameter : shaftDiameter, + headDiameter : headDiameter, + material : colorMaterial + })); + break; + case MARKER_CUBE: + // set the cube dimensions + var cubeGeom = new THREE$1.BoxGeometry(message.scale.x, message.scale.y, message.scale.z); + this.add(new THREE$1.Mesh(cubeGeom, colorMaterial)); + break; + case MARKER_SPHERE: + // set the sphere dimensions + var sphereGeom = new THREE$1.SphereGeometry(0.5); + var sphereMesh = new THREE$1.Mesh(sphereGeom, colorMaterial); + sphereMesh.scale.x = message.scale.x; + sphereMesh.scale.y = message.scale.y; + sphereMesh.scale.z = message.scale.z; + this.add(sphereMesh); + break; + case MARKER_CYLINDER: + // set the cylinder dimensions + var cylinderGeom = new THREE$1.CylinderGeometry(0.5, 0.5, 1, 16, 1, false); + var cylinderMesh = new THREE$1.Mesh(cylinderGeom, colorMaterial); + cylinderMesh.quaternion.setFromAxisAngle(new THREE$1.Vector3(1, 0, 0), Math.PI * 0.5); + cylinderMesh.scale.set(message.scale.x, message.scale.z, message.scale.y); + this.add(cylinderMesh); + break; + case MARKER_LINE_STRIP: + var lineStripGeom = new THREE$1.Geometry(); + var lineStripMaterial = new THREE$1.LineBasicMaterial({ + size : message.scale.x + }); + + // add the points + var j; + for ( j = 0; j < message.points.length; j++) { + var pt = new THREE$1.Vector3(); + pt.x = message.points[j].x; + pt.y = message.points[j].y; + pt.z = message.points[j].z; + lineStripGeom.vertices.push(pt); + } + + // determine the colors for each + if (message.colors.length === message.points.length) { + lineStripMaterial.vertexColors = true; + for ( j = 0; j < message.points.length; j++) { + var clr = new THREE$1.Color(); + clr.setRGB(message.colors[j].r, message.colors[j].g, message.colors[j].b); + lineStripGeom.colors.push(clr); + } + } else { + lineStripMaterial.color.setRGB(message.color.r, message.color.g, message.color.b); + } + + // add the line + this.add(new THREE$1.Line(lineStripGeom, lineStripMaterial)); + break; + case MARKER_LINE_LIST: + var lineListGeom = new THREE$1.Geometry(); + var lineListMaterial = new THREE$1.LineBasicMaterial({ + size : message.scale.x + }); + + // add the points + var k; + for ( k = 0; k < message.points.length; k++) { + var v = new THREE$1.Vector3(); + v.x = message.points[k].x; + v.y = message.points[k].y; + v.z = message.points[k].z; + lineListGeom.vertices.push(v); + } + + // determine the colors for each + if (message.colors.length === message.points.length) { + lineListMaterial.vertexColors = true; + for ( k = 0; k < message.points.length; k++) { + var c = new THREE$1.Color(); + c.setRGB(message.colors[k].r, message.colors[k].g, message.colors[k].b); + lineListGeom.colors.push(c); + } + } else { + lineListMaterial.color.setRGB(message.color.r, message.color.g, message.color.b); + } + + // add the line + this.add(new THREE$1.Line(lineListGeom, lineListMaterial,THREE$1.LinePieces)); + break; + case MARKER_CUBE_LIST: + // holds the main object + var object = new THREE$1.Object3D(); + + // check if custom colors should be used + var numPoints = message.points.length; + var createColors = (numPoints === message.colors.length); + // do not render giant lists + var stepSize = Math.ceil(numPoints / 1250); + + // add the points + var p, cube, curColor, newMesh; + for (p = 0; p < numPoints; p+=stepSize) { + cube = new THREE$1.BoxGeometry(message.scale.x, message.scale.y, message.scale.z); + + // check the color + if(createColors) { + curColor = makeColorMaterial(message.colors[p].r, message.colors[p].g, message.colors[p].b, message.colors[p].a); + } else { + curColor = colorMaterial; + } + + newMesh = new THREE$1.Mesh(cube, curColor); + newMesh.position.x = message.points[p].x; + newMesh.position.y = message.points[p].y; + newMesh.position.z = message.points[p].z; + object.add(newMesh); + } + + this.add(object); + break; + case MARKER_SPHERE_LIST: + // holds the main object + var sphereObject = new THREE$1.Object3D(); + + // check if custom colors should be used + var numSpherePoints = message.points.length; + var createSphereColors = (numSpherePoints === message.colors.length); + // do not render giant lists + var sphereStepSize = Math.ceil(numSpherePoints / 1250); + + // add the points + var q, sphere, curSphereColor, newSphereMesh; + for (q = 0; q < numSpherePoints; q+=sphereStepSize) { + sphere = new THREE$1.SphereGeometry(0.5, 8, 8); + + // check the color + if(createSphereColors) { + curSphereColor = makeColorMaterial(message.colors[q].r, message.colors[q].g, message.colors[q].b, message.colors[q].a); + } else { + curSphereColor = colorMaterial; + } + + newSphereMesh = new THREE$1.Mesh(sphere, curSphereColor); + newSphereMesh.scale.x = message.scale.x; + newSphereMesh.scale.y = message.scale.y; + newSphereMesh.scale.z = message.scale.z; + newSphereMesh.position.x = message.points[q].x; + newSphereMesh.position.y = message.points[q].y; + newSphereMesh.position.z = message.points[q].z; + sphereObject.add(newSphereMesh); + } + this.add(sphereObject); + break; + case MARKER_POINTS: + // for now, use a particle system for the lists + var geometry = new THREE$1.Geometry(); + var material = new THREE$1.ParticleBasicMaterial({ + size : message.scale.x + }); + + // add the points + var i; + for ( i = 0; i < message.points.length; i++) { + var vertex = new THREE$1.Vector3(); + vertex.x = message.points[i].x; + vertex.y = message.points[i].y; + vertex.z = message.points[i].z; + geometry.vertices.push(vertex); + } + + // determine the colors for each + if (message.colors.length === message.points.length) { + material.vertexColors = true; + for ( i = 0; i < message.points.length; i++) { + var color = new THREE$1.Color(); + color.setRGB(message.colors[i].r, message.colors[i].g, message.colors[i].b); + geometry.colors.push(color); + } + } else { + material.color.setRGB(message.color.r, message.color.g, message.color.b); + } + + // add the particle system + this.add(new THREE$1.ParticleSystem(geometry, material)); + break; + case MARKER_TEXT_VIEW_FACING: + // only work on non-empty text + if (message.text.length > 0) { + // Use a THREE.Sprite to always be view-facing + // ( code from http://stackoverflow.com/a/27348780 ) + var textColor = this.msgColor; + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + var textHeight = 100; + var fontString = 'normal ' + textHeight + 'px sans-serif'; + context.font = fontString; + var metrics = context.measureText( message.text ); + var textWidth = metrics.width; + + canvas.width = textWidth; + // To account for overhang (like the letter 'g'), make the canvas bigger + // The non-text portion is transparent anyway + canvas.height = 1.5 * textHeight; + + // this does need to be set again + context.font = fontString; + context.fillStyle = 'rgba(' + + Math.round(255 * textColor.r) + ', ' + + Math.round(255 * textColor.g) + ', ' + + Math.round(255 * textColor.b) + ', ' + + textColor.a + ')'; + context.textAlign = 'left'; + context.textBaseline = 'middle'; + context.fillText( message.text, 0, canvas.height/2); + + var texture = new THREE$1.Texture(canvas); + texture.needsUpdate = true; + + var spriteMaterial = new THREE$1.SpriteMaterial({ + map: texture, + // NOTE: This is needed for THREE.js r61, unused in r70 + useScreenCoordinates: false }); + var sprite = new THREE$1.Sprite( spriteMaterial ); + var textSize = message.scale.x; + sprite.scale.set(textWidth / canvas.height * textSize, textSize, 1); + + this.add(sprite); } + break; + case MARKER_MESH_RESOURCE: + // load and add the mesh + var meshColorMaterial = null; + if(message.color.r !== 0 || message.color.g !== 0 || + message.color.b !== 0 || message.color.a !== 0) { + meshColorMaterial = colorMaterial; + } + this.msgMesh = message.mesh_resource.substr(10); + var meshResource = new MeshResource({ + path : path, + resource : this.msgMesh, + material : meshColorMaterial, + }); + this.add(meshResource); + break; + case MARKER_TRIANGLE_LIST: + // create the list of triangles + var tri = new TriangleList({ + material : colorMaterial, + vertices : message.points, + colors : message.colors + }); + tri.scale.set(message.scale.x, message.scale.y, message.scale.z); + this.add(tri); + break; + default: + console.error('Currently unsupported marker type: ' + message.type); + break; + } + }; + + /** + * Set the pose of this marker to the given values. + * + * @param pose - the pose to set for this marker + */ + setPose(pose) { + // set position information + this.position.x = pose.position.x; + this.position.y = pose.position.y; + this.position.z = pose.position.z; + + // set the rotation + this.quaternion.set(pose.orientation.x, pose.orientation.y, + pose.orientation.z, pose.orientation.w); + this.quaternion.normalize(); + + // update the world + this.updateMatrixWorld(); + }; + + /** + * Update this marker. + * + * @param message - the marker message + * @return true on success otherwhise false is returned + */ + update(message) { + // set the pose and get the color + this.setPose(message.pose); + + // Update color + if(message.color.r !== this.msgColor.r || + message.color.g !== this.msgColor.g || + message.color.b !== this.msgColor.b || + message.color.a !== this.msgColor.a) + { + var colorMaterial = makeColorMaterial( + message.color.r, message.color.g, + message.color.b, message.color.a); + + switch (message.type) { + case MARKER_LINE_STRIP: + case MARKER_LINE_LIST: + case MARKER_POINTS: + break; + case MARKER_ARROW: + case MARKER_CUBE: + case MARKER_SPHERE: + case MARKER_CYLINDER: + case MARKER_TRIANGLE_LIST: + case MARKER_TEXT_VIEW_FACING: + this.traverse (function (child){ + if (child instanceof THREE$1.Mesh) { + child.material = colorMaterial; + } + }); + break; + case MARKER_MESH_RESOURCE: + var meshColorMaterial = null; + if(message.color.r !== 0 || message.color.g !== 0 || + message.color.b !== 0 || message.color.a !== 0) { + meshColorMaterial = this.colorMaterial; + } + this.traverse (function (child){ + if (child instanceof THREE$1.Mesh) { + child.material = meshColorMaterial; + } + }); + break; + case MARKER_CUBE_LIST: + case MARKER_SPHERE_LIST: + // TODO Support to update color for MARKER_CUBE_LIST & MARKER_SPHERE_LIST + return false; + default: + return false; + } + + this.msgColor = message.color; + } + + // Update geometry + var scaleChanged = + Math.abs(this.msgScale[0] - message.scale.x) > 1.0e-6 || + Math.abs(this.msgScale[1] - message.scale.y) > 1.0e-6 || + Math.abs(this.msgScale[2] - message.scale.z) > 1.0e-6; + this.msgScale = [message.scale.x, message.scale.y, message.scale.z]; + + switch (message.type) { + case MARKER_CUBE: + case MARKER_SPHERE: + case MARKER_CYLINDER: + if(scaleChanged) { + return false; + } + break; + case MARKER_TEXT_VIEW_FACING: + if(scaleChanged || this.text !== message.text) { + return false; + } + break; + case MARKER_MESH_RESOURCE: + var meshResource = message.mesh_resource.substr(10); + if(meshResource !== this.msgMesh) { + return false; + } + if(scaleChanged) { + return false; + } + break; + case MARKER_ARROW: + case MARKER_LINE_STRIP: + case MARKER_LINE_LIST: + case MARKER_CUBE_LIST: + case MARKER_SPHERE_LIST: + case MARKER_POINTS: + case MARKER_TRIANGLE_LIST: + // TODO: Check if geometry changed + return false; + default: + break; + } + + return true; + }; + + /* + * Free memory of elements in this marker. + */ + dispose() { + this.children.forEach(function(element) { + if (element instanceof MeshResource) { + element.children.forEach(function(scene) { + if (scene.material !== undefined) { + scene.material.dispose(); + } + scene.children.forEach(function(mesh) { + if (mesh.geometry !== undefined) { + mesh.geometry.dispose(); + } + if (mesh.material !== undefined) { + mesh.material.dispose(); + } + scene.remove(mesh); + }); + element.remove(scene); + }); + } else { + if (element.geometry !== undefined) { + element.geometry.dispose(); + } + if (element.material !== undefined) { + element.material.dispose(); + } + } + element.parent.remove(element); + }); + }; +} + +/** + * @author David Gossow - dgossow@willowgarage.com + */ + +class InteractiveMarkerControl extends THREE$1.Object3D { + + /** + * The main marker control object for an interactive marker. + * + * @constructor + * @param options - object with following keys: + * + * * parent - the parent of this control + * * message - the interactive marker control message + * * camera - the main camera associated with the viewer for this marker client + * * path (optional) - the base path to any meshes that will be loaded + * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER) + */ + constructor(options) { + super(); + var that = this; + + options = options || {}; + this.parent = options.parent; + var handle = options.handle; + var message = options.message; + this.message = message; + this.name = message.name; + this.camera = options.camera; + this.path = options.path || '/'; + this.loader = options.loader; + this.dragging = false; + this.startMousePos = new THREE$1.Vector2(); + this.isShift = false; + + + // orientation for the control + var controlOri = new THREE$1.Quaternion(message.orientation.x, message.orientation.y, + message.orientation.z, message.orientation.w); + controlOri.normalize(); + + // transform x axis into local frame + var controlAxis = new THREE$1.Vector3(1, 0, 0); + controlAxis.applyQuaternion(controlOri); + + this.currentControlOri = new THREE$1.Quaternion(); + + // determine mouse interaction + switch (message.interaction_mode) { + case INTERACTIVE_MARKER_MOVE_ROTATE_3D: + case INTERACTIVE_MARKER_MOVE_3D: + this.addEventListener('mousemove', this.parent.move3d.bind(this.parent, this, controlAxis)); + case INTERACTIVE_MARKER_MOVE_AXIS: + this.addEventListener('mousemove', this.parent.moveAxis.bind(this.parent, this, controlAxis)); + this.addEventListener('touchmove', this.parent.moveAxis.bind(this.parent, this, controlAxis)); + break; + case INTERACTIVE_MARKER_ROTATE_AXIS: + this + .addEventListener('mousemove', this.parent.rotateAxis.bind(this.parent, this, controlOri)); + break; + case INTERACTIVE_MARKER_MOVE_PLANE: + this + .addEventListener('mousemove', this.parent.movePlane.bind(this.parent, this, controlAxis)); + break; + case INTERACTIVE_MARKER_BUTTON: + this.addEventListener('click', this.parent.buttonClick.bind(this.parent, this)); + break; + default: + break; + } + + /** + * Install default listeners for highlighting / dragging. + * + * @param event - the event to stop + */ + function stopPropagation(event) { + event.stopPropagation(); + } + + // check the mode + if (message.interaction_mode !== INTERACTIVE_MARKER_NONE) { + this.addEventListener('mousedown', this.parent.startDrag.bind(this.parent, this)); + this.addEventListener('mouseup', this.parent.stopDrag.bind(this.parent, this)); + this.addEventListener('contextmenu', this.parent.showMenu.bind(this.parent, this)); + this.addEventListener('mouseup', function(event3d) { + if (that.startMousePos.distanceToSquared(event3d.mousePos) === 0) { + event3d.type = 'contextmenu'; + that.dispatchEvent(event3d); + } + }); + this.addEventListener('mouseover', stopPropagation); + this.addEventListener('mouseout', stopPropagation); + this.addEventListener('click', stopPropagation); + this.addEventListener('mousedown', function(event3d) { + that.startMousePos = event3d.mousePos; + }); + + // touch support + this.addEventListener('touchstart', function(event3d) { + if (event3d.domEvent.touches.length === 1) { + event3d.type = 'mousedown'; + event3d.domEvent.button = 0; + that.dispatchEvent(event3d); + } + }); + this.addEventListener('touchmove', function(event3d) { + if (event3d.domEvent.touches.length === 1) { + event3d.type = 'mousemove'; + event3d.domEvent.button = 0; + that.dispatchEvent(event3d); + } + }); + this.addEventListener('touchend', function(event3d) { + if (event3d.domEvent.touches.length === 0) { + event3d.domEvent.button = 0; + event3d.type = 'mouseup'; + that.dispatchEvent(event3d); + event3d.type = 'click'; + that.dispatchEvent(event3d); + } + }); + + window.addEventListener('keydown', function(event){ + if(event.keyCode === 16){ + that.isShift = true; + } + }); + window.addEventListener('keyup', function(event){ + if(event.keyCode === 16){ + that.isShift = false; + } + }); + } + + // rotation behavior + var rotInv = new THREE$1.Quaternion(); + var posInv = this.parent.position.clone().multiplyScalar(-1); + switch (message.orientation_mode) { + case INTERACTIVE_MARKER_INHERIT: + rotInv = this.parent.quaternion.clone().inverse(); + break; + case INTERACTIVE_MARKER_FIXED: + break; + case INTERACTIVE_MARKER_VIEW_FACING: + break; + default: + console.error('Unkown orientation mode: ' + message.orientation_mode); + break; + } + + // temporary TFClient to get transformations from InteractiveMarker + // frame to potential child Marker frames + var localTfClient = new ROSLIB.TFClient({ + ros : handle.tfClient.ros, + fixedFrame : handle.message.header.frame_id, + serverName : handle.tfClient.serverName + }); + + // create visuals (markers) + message.markers.forEach(function(markerMsg) { + var addMarker = function(transformMsg) { + var markerHelper = new Marker({ + message : markerMsg, + path : that.path, + loader : that.loader + }); + + // if transformMsg isn't null, this was called by TFClient + if (transformMsg !== null) { + // get the current pose as a ROSLIB.Pose... + var newPose = new ROSLIB.Pose({ + position : markerHelper.position, + orientation : markerHelper.quaternion + }); + // so we can apply the transform provided by the TFClient + newPose.applyTransform(new ROSLIB.Transform(transformMsg)); + + // get transform between parent marker's location and its frame + // apply it to sub-marker position to get sub-marker position + // relative to parent marker + var transformMarker = new Marker({ + message : markerMsg, + path : that.path, + loader : that.loader + }); + transformMarker.position.add(posInv); + transformMarker.position.applyQuaternion(rotInv); + transformMarker.quaternion.multiplyQuaternions(rotInv, transformMarker.quaternion); + var translation = new THREE$1.Vector3(transformMarker.position.x, transformMarker.position.y, transformMarker.position.z); + var transform = new ROSLIB.Transform({ + translation : translation, + orientation : transformMarker.quaternion + }); + + // apply that transform too + newPose.applyTransform(transform); + + markerHelper.setPose(newPose); + + markerHelper.updateMatrixWorld(); + // we only need to set the pose once - at least, this is what RViz seems to be doing, might change in the future + localTfClient.unsubscribe(markerMsg.header.frame_id); + } + + // add the marker + that.add(markerHelper); + }; + + // If the marker is not relative to the parent marker's position, + // ask the *local* TFClient for the transformation from the + // InteractiveMarker frame to the sub-Marker frame + if (markerMsg.header.frame_id !== '') { + localTfClient.subscribe(markerMsg.header.frame_id, addMarker); + } + // If not, just add the marker without changing its pose + else { + addMarker(null); + } + }); + }; + + updateMatrixWorld (force) { + var that = this; + var message = this.message; + switch (message.orientation_mode) { + case INTERACTIVE_MARKER_INHERIT: + super.updateMatrixWorld(force); that.currentControlOri.copy(that.quaternion); that.currentControlOri.normalize(); - }; - break; - case ROS3D.INTERACTIVE_MARKER_FIXED: - this.updateMatrixWorld = function(force) { - that.quaternion = that.parent.quaternion.clone().inverse(); + break; + case INTERACTIVE_MARKER_FIXED: + that.quaternion.copy(that.parent.quaternion.clone().inverse()); that.updateMatrix(); that.matrixWorldNeedsUpdate = true; - ROS3D.InteractiveMarkerControl.prototype.updateMatrixWorld.call(that, force); + super.updateMatrixWorld(force); that.currentControlOri.copy(that.quaternion); - }; - break; - case ROS3D.INTERACTIVE_MARKER_VIEW_FACING: - var independentMarkerOrientation = message.independent_marker_orientation; - this.updateMatrixWorld = function(force) { + break; + case INTERACTIVE_MARKER_VIEW_FACING: that.camera.updateMatrixWorld(); - var cameraRot = new THREE.Matrix4().extractRotation(that.camera.matrixWorld); + var cameraRot = new THREE$1.Matrix4().extractRotation(that.camera.matrixWorld); - var ros2Gl = new THREE.Matrix4(); + var ros2Gl = new THREE$1.Matrix4(); var r90 = Math.PI * 0.5; - var rv = new THREE.Euler(-r90, 0, r90); + var rv = new THREE$1.Euler(-r90, 0, r90); ros2Gl.makeRotationFromEuler(rv); - var worldToLocal = new THREE.Matrix4(); + var worldToLocal = new THREE$1.Matrix4(); worldToLocal.getInverse(that.parent.matrixWorld); cameraRot.multiplyMatrices(cameraRot, ros2Gl); @@ -1156,2233 +51275,3896 @@ ROS3D.InteractiveMarkerControl = function(options) { that.currentControlOri.setFromRotationMatrix(cameraRot); // check the orientation - if (!independentMarkerOrientation) { + if (!message.independent_marker_orientation) { that.quaternion.copy(that.currentControlOri); that.updateMatrix(); that.matrixWorldNeedsUpdate = true; } - ROS3D.InteractiveMarkerControl.prototype.updateMatrixWorld.call(that, force); - }; - break; - default: - console.error('Unkown orientation mode: ' + message.orientation_mode); - break; - } - - // temporary TFClient to get transformations from InteractiveMarker - // frame to potential child Marker frames - var localTfClient = new ROSLIB.TFClient({ - ros : handle.tfClient.ros, - fixedFrame : handle.message.header.frame_id, - }); - - // create visuals (markers) - message.markers.forEach(function(markerMsg) { - var addMarker = function(transformMsg) { - var markerHelper = new ROS3D.Marker({ - message : markerMsg, - path : that.path, - loader : that.loader - }); - - // if transformMsg isn't null, this was called by TFClient - if (transformMsg !== null) { - // get the current pose as a ROSLIB.Pose... - var newPose = new ROSLIB.Pose({ - position : markerHelper.position, - orientation : markerHelper.quaternion - }); - // so we can apply the transform provided by the TFClient - newPose.applyTransform(new ROSLIB.Transform(transformMsg)); - markerHelper.setPose(newPose); - - markerHelper.updateMatrixWorld(); - // we only need to set the pose once - at least, this is what RViz seems to be doing, might change in the future - localTfClient.unsubscribe(markerMsg.header.frame_id); - } - - // add the marker - that.add(markerHelper); - }; - - // If the marker lives in a separate TF Frame, ask the *local* TFClient - // for the transformation from the InteractiveMarker frame to the - // sub-Marker frame - if (markerMsg.header.frame_id !== '') { - localTfClient.subscribe(markerMsg.header.frame_id, addMarker); + super.updateMatrixWorld(force); + break; + default: + console.error('Unkown orientation mode: ' + message.orientation_mode); + break; } - // If not, just add the marker without changing its pose - else { - addMarker(null); - } - }); -}; -ROS3D.InteractiveMarkerControl.prototype.__proto__ = THREE.Object3D.prototype; + }; +} /** * @author David Gossow - dgossow@willowgarage.com */ -/** - * Handle with signals for a single interactive marker. - * - * Emits the following events: - * - * * 'pose' - emitted when a new pose comes from the server - * - * @constructor - * @param options - object with following keys: - * - * * message - the interactive marker message - * * feedbackTopic - the ROSLIB.Topic associated with the feedback - * * tfClient - a handle to the TF client to use - * * menuFontSize (optional) - the menu font size - */ -ROS3D.InteractiveMarkerHandle = function(options) { - options = options || {}; - this.message = options.message; - this.feedbackTopic = options.feedbackTopic; - this.tfClient = options.tfClient; - this.menuFontSize = options.menuFontSize || '0.8em'; - this.name = this.message.name; - this.header = this.message.header; - this.controls = this.message.controls; - this.menuEntries = this.message.menu_entries; - this.dragging = false; - this.timeoutHandle = null; - this.tfTransform = new ROSLIB.Transform(); - this.pose = new ROSLIB.Pose(); +class InteractiveMarkerMenu extends THREE$1.EventDispatcher { - // start by setting the pose - this.setPoseFromServer(this.message.pose); -}; -ROS3D.InteractiveMarkerHandle.prototype.__proto__ = EventEmitter2.prototype; + /** + * A menu for an interactive marker. This will be overlayed on the canvas. + * + * @constructor + * @param options - object with following keys: + * + * * menuEntries - the menu entries to add + * * className (optional) - a custom CSS class for the menu div + * * entryClassName (optional) - a custom CSS class for the menu entry + * * overlayClassName (optional) - a custom CSS class for the menu overlay + * * menuFontSize (optional) - the menu font size + */ + constructor(options) { + super(); + var that = this; + options = options || {}; + var menuEntries = options.menuEntries; + var className = options.className || 'default-interactive-marker-menu'; + var entryClassName = options.entryClassName || 'default-interactive-marker-menu-entry'; + var overlayClassName = options.overlayClassName || 'default-interactive-marker-overlay'; + var menuFontSize = options.menuFontSize || '0.8em'; + + // holds the menu tree + var allMenus = []; + allMenus[0] = { + children : [] + }; + + + // create the CSS for this marker if it has not been created + if (document.getElementById('default-interactive-marker-menu-css') === null) { + var style = document.createElement('style'); + style.id = 'default-interactive-marker-menu-css'; + style.type = 'text/css'; + style.innerHTML = '.default-interactive-marker-menu {' + 'background-color: #444444;' + + 'border: 1px solid #888888;' + 'border: 1px solid #888888;' + 'padding: 0px 0px 0px 0px;' + + 'color: #FFFFFF;' + 'font-family: sans-serif;' + 'font-size: ' + menuFontSize +';' + 'z-index: 1002;' + + '}' + '.default-interactive-marker-menu ul {' + 'padding: 0px 0px 5px 0px;' + + 'margin: 0px;' + 'list-style-type: none;' + '}' + + '.default-interactive-marker-menu ul li div {' + '-webkit-touch-callout: none;' + + '-webkit-user-select: none;' + '-khtml-user-select: none;' + '-moz-user-select: none;' + + '-ms-user-select: none;' + 'user-select: none;' + 'cursor: default;' + + 'padding: 3px 10px 3px 10px;' + '}' + '.default-interactive-marker-menu-entry:hover {' + + ' background-color: #666666;' + ' cursor: pointer;' + '}' + + '.default-interactive-marker-menu ul ul {' + ' font-style: italic;' + + ' padding-left: 10px;' + '}' + '.default-interactive-marker-overlay {' + + ' position: absolute;' + ' top: 0%;' + ' left: 0%;' + ' width: 100%;' + + ' height: 100%;' + ' background-color: black;' + ' z-index: 1001;' + + ' -moz-opacity: 0.0;' + ' opacity: .0;' + ' filter: alpha(opacity = 0);' + '}'; + document.getElementsByTagName('head')[0].appendChild(style); + } + + // place the menu in a div + this.menuDomElem = document.createElement('div'); + this.menuDomElem.style.position = 'absolute'; + this.menuDomElem.className = className; + this.menuDomElem.addEventListener('contextmenu', function(event) { + event.preventDefault(); + }); + + // create the overlay DOM + this.overlayDomElem = document.createElement('div'); + this.overlayDomElem.className = overlayClassName; + + this.hideListener = this.hide.bind(this); + this.overlayDomElem.addEventListener('contextmenu', this.hideListener); + this.overlayDomElem.addEventListener('click', this.hideListener); + this.overlayDomElem.addEventListener('touchstart', this.hideListener); + + // parse all entries and link children to parents + var i, entry, id; + for ( i = 0; i < menuEntries.length; i++) { + entry = menuEntries[i]; + id = entry.id; + allMenus[id] = { + title : entry.title, + id : id, + children : [] + }; + } + for ( i = 0; i < menuEntries.length; i++) { + entry = menuEntries[i]; + id = entry.id; + var menu = allMenus[id]; + var parent = allMenus[entry.parent_id]; + parent.children.push(menu); + } + + function emitMenuSelect(menuEntry, domEvent) { + this.dispatchEvent({ + type : 'menu-select', + domEvent : domEvent, + id : menuEntry.id, + controlName : this.controlName + }); + this.hide(domEvent); + } + + /** + * Create the HTML UL element for the menu and link it to the parent. + * + * @param parentDomElem - the parent DOM element + * @param parentMenu - the parent menu + */ + function makeUl(parentDomElem, parentMenu) { + + var ulElem = document.createElement('ul'); + parentDomElem.appendChild(ulElem); + + var children = parentMenu.children; + + for ( var i = 0; i < children.length; i++) { + var liElem = document.createElement('li'); + var divElem = document.createElement('div'); + divElem.appendChild(document.createTextNode(children[i].title)); + ulElem.appendChild(liElem); + liElem.appendChild(divElem); + + if (children[i].children.length > 0) { + makeUl(liElem, children[i]); + divElem.addEventListener('click', that.hide.bind(that)); + divElem.addEventListener('touchstart', that.hide.bind(that)); + } else { + divElem.addEventListener('click', emitMenuSelect.bind(that, children[i])); + divElem.addEventListener('touchstart', emitMenuSelect.bind(that, children[i])); + divElem.className = 'default-interactive-marker-menu-entry'; + } + } + + } + + // construct DOM element + makeUl(this.menuDomElem, allMenus[0]); + }; + + /** + * Shoe the menu DOM element. + * + * @param control - the control for the menu + * @param event - the event that caused this + */ + show(control, event) { + if (event && event.preventDefault) { + event.preventDefault(); + } + + this.controlName = control.name; + + // position it on the click + if (event.domEvent.changedTouches !== undefined) { + // touch click + this.menuDomElem.style.left = event.domEvent.changedTouches[0].pageX + 'px'; + this.menuDomElem.style.top = event.domEvent.changedTouches[0].pageY + 'px'; + } else { + // mouse click + this.menuDomElem.style.left = event.domEvent.clientX + 'px'; + this.menuDomElem.style.top = event.domEvent.clientY + 'px'; + } + document.body.appendChild(this.overlayDomElem); + document.body.appendChild(this.menuDomElem); + }; + + /** + * Hide the menu DOM element. + * + * @param event (optional) - the event that caused this + */ + hide(event) { + if (event && event.preventDefault) { + event.preventDefault(); + } + + document.body.removeChild(this.overlayDomElem); + document.body.removeChild(this.menuDomElem); + }; +} /** - * Subscribe to the TF associated with this interactive marker. + * @author David Gossow - dgossow@willowgarage.com */ -ROS3D.InteractiveMarkerHandle.prototype.subscribeTf = function() { - // subscribe to tf updates if frame-fixed - if (this.message.header.stamp.secs === 0.0 && this.message.header.stamp.nsecs === 0.0) { - this.tfClient.subscribe(this.message.header.frame_id, this.tfUpdate.bind(this)); - } -}; + +class InteractiveMarker extends THREE$1.Object3D { + + /** + * The main interactive marker object. + * + * @constructor + * @param options - object with following keys: + * + * * handle - the ROS3D.InteractiveMarkerHandle for this marker + * * camera - the main camera associated with the viewer for this marker + * * path (optional) - the base path to any meshes that will be loaded + * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER) + */ + constructor(options) { + super(); + + var that = this; + options = options || {}; + var handle = options.handle; + this.name = handle.name; + var camera = options.camera; + var path = options.path || '/'; + var loader = options.loader; + this.dragging = false; + + // set the initial pose + this.onServerSetPose({ + pose : handle.pose + }); + + // information on where the drag started + this.dragStart = { + position : new THREE$1.Vector3(), + orientation : new THREE$1.Quaternion(), + positionWorld : new THREE$1.Vector3(), + orientationWorld : new THREE$1.Quaternion(), + event3d : {} + }; + + // add each control message + handle.controls.forEach(function(controlMessage) { + that.add(new InteractiveMarkerControl({ + parent : that, + handle : handle, + message : controlMessage, + camera : camera, + path : path, + loader : loader + })); + }); + + // check for any menus + if (handle.menuEntries.length > 0) { + this.menu = new InteractiveMarkerMenu({ + menuEntries : handle.menuEntries, + menuFontSize : handle.menuFontSize + }); + + // forward menu select events + this.menu.addEventListener('menu-select', function(event) { + that.dispatchEvent(event); + }); + } + }; + + /** + * Show the interactive marker menu associated with this marker. + * + * @param control - the control to use + * @param event - the event that caused this + */ + showMenu(control, event) { + if (this.menu) { + this.menu.show(control, event); + } + }; + + /** + * Move the axis based on the given event information. + * + * @param control - the control to use + * @param origAxis - the origin of the axis + * @param event3d - the event that caused this + */ + moveAxis(control, origAxis, event3d) { + if (this.dragging) { + var currentControlOri = control.currentControlOri; + var axis = origAxis.clone().applyQuaternion(currentControlOri); + // get move axis in world coords + var originWorld = this.dragStart.event3d.intersection.point; + var axisWorld = axis.clone().applyQuaternion(this.dragStart.orientationWorld.clone()); + + var axisRay = new THREE$1.Ray(originWorld, axisWorld); + + // find closest point to mouse on axis + var t = closestAxisPoint(axisRay, event3d.camera, event3d.mousePos); + + // offset from drag start position + var p = new THREE$1.Vector3(); + p.addVectors(this.dragStart.position, axis.clone().applyQuaternion(this.dragStart.orientation) + .multiplyScalar(t)); + this.setPosition(control, p); + + + event3d.stopPropagation(); + } + }; + + + /** + * Move with respect to the plane based on the contorl and event. + * + * @param control - the control to use + * @param origNormal - the normal of the origin + * @param event3d - the event that caused this + */ + move3d(control, origNormal, event3d) { + // by default, move in a plane + if (this.dragging) { + + if(control.isShift){ + // this doesn't work + // // use the camera position and the marker position to determine the axis + // var newAxis = control.camera.position.clone(); + // newAxis.sub(this.position); + // // now mimic same steps constructor uses to create origAxis + // var controlOri = new THREE.Quaternion(newAxis.x, newAxis.y, + // newAxis.z, 1); + // controlOri.normalize(); + // var controlAxis = new THREE.Vector3(1, 0, 0); + // controlAxis.applyQuaternion(controlOri); + // origAxis = controlAxis; + }else{ + // we want to use the origin plane that is closest to the camera + var cameraVector = control.camera.getWorldDirection(); + var x = Math.abs(cameraVector.x); + var y = Math.abs(cameraVector.y); + var z = Math.abs(cameraVector.z); + var controlOri = new THREE$1.Quaternion(1, 0, 0, 1); + if(y > x && y > z){ + // orientation for the control + controlOri = new THREE$1.Quaternion(0, 0, 1, 1); + }else if(z > x && z > y){ + // orientation for the control + controlOri = new THREE$1.Quaternion(0, 1, 0, 1); + } + controlOri.normalize(); + + // transform x axis into local frame + origNormal = new THREE$1.Vector3(1, 0, 0); + origNormal.applyQuaternion(controlOri); + this.movePlane(control, origNormal, event3d); + } + } + }; + + /** + * Move with respect to the plane based on the contorl and event. + * + * @param control - the control to use + * @param origNormal - the normal of the origin + * @param event3d - the event that caused this + */ + movePlane(control, origNormal, event3d) { + if (this.dragging) { + var currentControlOri = control.currentControlOri; + var normal = origNormal.clone().applyQuaternion(currentControlOri); + // get plane params in world coords + var originWorld = this.dragStart.event3d.intersection.point; + var normalWorld = normal.clone().applyQuaternion(this.dragStart.orientationWorld); + + // intersect mouse ray with plane + var intersection = intersectPlane(event3d.mouseRay, originWorld, normalWorld); + + // offset from drag start position + var p = new THREE$1.Vector3(); + p.subVectors(intersection, originWorld); + p.add(this.dragStart.positionWorld); + this.setPosition(control, p); + event3d.stopPropagation(); + } + }; + + /** + * Rotate based on the control and event given. + * + * @param control - the control to use + * @param origOrientation - the orientation of the origin + * @param event3d - the event that caused this + */ + rotateAxis(control, origOrientation, event3d) { + if (this.dragging) { + control.updateMatrixWorld(); + + var currentControlOri = control.currentControlOri; + var orientation = currentControlOri.clone().multiply(origOrientation.clone()); + + var normal = (new THREE$1.Vector3(1, 0, 0)).applyQuaternion(orientation); + + // get plane params in world coords + var originWorld = this.dragStart.event3d.intersection.point; + var normalWorld = normal.applyQuaternion(this.dragStart.orientationWorld); + + // intersect mouse ray with plane + var intersection = intersectPlane(event3d.mouseRay, originWorld, normalWorld); + + // offset local origin to lie on intersection plane + var normalRay = new THREE$1.Ray(this.dragStart.positionWorld, normalWorld); + var rotOrigin = intersectPlane(normalRay, originWorld, normalWorld); + + // rotates from world to plane coords + var orientationWorld = this.dragStart.orientationWorld.clone().multiply(orientation); + var orientationWorldInv = orientationWorld.clone().inverse(); + + // rotate original and current intersection into local coords + intersection.sub(rotOrigin); + intersection.applyQuaternion(orientationWorldInv); + + var origIntersection = this.dragStart.event3d.intersection.point.clone(); + origIntersection.sub(rotOrigin); + origIntersection.applyQuaternion(orientationWorldInv); + + // compute relative 2d angle + var a1 = Math.atan2(intersection.y, intersection.z); + var a2 = Math.atan2(origIntersection.y, origIntersection.z); + var a = a2 - a1; + + var rot = new THREE$1.Quaternion(); + rot.setFromAxisAngle(normal, a); + + // rotate + this.setOrientation(control, rot.multiply(this.dragStart.orientationWorld)); + + // offset from drag start position + event3d.stopPropagation(); + } + }; + + /** + * Dispatch the given event type. + * + * @param type - the type of event + * @param control - the control to use + */ + feedbackEvent(type, control) { + this.dispatchEvent({ + type : type, + position : this.position.clone(), + orientation : this.quaternion.clone(), + controlName : control.name + }); + }; + + /** + * Start a drag action. + * + * @param control - the control to use + * @param event3d - the event that caused this + */ + startDrag(control, event3d) { + if (event3d.domEvent.button === 0) { + event3d.stopPropagation(); + this.dragging = true; + this.updateMatrixWorld(true); + var scale = new THREE$1.Vector3(); + this.matrixWorld + .decompose(this.dragStart.positionWorld, this.dragStart.orientationWorld, scale); + this.dragStart.position = this.position.clone(); + this.dragStart.orientation = this.quaternion.clone(); + this.dragStart.event3d = event3d; + + this.feedbackEvent('user-mousedown', control); + } + }; + + /** + * Stop a drag action. + * + * @param control - the control to use + * @param event3d - the event that caused this + */ + stopDrag(control, event3d) { + if (event3d.domEvent.button === 0) { + event3d.stopPropagation(); + this.dragging = false; + this.dragStart.event3d = {}; + this.onServerSetPose(this.bufferedPoseEvent); + this.bufferedPoseEvent = undefined; + + this.feedbackEvent('user-mouseup', control); + } + }; + + /** + * Handle a button click. + * + * @param control - the control to use + * @param event3d - the event that caused this + */ + buttonClick(control, event3d) { + event3d.stopPropagation(); + this.feedbackEvent('user-button-click', control); + }; + + /** + * Handle a user pose change for the position. + * + * @param control - the control to use + * @param event3d - the event that caused this + */ + setPosition(control, position) { + this.position.copy(position); + this.feedbackEvent('user-pose-change', control); + }; + + /** + * Handle a user pose change for the orientation. + * + * @param control - the control to use + * @param event3d - the event that caused this + */ + setOrientation(control, orientation) { + orientation.normalize(); + this.quaternion.copy(orientation); + this.feedbackEvent('user-pose-change', control); + }; + + /** + * Update the marker based when the pose is set from the server. + * + * @param event - the event that caused this + */ + onServerSetPose(event) { + if (event !== undefined) { + // don't update while dragging + if (this.dragging) { + this.bufferedPoseEvent = event; + } else { + var pose = event.pose; + this.position.copy(pose.position); + this.quaternion.copy(pose.orientation); + this.updateMatrixWorld(true); + } + } + }; + + /** + * Free memory of elements in this marker. + */ + dispose() { + var that = this; + this.children.forEach(function(intMarkerControl) { + intMarkerControl.children.forEach(function(marker) { + marker.dispose(); + intMarkerControl.remove(marker); + }); + that.remove(intMarkerControl); + }); + }; +} + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var eventemitter2 = createCommonjsModule(function (module, exports) { +!function(undefined) { + + var isArray = Array.isArray ? Array.isArray : function _isArray(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + var defaultMaxListeners = 10; + + function init() { + this._events = {}; + if (this._conf) { + configure.call(this, this._conf); + } + } + + function configure(conf) { + if (conf) { + this._conf = conf; + + conf.delimiter && (this.delimiter = conf.delimiter); + this._maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners; + + conf.wildcard && (this.wildcard = conf.wildcard); + conf.newListener && (this.newListener = conf.newListener); + conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak); + + if (this.wildcard) { + this.listenerTree = {}; + } + } else { + this._maxListeners = defaultMaxListeners; + } + } + + function logPossibleMemoryLeak(count, eventName) { + var errorMsg = '(node) warning: possible EventEmitter memory ' + + 'leak detected. ' + count + ' listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.'; + + if(this.verboseMemoryLeak){ + errorMsg += ' Event name: ' + eventName + '.'; + } + + if(typeof process !== 'undefined' && process.emitWarning){ + var e = new Error(errorMsg); + e.name = 'MaxListenersExceededWarning'; + e.emitter = this; + e.count = count; + process.emitWarning(e); + } else { + console.error(errorMsg); + + if (console.trace){ + console.trace(); + } + } + } + + function EventEmitter(conf) { + this._events = {}; + this.newListener = false; + this.verboseMemoryLeak = false; + configure.call(this, conf); + } + EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property + + // + // Attention, function return type now is array, always ! + // It has zero elements if no any matches found and one or more + // elements (leafs) if there are matches + // + function searchListenerTree(handlers, type, tree, i) { + if (!tree) { + return []; + } + var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached, + typeLength = type.length, currentType = type[i], nextType = type[i+1]; + if (i === typeLength && tree._listeners) { + // + // If at the end of the event(s) list and the tree has listeners + // invoke those listeners. + // + if (typeof tree._listeners === 'function') { + handlers && handlers.push(tree._listeners); + return [tree]; + } else { + for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) { + handlers && handlers.push(tree._listeners[leaf]); + } + return [tree]; + } + } + + if ((currentType === '*' || currentType === '**') || tree[currentType]) { + // + // If the event emitted is '*' at this part + // or there is a concrete match at this patch + // + if (currentType === '*') { + for (branch in tree) { + if (branch !== '_listeners' && tree.hasOwnProperty(branch)) { + listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1)); + } + } + return listeners; + } else if(currentType === '**') { + endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*')); + if(endReached && tree._listeners) { + // The next element has a _listeners, add it to the handlers. + listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength)); + } + + for (branch in tree) { + if (branch !== '_listeners' && tree.hasOwnProperty(branch)) { + if(branch === '*' || branch === '**') { + if(tree[branch]._listeners && !endReached) { + listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength)); + } + listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i)); + } else if(branch === nextType) { + listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2)); + } else { + // No match on this one, shift into the tree but not in the type array. + listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i)); + } + } + } + return listeners; + } + + listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1)); + } + + xTree = tree['*']; + if (xTree) { + // + // If the listener tree will allow any match for this part, + // then recursively explore all branches of the tree + // + searchListenerTree(handlers, type, xTree, i+1); + } + + xxTree = tree['**']; + if(xxTree) { + if(i < typeLength) { + if(xxTree._listeners) { + // If we have a listener on a '**', it will catch all, so add its handler. + searchListenerTree(handlers, type, xxTree, typeLength); + } + + // Build arrays of matching next branches and others. + for(branch in xxTree) { + if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) { + if(branch === nextType) { + // We know the next element will match, so jump twice. + searchListenerTree(handlers, type, xxTree[branch], i+2); + } else if(branch === currentType) { + // Current node matches, move into the tree. + searchListenerTree(handlers, type, xxTree[branch], i+1); + } else { + isolatedBranch = {}; + isolatedBranch[branch] = xxTree[branch]; + searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1); + } + } + } + } else if(xxTree._listeners) { + // We have reached the end and still on a '**' + searchListenerTree(handlers, type, xxTree, typeLength); + } else if(xxTree['*'] && xxTree['*']._listeners) { + searchListenerTree(handlers, type, xxTree['*'], typeLength); + } + } + + return listeners; + } + + function growListenerTree(type, listener) { + + type = typeof type === 'string' ? type.split(this.delimiter) : type.slice(); + + // + // Looks for two consecutive '**', if so, don't add the event at all. + // + for(var i = 0, len = type.length; i+1 < len; i++) { + if(type[i] === '**' && type[i+1] === '**') { + return; + } + } + + var tree = this.listenerTree; + var name = type.shift(); + + while (name !== undefined) { + + if (!tree[name]) { + tree[name] = {}; + } + + tree = tree[name]; + + if (type.length === 0) { + + if (!tree._listeners) { + tree._listeners = listener; + } + else { + if (typeof tree._listeners === 'function') { + tree._listeners = [tree._listeners]; + } + + tree._listeners.push(listener); + + if ( + !tree._listeners.warned && + this._maxListeners > 0 && + tree._listeners.length > this._maxListeners + ) { + tree._listeners.warned = true; + logPossibleMemoryLeak.call(this, tree._listeners.length, name); + } + } + return true; + } + name = type.shift(); + } + return true; + } + + // By default EventEmitters will print a warning if more than + // 10 listeners are added to it. This is a useful default which + // helps finding memory leaks. + // + // Obviously not all Emitters should be limited to 10. This function allows + // that to be increased. Set to zero for unlimited. + + EventEmitter.prototype.delimiter = '.'; + + EventEmitter.prototype.setMaxListeners = function(n) { + if (n !== undefined) { + this._maxListeners = n; + if (!this._conf) this._conf = {}; + this._conf.maxListeners = n; + } + }; + + EventEmitter.prototype.event = ''; + + + EventEmitter.prototype.once = function(event, fn) { + return this._once(event, fn, false); + }; + + EventEmitter.prototype.prependOnceListener = function(event, fn) { + return this._once(event, fn, true); + }; + + EventEmitter.prototype._once = function(event, fn, prepend) { + this._many(event, 1, fn, prepend); + return this; + }; + + EventEmitter.prototype.many = function(event, ttl, fn) { + return this._many(event, ttl, fn, false); + }; + + EventEmitter.prototype.prependMany = function(event, ttl, fn) { + return this._many(event, ttl, fn, true); + }; + + EventEmitter.prototype._many = function(event, ttl, fn, prepend) { + var self = this; + + if (typeof fn !== 'function') { + throw new Error('many only accepts instances of Function'); + } + + function listener() { + if (--ttl === 0) { + self.off(event, listener); + } + return fn.apply(this, arguments); + } + + listener._origin = fn; + + this._on(event, listener, prepend); + + return self; + }; + + EventEmitter.prototype.emit = function() { + + this._events || init.call(this); + + var type = arguments[0]; + + if (type === 'newListener' && !this.newListener) { + if (!this._events.newListener) { + return false; + } + } + + var al = arguments.length; + var args,l,i,j; + var handler; + + if (this._all && this._all.length) { + handler = this._all.slice(); + if (al > 3) { + args = new Array(al); + for (j = 0; j < al; j++) args[j] = arguments[j]; + } + + for (i = 0, l = handler.length; i < l; i++) { + this.event = type; + switch (al) { + case 1: + handler[i].call(this, type); + break; + case 2: + handler[i].call(this, type, arguments[1]); + break; + case 3: + handler[i].call(this, type, arguments[1], arguments[2]); + break; + default: + handler[i].apply(this, args); + } + } + } + + if (this.wildcard) { + handler = []; + var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice(); + searchListenerTree.call(this, handler, ns, this.listenerTree, 0); + } else { + handler = this._events[type]; + if (typeof handler === 'function') { + this.event = type; + switch (al) { + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + default: + args = new Array(al - 1); + for (j = 1; j < al; j++) args[j - 1] = arguments[j]; + handler.apply(this, args); + } + return true; + } else if (handler) { + // need to make copy of handlers because list can change in the middle + // of emit call + handler = handler.slice(); + } + } + + if (handler && handler.length) { + if (al > 3) { + args = new Array(al - 1); + for (j = 1; j < al; j++) args[j - 1] = arguments[j]; + } + for (i = 0, l = handler.length; i < l; i++) { + this.event = type; + switch (al) { + case 1: + handler[i].call(this); + break; + case 2: + handler[i].call(this, arguments[1]); + break; + case 3: + handler[i].call(this, arguments[1], arguments[2]); + break; + default: + handler[i].apply(this, args); + } + } + return true; + } else if (!this._all && type === 'error') { + if (arguments[1] instanceof Error) { + throw arguments[1]; // Unhandled 'error' event + } else { + throw new Error("Uncaught, unspecified 'error' event."); + } + return false; + } + + return !!this._all; + }; + + EventEmitter.prototype.emitAsync = function() { + + this._events || init.call(this); + + var type = arguments[0]; + + if (type === 'newListener' && !this.newListener) { + if (!this._events.newListener) { return Promise.resolve([false]); } + } + + var promises= []; + + var al = arguments.length; + var args,l,i,j; + var handler; + + if (this._all) { + if (al > 3) { + args = new Array(al); + for (j = 1; j < al; j++) args[j] = arguments[j]; + } + for (i = 0, l = this._all.length; i < l; i++) { + this.event = type; + switch (al) { + case 1: + promises.push(this._all[i].call(this, type)); + break; + case 2: + promises.push(this._all[i].call(this, type, arguments[1])); + break; + case 3: + promises.push(this._all[i].call(this, type, arguments[1], arguments[2])); + break; + default: + promises.push(this._all[i].apply(this, args)); + } + } + } + + if (this.wildcard) { + handler = []; + var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice(); + searchListenerTree.call(this, handler, ns, this.listenerTree, 0); + } else { + handler = this._events[type]; + } + + if (typeof handler === 'function') { + this.event = type; + switch (al) { + case 1: + promises.push(handler.call(this)); + break; + case 2: + promises.push(handler.call(this, arguments[1])); + break; + case 3: + promises.push(handler.call(this, arguments[1], arguments[2])); + break; + default: + args = new Array(al - 1); + for (j = 1; j < al; j++) args[j - 1] = arguments[j]; + promises.push(handler.apply(this, args)); + } + } else if (handler && handler.length) { + handler = handler.slice(); + if (al > 3) { + args = new Array(al - 1); + for (j = 1; j < al; j++) args[j - 1] = arguments[j]; + } + for (i = 0, l = handler.length; i < l; i++) { + this.event = type; + switch (al) { + case 1: + promises.push(handler[i].call(this)); + break; + case 2: + promises.push(handler[i].call(this, arguments[1])); + break; + case 3: + promises.push(handler[i].call(this, arguments[1], arguments[2])); + break; + default: + promises.push(handler[i].apply(this, args)); + } + } + } else if (!this._all && type === 'error') { + if (arguments[1] instanceof Error) { + return Promise.reject(arguments[1]); // Unhandled 'error' event + } else { + return Promise.reject("Uncaught, unspecified 'error' event."); + } + } + + return Promise.all(promises); + }; + + EventEmitter.prototype.on = function(type, listener) { + return this._on(type, listener, false); + }; + + EventEmitter.prototype.prependListener = function(type, listener) { + return this._on(type, listener, true); + }; + + EventEmitter.prototype.onAny = function(fn) { + return this._onAny(fn, false); + }; + + EventEmitter.prototype.prependAny = function(fn) { + return this._onAny(fn, true); + }; + + EventEmitter.prototype.addListener = EventEmitter.prototype.on; + + EventEmitter.prototype._onAny = function(fn, prepend){ + if (typeof fn !== 'function') { + throw new Error('onAny only accepts instances of Function'); + } + + if (!this._all) { + this._all = []; + } + + // Add the function to the event listener collection. + if(prepend){ + this._all.unshift(fn); + }else{ + this._all.push(fn); + } + + return this; + }; + + EventEmitter.prototype._on = function(type, listener, prepend) { + if (typeof type === 'function') { + this._onAny(type, listener); + return this; + } + + if (typeof listener !== 'function') { + throw new Error('on only accepts instances of Function'); + } + this._events || init.call(this); + + // To avoid recursion in the case that type == "newListeners"! Before + // adding it to the listeners, first emit "newListeners". + this.emit('newListener', type, listener); + + if (this.wildcard) { + growListenerTree.call(this, type, listener); + return this; + } + + if (!this._events[type]) { + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + } + else { + if (typeof this._events[type] === 'function') { + // Change to array. + this._events[type] = [this._events[type]]; + } + + // If we've already got an array, just add + if(prepend){ + this._events[type].unshift(listener); + }else{ + this._events[type].push(listener); + } + + // Check for listener leak + if ( + !this._events[type].warned && + this._maxListeners > 0 && + this._events[type].length > this._maxListeners + ) { + this._events[type].warned = true; + logPossibleMemoryLeak.call(this, this._events[type].length, type); + } + } + + return this; + }; + + EventEmitter.prototype.off = function(type, listener) { + if (typeof listener !== 'function') { + throw new Error('removeListener only takes instances of Function'); + } + + var handlers,leafs=[]; + + if(this.wildcard) { + var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice(); + leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0); + } + else { + // does not use listeners(), so no side effect of creating _events[type] + if (!this._events[type]) return this; + handlers = this._events[type]; + leafs.push({_listeners:handlers}); + } + + for (var iLeaf=0; iLeaf 0) { + recursivelyGarbageCollect(root[key]); + } + if (Object.keys(obj).length === 0) { + delete root[key]; + } + } + } + recursivelyGarbageCollect(this.listenerTree); + + return this; + }; + + EventEmitter.prototype.offAny = function(fn) { + var i = 0, l = 0, fns; + if (fn && this._all && this._all.length > 0) { + fns = this._all; + for(i = 0, l = fns.length; i < l; i++) { + if(fn === fns[i]) { + fns.splice(i, 1); + this.emit("removeListenerAny", fn); + return this; + } + } + } else { + fns = this._all; + for(i = 0, l = fns.length; i < l; i++) + this.emit("removeListenerAny", fns[i]); + this._all = []; + } + return this; + }; + + EventEmitter.prototype.removeListener = EventEmitter.prototype.off; + + EventEmitter.prototype.removeAllListeners = function(type) { + if (arguments.length === 0) { + !this._events || init.call(this); + return this; + } + + if (this.wildcard) { + var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice(); + var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0); + + for (var iLeaf=0; iLeaf 0) { - makeUl(liElem, children[i]); - divElem.addEventListener('click', that.hide.bind(that)); - divElem.addEventListener('touchstart', that.hide.bind(that)); - } else { - divElem.addEventListener('click', emitMenuSelect.bind(that, children[i])); - divElem.addEventListener('touchstart', emitMenuSelect.bind(that, children[i])); - divElem.className = 'default-interactive-marker-menu-entry'; - } - } - - } - - // construct DOM element - makeUl(this.menuDomElem, allMenus[0]); -}; - -/** - * Shoe the menu DOM element. - * - * @param control - the control for the menu - * @param event - the event that caused this - */ -ROS3D.InteractiveMarkerMenu.prototype.show = function(control, event) { - if (event && event.preventDefault) { - event.preventDefault(); - } - - this.controlName = control.name; - - // position it on the click - if (event.domEvent.changedTouches !== undefined) { - // touch click - this.menuDomElem.style.left = event.domEvent.changedTouches[0].pageX + 'px'; - this.menuDomElem.style.top = event.domEvent.changedTouches[0].pageY + 'px'; - } else { - // mouse click - this.menuDomElem.style.left = event.domEvent.clientX + 'px'; - this.menuDomElem.style.top = event.domEvent.clientY + 'px'; - } - document.body.appendChild(this.overlayDomElem); - document.body.appendChild(this.menuDomElem); -}; - -/** - * Hide the menu DOM element. - * - * @param event (optional) - the event that caused this - */ -ROS3D.InteractiveMarkerMenu.prototype.hide = function(event) { - if (event && event.preventDefault) { - event.preventDefault(); - } - - document.body.removeChild(this.overlayDomElem); - document.body.removeChild(this.menuDomElem); -}; - -THREE.EventDispatcher.prototype.apply( ROS3D.InteractiveMarkerMenu.prototype ); - -/** - * @author Russell Toris - rctoris@wpi.edu - */ - -/** - * An OccupancyGrid can convert a ROS occupancy grid message into a THREE object. - * - * @constructor - * @param options - object with following keys: - * - * * message - the occupancy grid message - */ -ROS3D.OccupancyGrid = function(options) { - options = options || {}; - var message = options.message; - - // create the geometry - var width = message.info.width; - var height = message.info.height; - var geom = new THREE.PlaneGeometry(width, height); - - // internal drawing canvas - var canvas = document.createElement('canvas'); - canvas.width = width; - canvas.height = height; - var context = canvas.getContext('2d'); - // create the color material - var imageData = context.createImageData(width, height); - for ( var row = 0; row < height; row++) { - for ( var col = 0; col < width; col++) { - // determine the index into the map data - var mapI = col + ((height - row - 1) * width); - // determine the value - var data = message.data[mapI]; - var val; - if (data === 100) { - val = 0; - } else if (data === 0) { - val = 255; - } else { - val = 127; - } - - // determine the index into the image data array - var i = (col + (row * width)) * 4; - // r - imageData.data[i] = val; - // g - imageData.data[++i] = val; - // b - imageData.data[++i] = val; - // a - imageData.data[++i] = 255; - } - } - context.putImageData(imageData, 0, 0); - - var texture = new THREE.Texture(canvas); - texture.needsUpdate = true; - var material = new THREE.MeshBasicMaterial({ - map : texture - }); - material.side = THREE.DoubleSide; - - // create the mesh - THREE.Mesh.call(this, geom, material); - // move the map so the corner is at 0, 0 - this.position.x = (width * message.info.resolution) / 2; - this.position.y = (height * message.info.resolution) / 2; - this.scale.x = message.info.resolution; - this.scale.y = message.info.resolution; -}; -ROS3D.OccupancyGrid.prototype.__proto__ = THREE.Mesh.prototype; - -/** - * @author Russell Toris - rctoris@wpi.edu - */ - -/** - * An occupancy grid client that listens to a given map topic. - * - * Emits the following events: - * - * * 'change' - there was an update or change in the marker - * - * @constructor - * @param options - object with following keys: - * - * * ros - the ROSLIB.Ros connection handle - * * topic (optional) - the map topic to listen to - * * continuous (optional) - if the map should be continuously loaded (e.g., for SLAM) - * * tfClient (optional) - the TF client handle to use for a scene node - * * rootObject (optional) - the root object to add this marker to - */ -ROS3D.OccupancyGridClient = function(options) { - var that = this; - options = options || {}; - var ros = options.ros; - var topic = options.topic || '/map'; - this.continuous = options.continuous; - this.tfClient = options.tfClient; - this.rootObject = options.rootObject || new THREE.Object3D(); - - // current grid that is displayed - this.currentGrid = null; - - // subscribe to the topic - var rosTopic = new ROSLIB.Topic({ - ros : ros, - name : topic, - messageType : 'nav_msgs/OccupancyGrid', - compression : 'png' - }); - rosTopic.subscribe(function(message) { - // check for an old map - if (that.currentGrid) { - that.rootObject.remove(that.currentGrid); - } - - var newGrid = new ROS3D.OccupancyGrid({ - message : message - }); - - // check if we care about the scene - if (that.tfClient) { - that.currentGrid = new ROS3D.SceneNode({ - frameID : message.header.frame_id, - tfClient : that.tfClient, - object : newGrid, - pose : message.info.origin - }); - } else { - that.currentGrid = newGrid; - } - - that.rootObject.add(that.currentGrid); - - that.emit('change'); - - // check if we should unsubscribe - if (!that.continuous) { - rosTopic.unsubscribe(); - } - }); -}; -ROS3D.OccupancyGridClient.prototype.__proto__ = EventEmitter2.prototype; + var feedback = { + header : this.header, + client_id : this.clientID, + marker_name : this.name, + control_name : controlName, + event_type : eventType, + pose : this.pose, + mouse_point : clickPosition, + mouse_point_valid : mousePointValid, + menu_entry_id : menuEntryID + }; + this.feedbackTopic.publish(feedback); + }; +} /** * @author David Gossow - dgossow@willowgarage.com + */ + +class InteractiveMarkerClient { + + /** + * A client for an interactive marker topic. + * + * @constructor + * @param options - object with following keys: + * + * * ros - a handle to the ROS connection + * * tfClient - a handle to the TF client + * * topic (optional) - the topic to subscribe to, like '/basic_controls', if not provided use subscribe() to start message receiving + * * path (optional) - the base path to any meshes that will be loaded + * * camera - the main camera associated with the viewer for this marker client + * * rootObject (optional) - the root THREE 3D object to render to + * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER) + * * menuFontSize (optional) - the menu font size + */ + constructor(options) { + options = options || {}; + this.ros = options.ros; + this.tfClient = options.tfClient; + this.topicName = options.topic; + this.path = options.path || '/'; + this.camera = options.camera; + this.rootObject = options.rootObject || new THREE$1.Object3D(); + this.loader = options.loader; + this.menuFontSize = options.menuFontSize || '0.8em'; + + this.interactiveMarkers = {}; + this.updateTopic = null; + this.feedbackTopic = null; + + // check for an initial topic + if (this.topicName) { + this.subscribe(this.topicName); + } + }; + + /** + * Subscribe to the given interactive marker topic. This will unsubscribe from any current topics. + * + * @param topic - the topic to subscribe to, like '/basic_controls' + */ + subscribe(topic) { + // unsubscribe to the other topics + this.unsubscribe(); + + this.updateTopic = new ROSLIB.Topic({ + ros : this.ros, + name : topic + '/tunneled/update', + messageType : 'visualization_msgs/InteractiveMarkerUpdate', + compression : 'png' + }); + this.updateTopic.subscribe(this.processUpdate.bind(this)); + + this.feedbackTopic = new ROSLIB.Topic({ + ros : this.ros, + name : topic + '/feedback', + messageType : 'visualization_msgs/InteractiveMarkerFeedback', + compression : 'png' + }); + this.feedbackTopic.advertise(); + + this.initService = new ROSLIB.Service({ + ros : this.ros, + name : topic + '/tunneled/get_init', + serviceType : 'demo_interactive_markers/GetInit' + }); + var request = new ROSLIB.ServiceRequest({}); + this.initService.callService(request, this.processInit.bind(this)); + }; + + /** + * Unsubscribe from the current interactive marker topic. + */ + unsubscribe() { + if (this.updateTopic) { + this.updateTopic.unsubscribe(); + } + if (this.feedbackTopic) { + this.feedbackTopic.unadvertise(); + } + // erase all markers + for (var intMarkerName in this.interactiveMarkers) { + this.eraseIntMarker(intMarkerName); + } + this.interactiveMarkers = {}; + }; + + /** + * Process the given interactive marker initialization message. + * + * @param initMessage - the interactive marker initialization message to process + */ + processInit(initMessage) { + var message = initMessage.msg; + + // erase any old markers + message.erases = []; + for (var intMarkerName in this.interactiveMarkers) { + message.erases.push(intMarkerName); + } + message.poses = []; + + // treat it as an update + this.processUpdate(message); + }; + + /** + * Process the given interactive marker update message. + * + * @param initMessage - the interactive marker update message to process + */ + processUpdate(message) { + var that = this; + + // erase any markers + message.erases.forEach(function(name) { + that.eraseIntMarker(name); + }); + + // updates marker poses + message.poses.forEach(function(poseMessage) { + var marker = that.interactiveMarkers[poseMessage.name]; + if (marker) { + marker.setPoseFromServer(poseMessage.pose); + } + }); + + // add new markers + message.markers.forEach(function(msg) { + // get rid of anything with the same name + var oldhandle = that.interactiveMarkers[msg.name]; + if (oldhandle) { + that.eraseIntMarker(oldhandle.name); + } + + // create the handle + var handle = new InteractiveMarkerHandle({ + message : msg, + feedbackTopic : that.feedbackTopic, + tfClient : that.tfClient, + menuFontSize : that.menuFontSize + }); + that.interactiveMarkers[msg.name] = handle; + + // create the actual marker + var intMarker = new InteractiveMarker({ + handle : handle, + camera : that.camera, + path : that.path, + loader : that.loader + }); + // add it to the scene + intMarker.name = msg.name; + that.rootObject.add(intMarker); + + // listen for any pose updates from the server + handle.on('pose', function(pose) { + intMarker.onServerSetPose({ + pose : pose + }); + }); + + // add bound versions of UI handlers + intMarker.addEventListener('user-pose-change', handle.setPoseFromClientBound); + intMarker.addEventListener('user-mousedown', handle.onMouseDownBound); + intMarker.addEventListener('user-mouseup', handle.onMouseUpBound); + intMarker.addEventListener('user-button-click', handle.onButtonClickBound); + intMarker.addEventListener('menu-select', handle.onMenuSelectBound); + + // now listen for any TF changes + handle.subscribeTf(); + }); + }; + + /** + * Erase the interactive marker with the given name. + * + * @param intMarkerName - the interactive marker name to delete + */ + eraseIntMarker(intMarkerName) { + if (this.interactiveMarkers[intMarkerName]) { + // remove the object + var targetIntMarker = this.rootObject.getObjectByName(intMarkerName); + this.rootObject.remove(targetIntMarker); + // unsubscribe from TF topic! + var handle = this.interactiveMarkers[intMarkerName]; + handle.unsubscribeTf(); + + // remove all other listeners + + targetIntMarker.removeEventListener('user-pose-change', handle.setPoseFromClientBound); + targetIntMarker.removeEventListener('user-mousedown', handle.onMouseDownBound); + targetIntMarker.removeEventListener('user-mouseup', handle.onMouseUpBound); + targetIntMarker.removeEventListener('user-button-click', handle.onButtonClickBound); + targetIntMarker.removeEventListener('menu-select', handle.onMenuSelectBound); + + // remove the handle from the map - after leaving this function's scope, there should be no references to the handle + delete this.interactiveMarkers[intMarkerName]; + targetIntMarker.dispose(); + } + }; +} + +/** + * @author Jihoon Lee - jihoonlee.in@gmail.com * @author Russell Toris - rctoris@wpi.edu */ -/** - * A Marker can convert a ROS marker message into a THREE object. - * - * @constructor - * @param options - object with following keys: - * - * * path - the base path or URL for any mesh files that will be loaded for this marker - * * message - the marker message - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.Marker = function(options) { - options = options || {}; - var path = options.path || '/'; - var message = options.message; - var loader = options.loader || ROS3D.COLLADA_LOADER_2; +class SceneNode extends THREE$1.Object3D { - // check for a trailing '/' - if (path.substr(path.length - 1) !== '/') { - path += '/'; - } + /** + * A SceneNode can be used to keep track of a 3D object with respect to a ROS frame within a scene. + * + * @constructor + * @param options - object with following keys: + * + * * tfClient - a handle to the TF client + * * frameID - the frame ID this object belongs to + * * pose (optional) - the pose associated with this object + * * object - the THREE 3D object to be rendered + */ + constructor(options) { + super(); + options = options || {}; + var that = this; + this.tfClient = options.tfClient; + this.frameID = options.frameID; + var object = options.object; + this.pose = options.pose || new ROSLIB.Pose(); - THREE.Object3D.call(this); - - if(message.scale) { - this.msgScale = [message.scale.x, message.scale.y, message.scale.z]; - } - else { - this.msgScale = [1,1,1]; - } - this.msgColor = message.color; - this.msgMesh = undefined; + // Do not render this object until we receive a TF update + this.visible = false; - // set the pose and get the color - this.setPose(message.pose); - var colorMaterial = ROS3D.makeColorMaterial(this.msgColor.r, - this.msgColor.g, this.msgColor.b, this.msgColor.a); + // add the model + this.add(object); - // create the object based on the type - switch (message.type) { - case ROS3D.MARKER_ARROW: - // get the sizes for the arrow - var len = message.scale.x; - var headLength = len * 0.23; - var headDiameter = message.scale.y; - var shaftDiameter = headDiameter * 0.5; + // set the inital pose + this.updatePose(this.pose); - // determine the points - var direction, p1 = null; - if (message.points.length === 2) { - p1 = new THREE.Vector3(message.points[0].x, message.points[0].y, message.points[0].z); - var p2 = new THREE.Vector3(message.points[1].x, message.points[1].y, message.points[1].z); - direction = p1.clone().negate().add(p2); - // direction = p2 - p1; - len = direction.length(); - headDiameter = message.scale.y; - shaftDiameter = message.scale.x; + // save the TF handler so we can remove it later + this.tfUpdate = function(msg) { - if (message.scale.z !== 0.0) { - headLength = message.scale.z; - } - } + // apply the transform + var tf = new ROSLIB.Transform(msg); + var poseTransformed = new ROSLIB.Pose(that.pose); + poseTransformed.applyTransform(tf); - // add the marker - this.add(new ROS3D.Arrow({ - direction : direction, - origin : p1, - length : len, - headLength : headLength, - shaftDiameter : shaftDiameter, - headDiameter : headDiameter, - material : colorMaterial - })); - break; - case ROS3D.MARKER_CUBE: - // set the cube dimensions - var cubeGeom = new THREE.CubeGeometry(message.scale.x, message.scale.y, message.scale.z); - this.add(new THREE.Mesh(cubeGeom, colorMaterial)); - break; - case ROS3D.MARKER_SPHERE: - // set the sphere dimensions - var sphereGeom = new THREE.SphereGeometry(0.5); - var sphereMesh = new THREE.Mesh(sphereGeom, colorMaterial); - sphereMesh.scale.x = message.scale.x; - sphereMesh.scale.y = message.scale.y; - sphereMesh.scale.z = message.scale.z; - this.add(sphereMesh); - break; - case ROS3D.MARKER_CYLINDER: - // set the cylinder dimensions - var cylinderGeom = new THREE.CylinderGeometry(0.5, 0.5, 1, 16, 1, false); - var cylinderMesh = new THREE.Mesh(cylinderGeom, colorMaterial); - cylinderMesh.quaternion.setFromAxisAngle(new THREE.Vector3(1, 0, 0), Math.PI * 0.5); - cylinderMesh.scale = new THREE.Vector3(message.scale.x, message.scale.z, message.scale.y); - this.add(cylinderMesh); - break; - case ROS3D.MARKER_LINE_STRIP: - var lineStripGeom = new THREE.Geometry(); - var lineStripMaterial = new THREE.LineBasicMaterial({ - size : message.scale.x - }); + // update the world + that.updatePose(poseTransformed); + that.visible = true; + }; - // add the points - var j; - for ( j = 0; j < message.points.length; j++) { - var pt = new THREE.Vector3(); - pt.x = message.points[j].x; - pt.y = message.points[j].y; - pt.z = message.points[j].z; - lineStripGeom.vertices.push(pt); - } + // listen for TF updates + this.tfClient.subscribe(this.frameID, this.tfUpdate); + }; - // determine the colors for each - if (message.colors.length === message.points.length) { - lineStripMaterial.vertexColors = true; - for ( j = 0; j < message.points.length; j++) { - var clr = new THREE.Color(); - clr.setRGB(message.colors[j].r, message.colors[j].g, message.colors[j].b); - lineStripGeom.colors.push(clr); - } - } else { - lineStripMaterial.color.setRGB(message.color.r, message.color.g, message.color.b); - } + /** + * Set the pose of the associated model. + * + * @param pose - the pose to update with + */ + updatePose(pose) { + this.position.set( pose.position.x, pose.position.y, pose.position.z ); + this.quaternion.set(pose.orientation.x, pose.orientation.y, + pose.orientation.z, pose.orientation.w); + this.updateMatrixWorld(true); + }; - // add the line - this.add(new THREE.Line(lineStripGeom, lineStripMaterial)); - break; - case ROS3D.MARKER_LINE_LIST: - var lineListGeom = new THREE.Geometry(); - var lineListMaterial = new THREE.LineBasicMaterial({ - size : message.scale.x - }); - - // add the points - var k; - for ( k = 0; k < message.points.length; k++) { - var v = new THREE.Vector3(); - v.x = message.points[k].x; - v.y = message.points[k].y; - v.z = message.points[k].z; - lineListGeom.vertices.push(v); - } - - // determine the colors for each - if (message.colors.length === message.points.length) { - lineListMaterial.vertexColors = true; - for ( k = 0; k < message.points.length; k++) { - var c = new THREE.Color(); - c.setRGB(message.colors[k].r, message.colors[k].g, message.colors[k].b); - lineListGeom.colors.push(c); - } - } else { - lineListMaterial.color.setRGB(message.color.r, message.color.g, message.color.b); - } - - // add the line - this.add(new THREE.Line(lineListGeom, lineListMaterial,THREE.LinePieces)); - break; - case ROS3D.MARKER_CUBE_LIST: - // holds the main object - var object = new THREE.Object3D(); - - // check if custom colors should be used - var numPoints = message.points.length; - var createColors = (numPoints === message.colors.length); - // do not render giant lists - var stepSize = Math.ceil(numPoints / 1250); - - // add the points - var p, cube, curColor, newMesh; - for (p = 0; p < numPoints; p+=stepSize) { - cube = new THREE.CubeGeometry(message.scale.x, message.scale.y, message.scale.z); - - // check the color - if(createColors) { - curColor = ROS3D.makeColorMaterial(message.colors[p].r, message.colors[p].g, message.colors[p].b, message.colors[p].a); - } else { - curColor = colorMaterial; - } - - newMesh = new THREE.Mesh(cube, curColor); - newMesh.position.x = message.points[p].x; - newMesh.position.y = message.points[p].y; - newMesh.position.z = message.points[p].z; - object.add(newMesh); - } - - this.add(object); - break; - case ROS3D.MARKER_SPHERE_LIST: - case ROS3D.MARKER_POINTS: - // for now, use a particle system for the lists - var geometry = new THREE.Geometry(); - var material = new THREE.ParticleBasicMaterial({ - size : message.scale.x - }); - - // add the points - var i; - for ( i = 0; i < message.points.length; i++) { - var vertex = new THREE.Vector3(); - vertex.x = message.points[i].x; - vertex.y = message.points[i].y; - vertex.z = message.points[i].z; - geometry.vertices.push(vertex); - } - - // determine the colors for each - if (message.colors.length === message.points.length) { - material.vertexColors = true; - for ( i = 0; i < message.points.length; i++) { - var color = new THREE.Color(); - color.setRGB(message.colors[i].r, message.colors[i].g, message.colors[i].b); - geometry.colors.push(color); - } - } else { - material.color.setRGB(message.color.r, message.color.g, message.color.b); - } - - // add the particle system - this.add(new THREE.ParticleSystem(geometry, material)); - break; - case ROS3D.MARKER_TEXT_VIEW_FACING: - // only work on non-empty text - if (message.text.length > 0) { - // Use a THREE.Sprite to always be view-facing - // ( code from http://stackoverflow.com/a/27348780 ) - var textColor = this.msgColor; - - var canvas = document.createElement('canvas'); - var context = canvas.getContext('2d'); - var textHeight = 100; - var fontString = 'normal ' + textHeight + 'px sans-serif'; - context.font = fontString; - var metrics = context.measureText( message.text ); - var textWidth = metrics.width; - - canvas.width = textWidth; - // To account for overhang (like the letter 'g'), make the canvas bigger - // The non-text portion is transparent anyway - canvas.height = 1.5 * textHeight; - - // this does need to be set again - context.font = fontString; - context.fillStyle = 'rgba(' - + textColor.r + ', ' - + textColor.g + ', ' - + textColor.b + ', ' - + textColor.a + ')'; - context.textAlign = 'left'; - context.textBaseline = 'middle'; - context.fillText( message.text, 0, canvas.height/2); - - var texture = new THREE.Texture(canvas); - texture.needsUpdate = true; - - var spriteMaterial = new THREE.SpriteMaterial({ - map: texture, - // NOTE: This is needed for THREE.js r61, unused in r70 - useScreenCoordinates: false }); - var sprite = new THREE.Sprite( spriteMaterial ); - var textSize = message.scale.x; - sprite.scale.set(textWidth / canvas.height * textSize, textSize, 1); - - this.add(sprite); } - break; - case ROS3D.MARKER_MESH_RESOURCE: - // load and add the mesh - var meshColorMaterial = null; - if(message.color.r !== 0 || message.color.g !== 0 || - message.color.b !== 0 || message.color.a !== 0) { - meshColorMaterial = colorMaterial; - } - this.msgMesh = message.mesh_resource.substr(10); - var meshResource = new ROS3D.MeshResource({ - path : path, - resource : this.msgMesh, - material : meshColorMaterial, - loader : loader - }); - this.add(meshResource); - break; - case ROS3D.MARKER_TRIANGLE_LIST: - // create the list of triangles - var tri = new ROS3D.TriangleList({ - material : colorMaterial, - vertices : message.points, - colors : message.colors - }); - tri.scale = new THREE.Vector3(message.scale.x, message.scale.y, message.scale.z); - this.add(tri); - break; - default: - console.error('Currently unsupported marker type: ' + message.type); - break; - } -}; -ROS3D.Marker.prototype.__proto__ = THREE.Object3D.prototype; - -/** - * Set the pose of this marker to the given values. - * - * @param pose - the pose to set for this marker - */ -ROS3D.Marker.prototype.setPose = function(pose) { - // set position information - this.position.x = pose.position.x; - this.position.y = pose.position.y; - this.position.z = pose.position.z; - - // set the rotation - this.quaternion = new THREE.Quaternion(pose.orientation.x, pose.orientation.y, - pose.orientation.z, pose.orientation.w); - this.quaternion.normalize(); - - // update the world - this.updateMatrixWorld(); -}; - -/** - * Update this marker. - * - * @param message - the marker message - * @return true on success otherwhise false is returned - */ -ROS3D.Marker.prototype.update = function(message) { - // set the pose and get the color - this.setPose(message.pose); - - // Update color - if(message.color.r !== this.msgColor.r || - message.color.g !== this.msgColor.g || - message.color.b !== this.msgColor.b || - message.color.a !== this.msgColor.a) - { - var colorMaterial = ROS3D.makeColorMaterial( - message.color.r, message.color.g, - message.color.b, message.color.a); - - switch (message.type) { - case ROS3D.MARKER_LINE_STRIP: - case ROS3D.MARKER_LINE_LIST: - case ROS3D.MARKER_POINTS: - break; - case ROS3D.MARKER_ARROW: - case ROS3D.MARKER_CUBE: - case ROS3D.MARKER_SPHERE: - case ROS3D.MARKER_CYLINDER: - case ROS3D.MARKER_TRIANGLE_LIST: - case ROS3D.MARKER_TEXT_VIEW_FACING: - this.traverse (function (child){ - if (child instanceof THREE.Mesh) { - child.material = colorMaterial; - } - }); - break; - case ROS3D.MARKER_MESH_RESOURCE: - var meshColorMaterial = null; - if(message.color.r !== 0 || message.color.g !== 0 || - message.color.b !== 0 || message.color.a !== 0) { - meshColorMaterial = this.colorMaterial; - } - this.traverse (function (child){ - if (child instanceof THREE.Mesh) { - child.material = meshColorMaterial; - } - }); - break; - case ROS3D.MARKER_CUBE_LIST: - case ROS3D.MARKER_SPHERE_LIST: - // TODO Support to update color for MARKER_CUBE_LIST & MARKER_SPHERE_LIST - return false; - default: - return false; - } - - this.msgColor = message.color; - } - - // Update geometry - var scaleChanged = - Math.abs(this.msgScale[0] - message.scale.x) > 1.0e-6 || - Math.abs(this.msgScale[1] - message.scale.y) > 1.0e-6 || - Math.abs(this.msgScale[2] - message.scale.z) > 1.0e-6; - this.msgScale = [message.scale.x, message.scale.y, message.scale.z]; - - switch (message.type) { - case ROS3D.MARKER_CUBE: - case ROS3D.MARKER_SPHERE: - case ROS3D.MARKER_CYLINDER: - if(scaleChanged) { - return false; - } - break; - case ROS3D.MARKER_TEXT_VIEW_FACING: - if(scaleChanged || this.text !== message.text) { - return false; - } - break; - case ROS3D.MARKER_MESH_RESOURCE: - var meshResource = message.mesh_resource.substr(10); - if(meshResource !== this.msgMesh) { - return false; - } - if(scaleChanged) { - return false; - } - break; - case ROS3D.MARKER_ARROW: - case ROS3D.MARKER_LINE_STRIP: - case ROS3D.MARKER_LINE_LIST: - case ROS3D.MARKER_CUBE_LIST: - case ROS3D.MARKER_SPHERE_LIST: - case ROS3D.MARKER_POINTS: - case ROS3D.MARKER_TRIANGLE_LIST: - // TODO: Check if geometry changed - return false; - default: - break; - } - - return true; -}; - -/* - * Free memory of elements in this marker. - */ -ROS3D.Marker.prototype.dispose = function() { - this.children.forEach(function(element) { - if (element instanceof ROS3D.MeshResource) { - element.children.forEach(function(scene) { - if (scene.material !== undefined) { - scene.material.dispose(); - } - scene.children.forEach(function(mesh) { - if (mesh.geometry !== undefined) { - mesh.geometry.dispose(); - } - if (mesh.material !== undefined) { - mesh.material.dispose(); - } - scene.remove(mesh); - }); - element.remove(scene); - }); - } else { - if (element.geometry !== undefined) { - element.geometry.dispose(); - } - if (element.material !== undefined) { - element.material.dispose(); - } - } - element.parent.remove(element); - }); -}; + unsubscribeTf() { + this.tfClient.unsubscribe(this.frameID, this.tfUpdate); + }; +} /** * @author Russell Toris - rctoris@wpi.edu * @author Nils Berg - berg.nils@gmail.com */ -/** - * A MarkerArray client that listens to a given topic. - * - * Emits the following events: - * - * * 'change' - there was an update or change in the MarkerArray - * - * @constructor - * @param options - object with following keys: - * - * * ros - the ROSLIB.Ros connection handle - * * topic - the marker topic to listen to - * * tfClient - the TF client handle to use - * * rootObject (optional) - the root object to add the markers to - * * path (optional) - the base path to any meshes that will be loaded - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.MarkerArrayClient = function(options) { - var that = this; - options = options || {}; - var ros = options.ros; - var topic = options.topic; - this.tfClient = options.tfClient; - this.rootObject = options.rootObject || new THREE.Object3D(); - this.path = options.path || '/'; - this.loader = options.loader || ROS3D.COLLADA_LOADER_2; +class MarkerArrayClient extends eventemitter2 { - // Markers that are displayed (Map ns+id--Marker) - this.markers = {}; + /** + * A MarkerArray client that listens to a given topic. + * + * Emits the following events: + * + * * 'change' - there was an update or change in the MarkerArray + * + * @constructor + * @param options - object with following keys: + * + * * ros - the ROSLIB.Ros connection handle + * * topic - the marker topic to listen to + * * tfClient - the TF client handle to use + * * rootObject (optional) - the root object to add the markers to + * * path (optional) - the base path to any meshes that will be loaded + */ + constructor(options) { + super(); + options = options || {}; + this.ros = options.ros; + this.topicName = options.topic; + this.tfClient = options.tfClient; + this.rootObject = options.rootObject || new THREE$1.Object3D(); + this.path = options.path || '/'; - // subscribe to MarkerArray topic - var arrayTopic = new ROSLIB.Topic({ - ros : ros, - name : topic, - messageType : 'visualization_msgs/MarkerArray', - compression : 'png' - }); - - arrayTopic.subscribe(function(arrayMessage) { + // Markers that are displayed (Map ns+id--Marker) + this.markers = {}; + this.rosTopic = undefined; + this.subscribe(); + }; + + subscribe(){ + this.unsubscribe(); + + // subscribe to MarkerArray topic + this.rosTopic = new ROSLIB.Topic({ + ros : this.ros, + name : this.topicName, + messageType : 'visualization_msgs/MarkerArray', + compression : 'png' + }); + this.rosTopic.subscribe(this.processMessage.bind(this)); + }; + + processMessage(arrayMessage){ arrayMessage.markers.forEach(function(message) { if(message.action === 0) { var updated = false; - if(message.ns + message.id in that.markers) { // "MODIFY" - updated = that.markers[message.ns + message.id].children[0].update(message); + if(message.ns + message.id in this.markers) { // "MODIFY" + updated = this.markers[message.ns + message.id].children[0].update(message); if(!updated) { // "REMOVE" - that.rootObject.remove(that.markers[message.ns + message.id]); + this.markers[message.ns + message.id].unsubscribeTf(); + this.rootObject.remove(this.markers[message.ns + message.id]); } } if(!updated) { // "ADD" - var newMarker = new ROS3D.Marker({ + var newMarker = new Marker({ message : message, - path : that.path, - loader : that.loader + path : this.path, }); - that.markers[message.ns + message.id] = new ROS3D.SceneNode({ + this.markers[message.ns + message.id] = new SceneNode({ frameID : message.header.frame_id, - tfClient : that.tfClient, + tfClient : this.tfClient, object : newMarker }); - that.rootObject.add(that.markers[message.ns + message.id]); + this.rootObject.add(this.markers[message.ns + message.id]); } } else if(message.action === 1) { // "DEPRECATED" console.warn('Received marker message with deprecated action identifier "1"'); } else if(message.action === 2) { // "DELETE" - that.rootObject.remove(that.markers[message.ns + message.id]); - delete that.markers[message.ns + message.id]; + this.markers[message.ns + message.id].unsubscribeTf(); + this.rootObject.remove(this.markers[message.ns + message.id]); + delete this.markers[message.ns + message.id]; } else if(message.action === 3) { // "DELETE ALL" - for (var m in that.markers){ - that.rootObject.remove(m); + for (var m in this.markers){ + this.markers[m].unsubscribeTf(); + this.rootObject.remove(this.markers[m]); } - that.markers = {}; + this.markers = {}; } else { console.warn('Received marker message with unknown action identifier "'+message.action+'"'); } - }); - - that.emit('change'); - }); -}; -ROS3D.MarkerArrayClient.prototype.__proto__ = EventEmitter2.prototype; + }.bind(this)); + + this.emit('change'); + }; + + unsubscribe(){ + if(this.rosTopic){ + this.rosTopic.unsubscribe(); + } + }; +} /** * @author Russell Toris - rctoris@wpi.edu */ -/** - * A marker client that listens to a given marker topic. - * - * Emits the following events: - * - * * 'change' - there was an update or change in the marker - * - * @constructor - * @param options - object with following keys: - * - * * ros - the ROSLIB.Ros connection handle - * * topic - the marker topic to listen to - * * tfClient - the TF client handle to use - * * rootObject (optional) - the root object to add this marker to - * * path (optional) - the base path to any meshes that will be loaded - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.MarkerClient = function(options) { - var that = this; - options = options || {}; - var ros = options.ros; - var topic = options.topic; - this.tfClient = options.tfClient; - this.rootObject = options.rootObject || new THREE.Object3D(); - this.path = options.path || '/'; - this.loader = options.loader || ROS3D.COLLADA_LOADER_2; +class MarkerClient extends eventemitter2 { - // Markers that are displayed (Map ns+id--Marker) - this.markers = {}; + /** + * A marker client that listens to a given marker topic. + * + * Emits the following events: + * + * * 'change' - there was an update or change in the marker + * + * @constructor + * @param options - object with following keys: + * + * * ros - the ROSLIB.Ros connection handle + * * topic - the marker topic to listen to + * * tfClient - the TF client handle to use + * * rootObject (optional) - the root object to add this marker to + * * path (optional) - the base path to any meshes that will be loaded + * * lifetime - the lifetime of marker + */ + constructor(options) { + super(); + options = options || {}; + this.ros = options.ros; + this.topicName = options.topic; + this.tfClient = options.tfClient; + this.rootObject = options.rootObject || new THREE$1.Object3D(); + this.path = options.path || '/'; + this.lifetime = options.lifetime || 0; - // subscribe to the topic - var rosTopic = new ROSLIB.Topic({ - ros : ros, - name : topic, - messageType : 'visualization_msgs/Marker', - compression : 'png' - }); - rosTopic.subscribe(function(message) { + // Markers that are displayed (Map ns+id--Marker) + this.markers = {}; + this.rosTopic = undefined; + this.updatedTime = {}; - var newMarker = new ROS3D.Marker({ + this.subscribe(); + }; + + unsubscribe(){ + if(this.rosTopic){ + this.rosTopic.unsubscribe(); + } + }; + + checkTime(name){ + var curTime = new Date().getTime(); + if (curTime - this.updatedTime[name] > this.lifetime) { + var oldNode = this.markers[name]; + oldNode.unsubscribeTf(); + this.rootObject.remove(oldNode); + this.emit('change'); + } else { + var that = this; + setTimeout(function() {that.checkTime(name);}, + 100); + } + }; + + subscribe(){ + this.unsubscribe(); + + // subscribe to the topic + this.rosTopic = new ROSLIB.Topic({ + ros : this.ros, + name : this.topicName, + messageType : 'visualization_msgs/Marker', + compression : 'png' + }); + this.rosTopic.subscribe(this.processMessage.bind(this)); + }; + + processMessage(message){ + var newMarker = new Marker({ message : message, - path : that.path, - loader : that.loader + path : this.path, }); // remove old marker from Three.Object3D children buffer - that.rootObject.remove(that.markers[message.ns + message.id]); + var oldNode = this.markers[message.ns + message.id]; + this.updatedTime[message.ns + message.id] = new Date().getTime(); + if (oldNode) { + oldNode.unsubscribeTf(); + this.rootObject.remove(oldNode); + } else if (this.lifetime) { + this.checkTime(message.ns + message.id); + } - that.markers[message.ns + message.id] = new ROS3D.SceneNode({ + this.markers[message.ns + message.id] = new SceneNode({ frameID : message.header.frame_id, - tfClient : that.tfClient, + tfClient : this.tfClient, object : newMarker }); - that.rootObject.add(that.markers[message.ns + message.id]); + this.rootObject.add(this.markers[message.ns + message.id]); - that.emit('change'); - }); -}; -ROS3D.MarkerClient.prototype.__proto__ = EventEmitter2.prototype; + this.emit('change'); + }; +} /** - * @author David Gossow - dgossow@willowgarage.com + * @author Jihoon Lee - lee@magazino.eu */ -/** - * A Arrow is a THREE object that can be used to display an arrow model. - * - * @constructor - * @param options - object with following keys: - * - * * origin (optional) - the origin of the arrow - * * direction (optional) - the direction vector of the arrow - * * length (optional) - the length of the arrow - * * headLength (optional) - the head length of the arrow - * * shaftDiameter (optional) - the shaft diameter of the arrow - * * headDiameter (optional) - the head diameter of the arrow - * * material (optional) - the material to use for this arrow - */ -ROS3D.Arrow = function(options) { - options = options || {}; - var origin = options.origin || new THREE.Vector3(0, 0, 0); - var direction = options.direction || new THREE.Vector3(1, 0, 0); - var length = options.length || 1; - var headLength = options.headLength || 0.2; - var shaftDiameter = options.shaftDiameter || 0.05; - var headDiameter = options.headDiameter || 0.1; - var material = options.material || new THREE.MeshBasicMaterial(); - - var shaftLength = length - headLength; - - // create and merge geometry - var geometry = new THREE.CylinderGeometry(shaftDiameter * 0.5, shaftDiameter * 0.5, shaftLength, - 12, 1); - var m = new THREE.Matrix4(); - m.setPosition(new THREE.Vector3(0, shaftLength * 0.5, 0)); - geometry.applyMatrix(m); - - // create the head - var coneGeometry = new THREE.CylinderGeometry(0, headDiameter * 0.5, headLength, 12, 1); - m.setPosition(new THREE.Vector3(0, shaftLength + (headLength * 0.5), 0)); - coneGeometry.applyMatrix(m); - - // put the arrow together - THREE.GeometryUtils.merge(geometry, coneGeometry); - - THREE.Mesh.call(this, geometry, material); - - this.position = origin; - this.setDirection(direction); -}; -ROS3D.Arrow.prototype.__proto__ = THREE.Mesh.prototype; - -/** - * Set the direction of this arrow to that of the given vector. - * - * @param direction - the direction to set this arrow - */ -ROS3D.Arrow.prototype.setDirection = function(direction) { - var axis = new THREE.Vector3(0, 1, 0).cross(direction); - var radians = Math.acos(new THREE.Vector3(0, 1, 0).dot(direction.clone().normalize())); - this.matrix = new THREE.Matrix4().makeRotationAxis(axis.normalize(), radians); - this.rotation.setFromRotationMatrix(this.matrix, this.rotation.order); -}; - -/** - * Set this arrow to be the given length. - * - * @param length - the new length of the arrow - */ -ROS3D.Arrow.prototype.setLength = function(length) { - this.scale.set(length, length, length); -}; - -/** - * Set the color of this arrow to the given hex value. - * - * @param hex - the hex value of the color to use - */ -ROS3D.Arrow.prototype.setColor = function(hex) { - this.line.material.color.setHex(hex); - this.cone.material.color.setHex(hex); -}; - -/** - * @author David Gossow - dgossow@willowgarage.com - */ - -/** - * An Axes object can be used to display the axis of a particular coordinate frame. - * - * @constructor - * @param options - object with following keys: - * - * * shaftRadius (optional) - the radius of the shaft to render - * * headRadius (optional) - the radius of the head to render - * * headLength (optional) - the length of the head to render - */ -ROS3D.Axes = function(options) { - var that = this; - options = options || {}; - var shaftRadius = options.shaftRadius || 0.008; - var headRadius = options.headRadius || 0.023; - var headLength = options.headLength || 0.1; - - THREE.Object3D.call(this); - - // create the cylinders for the objects - this.lineGeom = new THREE.CylinderGeometry(shaftRadius, shaftRadius, 1.0 - headLength); - this.headGeom = new THREE.CylinderGeometry(0, headRadius, headLength); +class Arrow2 extends THREE$1.ArrowHelper { /** - * Adds an axis marker to this axes object. + * A Arrow is a THREE object that can be used to display an arrow model using ArrowHelper * - * @param axis - the 3D vector representing the axis to add + * @constructor + * @param options - object with following keys: + * + * * origin (optional) - the origin of the arrow + * * direction (optional) - the direction vector of the arrow + * * length (optional) - the length of the arrow + * * headLength (optional) - the head length of the arrow + * * shaftDiameter (optional) - the shaft diameter of the arrow + * * headDiameter (optional) - the head diameter of the arrow + * * material (optional) - the material to use for this arrow */ - function addAxis(axis) { - // set the color of the axis - var color = new THREE.Color(); - color.setRGB(axis.x, axis.y, axis.z); - var material = new THREE.MeshBasicMaterial({ - color : color.getHex() - }); + constructor(options) { + options = options || {}; + var origin = options.origin || new THREE$1.Vector3(0, 0, 0); + var direction = options.direction || new THREE$1.Vector3(1, 0, 0); + var length = options.length || 1; + var headLength = options.headLength || 0.2; + var shaftDiameter = options.shaftDiameter || 0.05; + var headDiameter = options.headDiameter || 0.1; + var material = options.material || new THREE$1.MeshBasicMaterial(); - // setup the rotation information - var rotAxis = new THREE.Vector3(); - rotAxis.crossVectors(axis, new THREE.Vector3(0, -1, 0)); - var rot = new THREE.Quaternion(); - rot.setFromAxisAngle(rotAxis, 0.5 * Math.PI); + super(direction, origin, length, 0xff0000); - // create the arrow - var arrow = new THREE.Mesh(that.headGeom, material); - arrow.position = axis.clone(); - arrow.position.multiplyScalar(0.95); - arrow.quaternion = rot; - arrow.updateMatrix(); - that.add(arrow); + }; - // create the line - var line = new THREE.Mesh(that.lineGeom, material); - line.position = axis.clone(); - line.position.multiplyScalar(0.45); - line.quaternion = rot; - line.updateMatrix(); - that.add(line); - } - // add the three markers to the axes - addAxis(new THREE.Vector3(1, 0, 0)); - addAxis(new THREE.Vector3(0, 1, 0)); - addAxis(new THREE.Vector3(0, 0, 1)); -}; -ROS3D.Axes.prototype.__proto__ = THREE.Object3D.prototype; - -/** - * @author Russell Toris - rctoris@wpi.edu - */ - -/** - * Create a grid object. - * - * @constructor - * @param options - object with following keys: - * - * * size (optional) - The number of cells of the grid - * * color (optional) - the line color of the grid, like '#cccccc' - * * lineWidth (optional) - the width of the lines in the grid - * * cellSize (optional) - The length, in meters, of the side of each cell - */ -ROS3D.Grid = function(options) { - options = options || {}; - var size = options.size || 10; - var color = options.color || '#cccccc'; - var lineWidth = options.lineWidth || 1; - var cellSize = options.cellSize || 1; - - THREE.Object3D.call(this); - - var material = new THREE.LineBasicMaterial({ - color: color, - linewidth: lineWidth - }); - - for (var i = 0; i <= size; ++i) { - var edge = cellSize * size / 2; - var position = edge - (i * cellSize); - var geometryH = new THREE.Geometry(); - geometryH.vertices.push( - new THREE.Vector3( -edge, position, 0 ), - new THREE.Vector3( edge, position, 0 ) - ); - var geometryV = new THREE.Geometry(); - geometryV.vertices.push( - new THREE.Vector3( position, -edge, 0 ), - new THREE.Vector3( position, edge, 0 ) - ); - this.add(new THREE.Line(geometryH, material)); - this.add(new THREE.Line(geometryV, material)); - } -}; - -ROS3D.Grid.prototype.__proto__ = THREE.Object3D.prototype; - -/** - * @author Jihoon Lee - jihoonlee.in@gmail.com - * @author Russell Toris - rctoris@wpi.edu - */ - -/** - * A MeshResource is an THREE object that will load from a external mesh file. Currently loads - * Collada files. - * - * @constructor - * @param options - object with following keys: - * - * * path (optional) - the base path to the associated models that will be loaded - * * resource - the resource file name to load - * * material (optional) - the material to use for the object - * * warnings (optional) - if warnings should be printed - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.MeshResource = function(options) { - var that = this; - options = options || {}; - var path = options.path || '/'; - var resource = options.resource; - var material = options.material || null; - this.warnings = options.warnings; - var loaderType = options.loader || ROS3D.COLLADA_LOADER_2; - - THREE.Object3D.call(this); - - // check for a trailing '/' - if (path.substr(path.length - 1) !== '/') { - this.path += '/'; - } - - var uri = path + resource; - var fileType = uri.substr(-4).toLowerCase(); - - // check the type - var loader; - if (fileType === '.dae') { - if (loaderType === ROS3D.COLLADA_LOADER) { - loader = new THREE.ColladaLoader(); - } else { - loader = new ColladaLoader2(); + /* + * Free memory of elements in this object. + */ + dispose() { + if (this.line !== undefined) { + this.line.material.dispose(); + this.line.geometry.dispose(); } - loader.log = function(message) { - if (that.warnings) { - console.warn(message); - } - }; - loader.load(uri, function colladaReady(collada) { - // check for a scale factor in ColladaLoader2 - if(loaderType === ROS3D.COLLADA_LOADER_2 && collada.dae.asset.unit) { - var scale = collada.dae.asset.unit; - collada.scene.scale = new THREE.Vector3(scale, scale, scale); - } - - // add a texture to anything that is missing one - if(material !== null) { - var setMaterial = function(node, material) { - // do not overwrite the material - if (typeof node.material === 'undefined') { - node.material = material; - } - //node.material = material; - if (node.children) { - for (var i = 0; i < node.children.length; i++) { - setMaterial(node.children[i], material); - } - } - }; - - setMaterial(collada.scene, material); - } - - that.add(collada.scene); - }); - } else if (fileType === '.stl') { - loader = new THREE.STLLoader(); - { - loader.load(uri, function ( geometry ) { - geometry.computeFaceNormals(); - var mesh; - if(material !== null) { - mesh = new THREE.Mesh( geometry, material ); - } else { - mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { color: 0x999999 } ) ); - } - that.add(mesh); - } ); + if (this.cone!== undefined) { + this.cone.material.dispose(); + this.cone.geometry.dispose(); } - } -}; -ROS3D.MeshResource.prototype.__proto__ = THREE.Object3D.prototype; + }; + + /* + setLength ( length, headLength, headWidth ) { + if ( headLength === undefined ) { + headLength = 0.2 * length; + } + if ( headWidth === undefined ) { + headWidth = 0.2 * headLength; + } + + this.line.scale.set( 1, Math.max( 0, length), 1 ); + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + + }; + */ +} /** * @author David Gossow - dgossow@willowgarage.com */ -/** - * A TriangleList is a THREE object that can be used to display a list of triangles as a geometry. - * - * @constructor - * @param options - object with following keys: - * - * * material (optional) - the material to use for the object - * * vertices - the array of vertices to use - * * colors - the associated array of colors to use - */ -ROS3D.TriangleList = function(options) { - options = options || {}; - var material = options.material || new THREE.MeshBasicMaterial(); - var vertices = options.vertices; - var colors = options.colors; +class Axes extends THREE$1.Object3D { - THREE.Object3D.call(this); + /** + * An Axes object can be used to display the axis of a particular coordinate frame. + * + * @constructor + * @param options - object with following keys: + * + * * shaftRadius (optional) - the radius of the shaft to render + * * headRadius (optional) - the radius of the head to render + * * headLength (optional) - the length of the head to render + * * scale (optional) - the scale of the frame (defaults to 1.0) + * * lineType (optional) - the line type for the axes. Supported line types: + * 'dashed' and 'full'. + * * lineDashLength (optional) - the length of the dashes, relative to the length of the axis. + * Maximum value is 1, which means the dash length is + * equal to the length of the axis. Parameter only applies when + * lineType is set to dashed. + */ + constructor(options) { + super(); + var that = this; + options = options || {}; + var shaftRadius = options.shaftRadius || 0.008; + var headRadius = options.headRadius || 0.023; + var headLength = options.headLength || 0.1; + var scaleArg = options.scale || 1.0; + var lineType = options.lineType || 'full'; + var lineDashLength = options.lineDashLength || 0.1; - // set the material to be double sided - material.side = THREE.DoubleSide; - // construct the geometry - var geometry = new THREE.Geometry(); - for (i = 0; i < vertices.length; i++) { - geometry.vertices.push(new THREE.Vector3(vertices[i].x, vertices[i].y, vertices[i].z)); - } + this.scale.set(scaleArg, scaleArg, scaleArg); - // set the colors - var i, j; - if (colors.length === vertices.length) { - // use per-vertex color - for (i = 0; i < vertices.length; i += 3) { - var faceVert = new THREE.Face3(i, i + 1, i + 2); - for (j = i * 3; j < i * 3 + 3; i++) { - var color = new THREE.Color(); - color.setRGB(colors[i].r, colors[i].g, colors[i].b); - faceVert.vertexColors.push(color); + // create the cylinders for the objects + this.lineGeom = new THREE$1.CylinderGeometry(shaftRadius, shaftRadius, 1.0 - headLength); + this.headGeom = new THREE$1.CylinderGeometry(0, headRadius, headLength); + + /** + * Adds an axis marker to this axes object. + * + * @param axis - the 3D vector representing the axis to add + */ + function addAxis(axis) { + // set the color of the axis + var color = new THREE$1.Color(); + color.setRGB(axis.x, axis.y, axis.z); + var material = new THREE$1.MeshBasicMaterial({ + color : color.getHex() + }); + + // setup the rotation information + var rotAxis = new THREE$1.Vector3(); + rotAxis.crossVectors(axis, new THREE$1.Vector3(0, -1, 0)); + var rot = new THREE$1.Quaternion(); + rot.setFromAxisAngle(rotAxis, 0.5 * Math.PI); + + // create the arrow + var arrow = new THREE$1.Mesh(that.headGeom, material); + arrow.position.copy(axis); + arrow.position.multiplyScalar(0.95); + arrow.quaternion.copy(rot); + arrow.updateMatrix(); + that.add(arrow); + + // create the line + var line; + if (lineType === 'dashed') { + var l = lineDashLength; + for (var i = 0; (l / 2 + 3 * l * i + l / 2) <= 1; ++i) { + var geom = new THREE$1.CylinderGeometry(shaftRadius, shaftRadius, l); + line = new THREE$1.Mesh(geom, material); + line.position.copy(axis); + // Make spacing between dashes equal to 1.5 times the dash length. + line.position.multiplyScalar(l / 2 + 3 * l * i); + line.quaternion.copy(rot); + line.updateMatrix(); + that.add(line); + } + } else if (lineType === 'full') { + line = new THREE$1.Mesh(that.lineGeom, material); + line.position.copy(axis); + line.position.multiplyScalar(0.45); + line.quaternion.copy(rot); + line.updateMatrix(); + that.add(line); + } else { + console.warn('[Axes]: Unsupported line type. Not drawing any axes.'); } - geometry.faces.push(face); } - material.vertexColors = THREE.VertexColors; - } else if (colors.length === vertices.length / 3) { - // use per-triangle color - for (i = 0; i < vertices.length; i += 3) { - var faceTri = new THREE.Face3(i, i + 1, i + 2); - faceTri.color.setRGB(colors[i / 3].r, colors[i / 3].g, colors[i / 3].b); - geometry.faces.push(faceTri); - } - material.vertexColors = THREE.FaceColors; - } else { - // use marker color - for (i = 0; i < vertices.length; i += 3) { - var face = new THREE.Face3(i, i + 1, i + 2); - geometry.faces.push(face); - } - } - geometry.computeBoundingBox(); - geometry.computeBoundingSphere(); - geometry.computeCentroids(); - geometry.computeFaceNormals(); - - this.add(new THREE.Mesh(geometry, material)); -}; -ROS3D.TriangleList.prototype.__proto__ = THREE.Object3D.prototype; + // add the three markers to the axes + addAxis(new THREE$1.Vector3(1, 0, 0)); + addAxis(new THREE$1.Vector3(0, 1, 0)); + addAxis(new THREE$1.Vector3(0, 0, 1)); + }; +} /** - * Set the color of this object to the given hex value. - * - * @param hex - the hex value of the color to set - */ -ROS3D.TriangleList.prototype.setColor = function(hex) { - this.mesh.material.color.setHex(hex); -}; - -/** - * @author Jihoon Lee - jihoonlee.in@gmail.com * @author Russell Toris - rctoris@wpi.edu */ -/** - * A URDF can be used to load a ROSLIB.UrdfModel and its associated models into a 3D object. - * - * @constructor - * @param options - object with following keys: - * - * * urdfModel - the ROSLIB.UrdfModel to load - * * tfClient - the TF client handle to use - * * path (optional) - the base path to the associated Collada models that will be loaded - * * tfPrefix (optional) - the TF prefix to used for multi-robots - * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER - * ROS3D.COLLADA_LOADER_2) -- defaults to ROS3D.COLLADA_LOADER_2 - */ -ROS3D.Urdf = function(options) { - options = options || {}; - var urdfModel = options.urdfModel; - var path = options.path || '/'; - var tfClient = options.tfClient; - var tfPrefix = options.tfPrefix || ''; - var loader = options.loader || ROS3D.COLLADA_LOADER_2; +class Grid extends THREE$1.Object3D { - THREE.Object3D.call(this); + /** + * Create a grid object. + * + * @constructor + * @param options - object with following keys: + * + * * num_cells (optional) - The number of cells of the grid + * * color (optional) - the line color of the grid, like '#cccccc' + * * lineWidth (optional) - the width of the lines in the grid + * * cellSize (optional) - The length, in meters, of the side of each cell + */ + constructor(options) { + options = options || {}; + var num_cells = options.num_cells || 10; + var color = options.color || '#cccccc'; + var lineWidth = options.lineWidth || 1; + var cellSize = options.cellSize || 1; - // load all models - var links = urdfModel.links; - for ( var l in links) { - var link = links[l]; - for( var i=0; i= this.keep) { + this.sns[0].unsubscribeTf(); + this.rootObject.remove(this.sns[0]); + this.sns.shift(); + } + + this.options.origin = new THREE$1.Vector3( message.pose.pose.position.x, message.pose.pose.position.y, + message.pose.pose.position.z); + + var rot = new THREE$1.Quaternion(message.pose.pose.orientation.x, message.pose.pose.orientation.y, + message.pose.pose.orientation.z, message.pose.pose.orientation.w); + this.options.direction = new THREE$1.Vector3(1,0,0); + this.options.direction.applyQuaternion(rot); + this.options.material = new THREE$1.MeshBasicMaterial({color: this.color}); + var arrow = new Arrow(this.options); + + this.sns.push(new SceneNode({ + frameID : message.header.frame_id, + tfClient : this.tfClient, + object : arrow + })); + + this.rootObject.add(this.sns[ this.sns.length - 1]); + }; +} + +/** + * @author David V. Lu!! - davidvlu@gmail.com + */ + +let Path$1 = class Path extends THREE$1.Object3D { + + /** + * A Path client that listens to a given topic and displays a line connecting the poses. + * + * @constructor + * @param options - object with following keys: + * + * * ros - the ROSLIB.Ros connection handle + * * topic - the marker topic to listen to + * * tfClient - the TF client handle to use + * * rootObject (optional) - the root object to add this marker to + * * color (optional) - color for line (default: 0xcc00ff) + */ + constructor(options) { + super(); + options = options || {}; + this.ros = options.ros; + this.topicName = options.topic || '/path'; + this.tfClient = options.tfClient; + this.color = options.color || 0xcc00ff; + this.rootObject = options.rootObject || new THREE$1.Object3D(); + + this.sn = null; + this.line = null; + + this.rosTopic = undefined; + this.subscribe(); + }; + + + unsubscribe(){ + if(this.rosTopic){ + this.rosTopic.unsubscribe(); + } + }; + + subscribe(){ + this.unsubscribe(); + + // subscribe to the topic + this.rosTopic = new ROSLIB.Topic({ + ros : this.ros, + name : this.topicName, + messageType : 'nav_msgs/Path' + }); + this.rosTopic.subscribe(this.processMessage.bind(this)); + }; + + processMessage(message){ + if(this.sn!==null){ + this.sn.unsubscribeTf(); + this.rootObject.remove(this.sn); + } + + var lineGeometry = new THREE$1.Geometry(); + for(var i=0; i= message.range_min && range <= message.range_max){ + var angle = message.angle_min + i * message.angle_increment; + this.points.positions.array[j++] = range * Math.cos(angle); + this.points.positions.array[j++] = range * Math.sin(angle); + this.points.positions.array[j++] = 0.0; + } + } + this.points.update(j/3); + }; +} + +/** + * @author David V. Lu!! - davidvlu@gmail.com + * @author Mathieu Bredif - mathieu.bredif@ign.fr + */ + +/** + * Decodes the base64-encoded array 'inbytes' into the array 'outbytes' + * until 'inbytes' is exhausted or 'outbytes' is filled. + * if 'record_size' is specified, records of length 'record_size' bytes + * are copied every other 'pointRatio' records. + * returns the number of decoded records + */ +function decode64(inbytes, outbytes, record_size, pointRatio) { + var x,b=0,l=0,j=0,L=inbytes.length,A=outbytes.length; + record_size = record_size || A; // default copies everything (no skipping) + pointRatio = pointRatio || 1; // default copies everything (no skipping) + var bitskip = (pointRatio-1) * record_size * 8; + for(x=0;x=8){ + l-=8; + outbytes[j++]=(b>>>l)&0xff; + if((j % record_size) === 0) { // skip records + // no optimization: for(var i=0;i=8) {l-=8;i+=8;}} + // first optimization: for(;l0){b=decode64.e[inbytes.charAt(x)];} + } + } + } + return Math.floor(j/record_size); +} +// initialize decoder with static lookup table 'e' +decode64.S='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +decode64.e={}; +for(var i=0;i<64;i++){decode64.e[decode64.S.charAt(i)]=i;} + + +class PointCloud2 extends THREE$1.Object3D { + + /** + * A PointCloud2 client that listens to a given topic and displays the points. + * + * @constructor + * @param options - object with following keys: + * + * * ros - the ROSLIB.Ros connection handle + * * topic - the marker topic to listen to (default: '/points') + * * tfClient - the TF client handle to use + * * compression (optional) - message compression (default: 'cbor') + * * rootObject (optional) - the root object to add this marker to use for the points. + * * max_pts (optional) - number of points to draw (default: 10000) + * * pointRatio (optional) - point subsampling ratio (default: 1, no subsampling) + * * messageRatio (optional) - message subsampling ratio (default: 1, no subsampling) + * * material (optional) - a material object or an option to construct a PointsMaterial. + * * colorsrc (optional) - the field to be used for coloring (default: 'rgb') + * * colormap (optional) - function that turns the colorsrc field value to a color + */ + constructor(options) { + super(); + options = options || {}; + this.ros = options.ros; + this.topicName = options.topic || '/points'; + this.compression = options.compression || 'cbor'; + this.max_pts = options.max_pts || 10000; + this.points = new Points$1(options); + this.rosTopic = undefined; + this.buffer = null; + this.subscribe(); + }; + + + unsubscribe(){ + if(this.rosTopic){ + this.rosTopic.unsubscribe(); + } + }; + + subscribe(){ + this.unsubscribe(); + + // subscribe to the topic + this.rosTopic = new ROSLIB.Topic({ + ros : this.ros, + name : this.topicName, + messageType : 'sensor_msgs/PointCloud2', + compression: this.compression + }); + this.rosTopic.subscribe(this.processMessage.bind(this)); + }; + + processMessage(msg){ + if(!this.points.setup(msg.header.frame_id, msg.point_step, msg.fields)) { + return; + } + + var n, pointRatio = this.points.pointRatio; + var bufSz = this.max_pts * msg.point_step; + + if (msg.data.buffer) { + this.buffer = msg.data.slice(0, Math.min(msg.data.byteLength, bufSz)); + n = Math.min(msg.height*msg.width / pointRatio, this.points.positions.array.length / 3); + } else { + if (!this.buffer || this.buffer.byteLength < bufSz) { + this.buffer = new Uint8Array(bufSz); + } + n = decode64(msg.data, this.buffer, msg.point_step, pointRatio); + pointRatio = 1; + } + + var dv = new DataView(this.buffer.buffer); + var littleEndian = !msg.is_bigendian; + var x = this.points.fields.x.offset; + var y = this.points.fields.y.offset; + var z = this.points.fields.z.offset; + var base, color; + for(var i = 0; i < n; i++){ + base = i * pointRatio * msg.point_step; + this.points.positions.array[3*i ] = dv.getFloat32(base+x, littleEndian); + this.points.positions.array[3*i + 1] = dv.getFloat32(base+y, littleEndian); + this.points.positions.array[3*i + 2] = dv.getFloat32(base+z, littleEndian); + + if(this.points.colors){ + color = this.points.colormap(this.points.getColor(dv,base,littleEndian)); + this.points.colors.array[3*i ] = color.r; + this.points.colors.array[3*i + 1] = color.g; + this.points.colors.array[3*i + 2] = color.b; + } + } + this.points.update(n); + }; +} + +/** + * @author Jihoon Lee - jihoonlee.in@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +class Urdf extends THREE$1.Object3D { + + /** + * A URDF can be used to load a ROSLIB.UrdfModel and its associated models into a 3D object. + * + * @constructor + * @param options - object with following keys: + * + * * urdfModel - the ROSLIB.UrdfModel to load + * * tfClient - the TF client handle to use + * * path (optional) - the base path to the associated Collada models that will be loaded + * * tfPrefix (optional) - the TF prefix to used for multi-robots + * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER) + */ + constructor(options) { + options = options || {}; + var urdfModel = options.urdfModel; + var path = options.path || '/'; + var tfClient = options.tfClient; + var tfPrefix = options.tfPrefix || ''; + var loader = options.loader; + + super(); + // load all models - that.rootObject.add(new ROS3D.Urdf({ - urdfModel : urdfModel, - path : that.path, - tfClient : that.tfClient, - tfPrefix : tfPrefix, - loader : loader - })); - }); -}; + var links = urdfModel.links; + for ( var l in links) { + var link = links[l]; + for( var i=0; i= 0; o--) { - if (objlist[o].object === objects[c]) { - renderList.push(objlist[o]); - break; + // create a scene node with the model + var sceneNode = new SceneNode({ + frameID : frameID, + pose : visual.origin, + tfClient : tfClient, + object : mesh + }); + this.add(sceneNode); + } else { + console.warn('Could not load geometry mesh: '+uri); + } + } else { + if (!colorMaterial) { + colorMaterial = makeColorMaterial(0, 0, 0, 1); + } + var shapeMesh; + // Create a shape + switch (visual.geometry.type) { + case ROSLIB.URDF_BOX: + var dimension = visual.geometry.dimension; + var cube = new THREE$1.BoxGeometry(dimension.x, dimension.y, dimension.z); + shapeMesh = new THREE$1.Mesh(cube, colorMaterial); + break; + case ROSLIB.URDF_CYLINDER: + var radius = visual.geometry.radius; + var length = visual.geometry.length; + var cylinder = new THREE$1.CylinderGeometry(radius, radius, length, 16, 1, false); + shapeMesh = new THREE$1.Mesh(cylinder, colorMaterial); + shapeMesh.quaternion.setFromAxisAngle(new THREE$1.Vector3(1, 0, 0), Math.PI * 0.5); + break; + case ROSLIB.URDF_SPHERE: + var sphere = new THREE$1.SphereGeometry(visual.geometry.radius, 16); + shapeMesh = new THREE$1.Mesh(sphere, colorMaterial); + break; + } + // Create a scene node with the shape + var scene = new SceneNode({ + frameID: frameID, + pose: visual.origin, + tfClient: tfClient, + object: shapeMesh + }); + this.add(scene); + } } } - // recurse into children - this.getWebglObjects(scene, objects[c].children, renderList); } - } -}; + }; + + unsubscribeTf () { + this.children.forEach(function(n) { + if (typeof n.unsubscribeTf === 'function') { n.unsubscribeTf(); } + }); + }; +} /** - * Render highlighted objects in the scene. - * - * @param renderer - the renderer to use - * @param scene - the scene to use - * @param camera - the camera to use + * @author Jihoon Lee - jihoonlee.in@gmail.com + * @author Russell Toris - rctoris@wpi.edu */ -ROS3D.Highlighter.prototype.renderHighlight = function(renderer, scene, camera) { - // get webgl objects - var renderList = []; - this.getWebglObjects(scene, this.hoverObjs, renderList); - // define highlight material - scene.overrideMaterial = new THREE.MeshBasicMaterial({ - fog : false, - opacity : 0.5, - depthTest : true, - depthWrite : false, - polygonOffset : true, - polygonOffsetUnits : -1, - side : THREE.DoubleSide - }); +class UrdfClient { - // swap render lists, render, undo - var oldWebglObjects = scene.__webglObjects; - scene.__webglObjects = renderList; + /** + * A URDF client can be used to load a URDF and its associated models into a 3D object from the ROS + * parameter server. + * + * Emits the following events: + * + * * 'change' - emited after the URDF and its meshes have been loaded into the root object + * + * @constructor + * @param options - object with following keys: + * + * * ros - the ROSLIB.Ros connection handle + * * param (optional) - the paramter to load the URDF from, like 'robot_description' + * * tfClient - the TF client handle to use + * * path (optional) - the base path to the associated Collada models that will be loaded + * * rootObject (optional) - the root object to add this marker to + * * tfPrefix (optional) - the TF prefix to used for multi-robots + * * loader (optional) - the Collada loader to use (e.g., an instance of ROS3D.COLLADA_LOADER) + */ + constructor(options) { + var that = this; + options = options || {}; + var ros = options.ros; + this.param = options.param || 'robot_description'; + this.path = options.path || '/'; + this.tfClient = options.tfClient; + this.rootObject = options.rootObject || new THREE$1.Object3D(); + this.tfPrefix = options.tfPrefix || ''; + this.loader = options.loader; - renderer.render(scene, camera); + // get the URDF value from ROS + var getParam = new ROSLIB.Param({ + ros : ros, + name : this.param + }); + getParam.get(function(string) { + // hand off the XML string to the URDF model + var urdfModel = new ROSLIB.UrdfModel({ + string : string + }); - scene.__webglObjects = oldWebglObjects; - scene.overrideMaterial = null; -}; + // load all models + that.urdf = new Urdf({ + urdfModel : urdfModel, + path : that.path, + tfClient : that.tfClient, + tfPrefix : that.tfPrefix, + loader : that.loader + }); + that.rootObject.add(that.urdf); + }); + }; +} /** * @author David Gossow - dgossow@willowgarage.com */ -/** - * A handler for mouse events within a 3D viewer. - * - * @constructor - * @param options - object with following keys: - * - * * renderer - the main renderer - * * camera - the main camera in the scene - * * rootObject - the root object to check for mouse events - * * fallbackTarget - the fallback target, e.g., the camera controls - */ -ROS3D.MouseHandler = function(options) { - THREE.EventDispatcher.call(this); - this.renderer = options.renderer; - this.camera = options.camera; - this.rootObject = options.rootObject; - this.fallbackTarget = options.fallbackTarget; - this.lastTarget = this.fallbackTarget; - this.dragging = false; - this.projector = new THREE.Projector(); +class Highlighter { - // listen to DOM events - var eventNames = [ 'contextmenu', 'click', 'dblclick', 'mouseout', 'mousedown', 'mouseup', - 'mousemove', 'mousewheel', 'DOMMouseScroll', 'touchstart', 'touchend', 'touchcancel', - 'touchleave', 'touchmove' ]; - this.listeners = {}; + /** + * A mouseover highlighter for 3D objects in the scene. + * + * @constructor + * @param options - object with following keys: + * + * * mouseHandler - the handler for the mouseover and mouseout events + */ + constructor(options) { + options = options || {}; + this.mouseHandler = options.mouseHandler; + this.hoverObjs = {}; - // add event listeners for the associated mouse events - eventNames.forEach(function(eventName) { - this.listeners[eventName] = this.processDomEvent.bind(this); - this.renderer.domElement.addEventListener(eventName, this.listeners[eventName], false); - }, this); -}; - -/** - * Process the particular DOM even that has occurred based on the mouse's position in the scene. - * - * @param domEvent - the DOM event to process - */ -ROS3D.MouseHandler.prototype.processDomEvent = function(domEvent) { - // don't deal with the default handler - domEvent.preventDefault(); - - // compute normalized device coords and 3D mouse ray - var target = domEvent.target; - var rect = target.getBoundingClientRect(); - var pos_x, pos_y; - - if(domEvent.type.indexOf('touch') !== -1) { - pos_x = domEvent.changedTouches[0].clientX; - pos_y = domEvent.changedTouches[0].clientY; - } - else { - pos_x = domEvent.clientX; - pos_y = domEvent.clientY; - } - var left = pos_x - rect.left - target.clientLeft + target.scrollLeft; - var top = pos_y - rect.top - target.clientTop + target.scrollTop; - var deviceX = left / target.clientWidth * 2 - 1; - var deviceY = -top / target.clientHeight * 2 + 1; - var vector = new THREE.Vector3(deviceX, deviceY, 0.5); - this.projector.unprojectVector(vector, this.camera); - // use the THREE raycaster - var mouseRaycaster = new THREE.Raycaster(this.camera.position.clone(), vector.sub( - this.camera.position).normalize()); - mouseRaycaster.linePrecision = 0.001; - var mouseRay = mouseRaycaster.ray; - - // make our 3d mouse event - var event3D = { - mousePos : new THREE.Vector2(deviceX, deviceY), - mouseRay : mouseRay, - domEvent : domEvent, - camera : this.camera, - intersection : this.lastIntersection + // bind the mouse events + this.mouseHandler.addEventListener('mouseover', this.onMouseOver.bind(this)); + this.mouseHandler.addEventListener('mouseout', this.onMouseOut.bind(this)); }; - // if the mouse leaves the dom element, stop everything - if (domEvent.type === 'mouseout') { - if (this.dragging) { - this.notify(this.lastTarget, 'mouseup', event3D); - this.dragging = false; + /** + * Add the current target of the mouseover to the hover list. + * + * @param event - the event that contains the target of the mouseover + */ + onMouseOver(event) { + this.hoverObjs[event.currentTarget.uuid] = event.currentTarget; + }; + + /** + * Remove the current target of the mouseover from the hover list. + * + * @param event - the event that contains the target of the mouseout + */ + onMouseOut(event) { + var uuid = event.currentTarget.uuid; + if (uuid in this.hoverObjs) + { + delete this.hoverObjs[uuid]; } - this.notify(this.lastTarget, 'mouseout', event3D); - this.lastTarget = null; - return; - } + }; - // if the touch leaves the dom element, stop everything - if (domEvent.type === 'touchleave' || domEvent.type === 'touchend') { - if (this.dragging) { - this.notify(this.lastTarget, 'mouseup', event3D); - this.dragging = false; + + /** + * Render the highlights for all objects that are currently highlighted. + * + * This method should be executed after clearing the renderer and + * rendering the regular scene. + * + * @param scene - the current scene, which should contain the highlighted objects (among others) + * @param renderer - the renderer used to render the scene. + * @param camera - the scene's camera + */ + renderHighlights(scene, renderer, camera) { + + // Render highlights by making everything but the highlighted + // objects invisible... + this.makeEverythingInvisible(scene); + this.makeHighlightedVisible(scene); + + // Providing a transparent overrideMaterial... + var originalOverrideMaterial = scene.overrideMaterial; + scene.overrideMaterial = new THREE$1.MeshBasicMaterial({ + fog : false, + opacity : 0.5, + transparent : true, + depthTest : true, + depthWrite : false, + polygonOffset : true, + polygonOffsetUnits : -1, + side : THREE$1.DoubleSide + }); + + // And then rendering over the regular scene + renderer.render(scene, camera); + + // Finally, restore the original overrideMaterial (if any) and + // object visibility. + scene.overrideMaterial = originalOverrideMaterial; + this.restoreVisibility(scene); + }; + + + /** + * Traverses the given object and makes every object that's a Mesh, + * Line or Sprite invisible. Also saves the previous visibility state + * so we can restore it later. + * + * @param scene - the object to traverse + */ + makeEverythingInvisible (scene) { + scene.traverse(function(currentObject) { + if ( currentObject instanceof THREE$1.Mesh || currentObject instanceof THREE$1.Line + || currentObject instanceof THREE$1.Sprite ) { + currentObject.previousVisibility = currentObject.visible; + currentObject.visible = false; + } + }); + }; + + + /** + * Make the objects in the scene that are currently highlighted (and + * all of their children!) visible. + * + * @param scene - the object to traverse + */ + makeHighlightedVisible (scene) { + var makeVisible = function(currentObject) { + if ( currentObject instanceof THREE$1.Mesh || currentObject instanceof THREE$1.Line + || currentObject instanceof THREE$1.Sprite ) { + currentObject.visible = true; + } + }; + + for (var uuid in this.hoverObjs) { + var selectedObject = this.hoverObjs[uuid]; + // Make each selected object and all of its children visible + selectedObject.visible = true; + selectedObject.traverse(makeVisible); } - this.notify(this.lastTarget, 'touchend', event3D); - this.lastTarget = null; - return; - } + }; - // while the user is holding the mouse down, stay on the same target - if (this.dragging) { - this.notify(this.lastTarget, domEvent.type, event3D); - // for check for right or left mouse button - if ((domEvent.type === 'mouseup' && domEvent.button === 2) || domEvent.type === 'click' || domEvent.type === 'touchend') { - this.dragging = false; + /** + * Restore the old visibility state that was saved by + * makeEverythinginvisible. + * + * @param scene - the object to traverse + */ + restoreVisibility (scene) { + scene.traverse(function(currentObject) { + if (currentObject.hasOwnProperty('previousVisibility')) { + currentObject.visible = currentObject.previousVisibility; + } + }.bind(this)); + }; +} + +/** + * @author David Gossow - dgossow@willowgarage.com + */ + +class MouseHandler extends THREE$1.EventDispatcher { + + /** + * A handler for mouse events within a 3D viewer. + * + * @constructor + * @param options - object with following keys: + * + * * renderer - the main renderer + * * camera - the main camera in the scene + * * rootObject - the root object to check for mouse events + * * fallbackTarget - the fallback target, e.g., the camera controls + */ + constructor(options) { + super(); + this.renderer = options.renderer; + this.camera = options.camera; + this.rootObject = options.rootObject; + this.fallbackTarget = options.fallbackTarget; + this.lastTarget = this.fallbackTarget; + this.dragging = false; + + // listen to DOM events + var eventNames = [ 'contextmenu', 'click', 'dblclick', 'mouseout', 'mousedown', 'mouseup', + 'mousemove', 'mousewheel', 'DOMMouseScroll', 'touchstart', 'touchend', 'touchcancel', + 'touchleave', 'touchmove' ]; + this.listeners = {}; + + // add event listeners for the associated mouse events + eventNames.forEach(function(eventName) { + this.listeners[eventName] = this.processDomEvent.bind(this); + this.renderer.domElement.addEventListener(eventName, this.listeners[eventName], false); + }, this); + }; + + /** + * Process the particular DOM even that has occurred based on the mouse's position in the scene. + * + * @param domEvent - the DOM event to process + */ + processDomEvent(domEvent) { + // don't deal with the default handler + domEvent.preventDefault(); + + // compute normalized device coords and 3D mouse ray + var target = domEvent.target; + var rect = target.getBoundingClientRect(); + var pos_x, pos_y; + + if(domEvent.type.indexOf('touch') !== -1) { + pos_x = 0; + pos_y = 0; + for(var i=0; i 0) { - target = intersections[0].object; - event3D.intersection = this.lastIntersection = intersections[0]; - } else { - target = this.fallbackTarget; - } + // make our 3d mouse event + var event3D = { + mousePos : new THREE$1.Vector2(deviceX, deviceY), + mouseRay : mouseRay, + domEvent : domEvent, + camera : this.camera, + intersection : this.lastIntersection + }; - // if the mouse moves from one object to another (or from/to the 'null' object), notify both - if (target !== this.lastTarget && domEvent.type.match(/mouse/)) { - var eventAccepted = this.notify(target, 'mouseover', event3D); - if (eventAccepted) { + // if the mouse leaves the dom element, stop everything + if (domEvent.type === 'mouseout') { + if (this.dragging) { + this.notify(this.lastTarget, 'mouseup', event3D); + this.dragging = false; + } this.notify(this.lastTarget, 'mouseout', event3D); - } else { - // if target was null or no target has caught our event, fall back - target = this.fallbackTarget; - if (target !== this.lastTarget) { - this.notify(target, 'mouseover', event3D); - this.notify(this.lastTarget, 'mouseout', event3D); - } + this.lastTarget = null; + return; } - } - // if the finger moves from one object to another (or from/to the 'null' object), notify both - if (target !== this.lastTarget && domEvent.type.match(/touch/)) { - var toucheventAccepted = this.notify(target, domEvent.type, event3D); - if (toucheventAccepted) { - this.notify(this.lastTarget, 'touchleave', event3D); + // if the touch leaves the dom element, stop everything + if (domEvent.type === 'touchleave' || domEvent.type === 'touchend') { + if (this.dragging) { + this.notify(this.lastTarget, 'mouseup', event3D); + this.dragging = false; + } this.notify(this.lastTarget, 'touchend', event3D); + this.lastTarget = null; + return; + } + + // while the user is holding the mouse down, stay on the same target + if (this.dragging) { + this.notify(this.lastTarget, domEvent.type, event3D); + // for check for right or left mouse button + if ((domEvent.type === 'mouseup' && domEvent.button === 2) || domEvent.type === 'click' || domEvent.type === 'touchend') { + this.dragging = false; + } + return; + } + + // in the normal case, we need to check what is under the mouse + target = this.lastTarget; + var intersections = []; + intersections = mouseRaycaster.intersectObject(this.rootObject, true); + + if (intersections.length > 0) { + target = intersections[0].object; + event3D.intersection = this.lastIntersection = intersections[0]; } else { - // if target was null or no target has caught our event, fall back target = this.fallbackTarget; - if (target !== this.lastTarget) { - this.notify(this.lastTarget, 'touchmove', event3D); + } + + // if the mouse moves from one object to another (or from/to the 'null' object), notify both + if (target !== this.lastTarget && domEvent.type.match(/mouse/)) { + + // Event Status. TODO: Make it as enum + // 0: Accepted + // 1: Failed + // 2: Continued + var eventStatus = this.notify(target, 'mouseover', event3D); + if (eventStatus === 0) { + this.notify(this.lastTarget, 'mouseout', event3D); + } else if(eventStatus === 1) { + // if target was null or no target has caught our event, fall back + target = this.fallbackTarget; + if (target !== this.lastTarget) { + this.notify(target, 'mouseover', event3D); + this.notify(this.lastTarget, 'mouseout', event3D); + } + } + } + + // if the finger moves from one object to another (or from/to the 'null' object), notify both + if (target !== this.lastTarget && domEvent.type.match(/touch/)) { + var toucheventAccepted = this.notify(target, domEvent.type, event3D); + if (toucheventAccepted) { + this.notify(this.lastTarget, 'touchleave', event3D); this.notify(this.lastTarget, 'touchend', event3D); + } else { + // if target was null or no target has caught our event, fall back + target = this.fallbackTarget; + if (target !== this.lastTarget) { + this.notify(this.lastTarget, 'touchmove', event3D); + this.notify(this.lastTarget, 'touchend', event3D); + } } } - } - // pass through event - this.notify(target, domEvent.type, event3D); - if (domEvent.type === 'mousedown' || domEvent.type === 'touchstart' || domEvent.type === 'touchmove') { - this.dragging = true; - } - this.lastTarget = target; -}; - -/** - * Notify the listener of the type of event that occurred. - * - * @param target - the target of the event - * @param type - the type of event that occurred - * @param event3D - the 3D mouse even information - * @returns if an event was canceled - */ -ROS3D.MouseHandler.prototype.notify = function(target, type, event3D) { - // ensure the type is set - event3D.type = type; - - // make the event cancelable - event3D.cancelBubble = false; - event3D.stopPropagation = function() { - event3D.cancelBubble = true; + // pass through event + this.notify(target, domEvent.type, event3D); + if (domEvent.type === 'mousedown' || domEvent.type === 'touchstart' || domEvent.type === 'touchmove') { + this.dragging = true; + } + this.lastTarget = target; }; - // walk up graph until event is canceled or root node has been reached - event3D.currentTarget = target; - while (event3D.currentTarget) { - // try to fire event on object - if (event3D.currentTarget.dispatchEvent - && event3D.currentTarget.dispatchEvent instanceof Function) { - event3D.currentTarget.dispatchEvent(event3D); - if (event3D.cancelBubble) { - this.dispatchEvent(event3D); - return true; - } - } - // walk up - event3D.currentTarget = event3D.currentTarget.parent; - } - return false; -}; -THREE.EventDispatcher.prototype.apply( ROS3D.MouseHandler.prototype ); + /** + * Notify the listener of the type of event that occurred. + * + * @param target - the target of the event + * @param type - the type of event that occurred + * @param event3D - the 3D mouse even information + * @returns if an event was canceled + */ + notify(target, type, event3D) { + // ensure the type is set + // + event3D.type = type; + + // make the event cancelable + event3D.cancelBubble = false; + event3D.continueBubble = false; + event3D.stopPropagation = function() { + event3D.cancelBubble = true; + }; + + // it hit the selectable object but don't highlight + event3D.continuePropagation = function () { + event3D.continueBubble = true; + }; + + // walk up graph until event is canceled or root node has been reached + event3D.currentTarget = target; + + while (event3D.currentTarget) { + // try to fire event on object + if (event3D.currentTarget.dispatchEvent + && event3D.currentTarget.dispatchEvent instanceof Function) { + event3D.currentTarget.dispatchEvent(event3D); + if (event3D.cancelBubble) { + this.dispatchEvent(event3D); + return 0; // Event Accepted + } + else if(event3D.continueBubble) { + return 2; // Event Continued + } + } + // walk up + event3D.currentTarget = event3D.currentTarget.parent; + } + + return 1; // Event Failed + }; +} /** * @author David Gossow - dgossow@willowgarage.com @@ -3391,497 +55173,766 @@ THREE.EventDispatcher.prototype.apply( ROS3D.MouseHandler.prototype ); * @author AlteredQualia - http://alteredqualia.com */ -/** - * Behaves like THREE.OrbitControls, but uses right-handed coordinates and z as up vector. - * - * @constructor - * @param scene - the global scene to use - * @param camera - the camera to use - * @param userZoomSpeed (optional) - the speed for zooming - * @param userRotateSpeed (optional) - the speed for rotating - * @param autoRotate (optional) - if the orbit should auto rotate - * @param autoRotate (optional) - the speed for auto rotating - */ -ROS3D.OrbitControls = function(options) { - THREE.EventDispatcher.call(this); - var that = this; - options = options || {}; - var scene = options.scene; - this.camera = options.camera; - this.center = new THREE.Vector3(); - this.userZoom = true; - this.userZoomSpeed = options.userZoomSpeed || 1.0; - this.userRotate = true; - this.userRotateSpeed = options.userRotateSpeed || 1.0; - this.autoRotate = options.autoRotate; - this.autoRotateSpeed = options.autoRotateSpeed || 2.0; - - // In ROS, z is pointing upwards - this.camera.up = new THREE.Vector3(0, 0, 1); - - // internals - var pixelsPerRound = 1800; - var touchMoveThreshold = 10; - var rotateStart = new THREE.Vector2(); - var rotateEnd = new THREE.Vector2(); - var rotateDelta = new THREE.Vector2(); - var zoomStart = new THREE.Vector2(); - var zoomEnd = new THREE.Vector2(); - var zoomDelta = new THREE.Vector2(); - var moveStartCenter = new THREE.Vector3(); - var moveStartNormal = new THREE.Vector3(); - var moveStartPosition = new THREE.Vector3(); - var moveStartIntersection = new THREE.Vector3(); - var touchStartPosition = new Array(2); - var touchMoveVector = new Array(2); - this.phiDelta = 0; - this.thetaDelta = 0; - this.scale = 1; - this.lastPosition = new THREE.Vector3(); - // internal states - var STATE = { - NONE : -1, - ROTATE : 0, - ZOOM : 1, - MOVE : 2 - }; - var state = STATE.NONE; - - // add the axes for the main coordinate frame - this.axes = new ROS3D.Axes({ - shaftRadius : 0.025, - headRadius : 0.07, - headLength : 0.2 - }); - // initially not visible - scene.add(this.axes); - this.axes.traverse(function(obj) { - obj.visible = false; - }); +class OrbitControls extends THREE$1.EventDispatcher { /** - * Handle the mousedown 3D event. + * Behaves like THREE.OrbitControls, but uses right-handed coordinates and z as up vector. * - * @param event3D - the 3D event to handle + * @constructor + * @param scene - the global scene to use + * @param camera - the camera to use + * @param userZoomSpeed (optional) - the speed for zooming + * @param userRotateSpeed (optional) - the speed for rotating + * @param autoRotate (optional) - if the orbit should auto rotate + * @param autoRotateSpeed (optional) - the speed for auto rotating + * @param displayPanAndZoomFrame - whether to display a frame when panning/zooming + * (defaults to true) + * @param lineTypePanAndZoomFrame - line type for the frame that is displayed when + * panning/zooming. Only has effect when + * displayPanAndZoomFrame is set to true. */ - function onMouseDown(event3D) { - var event = event3D.domEvent; - event.preventDefault(); + constructor(options) { + super(); + var that = this; + options = options || {}; + var scene = options.scene; + this.camera = options.camera; + this.center = new THREE$1.Vector3(); + this.userZoom = true; + this.userZoomSpeed = options.userZoomSpeed || 1.0; + this.userRotate = true; + this.userRotateSpeed = options.userRotateSpeed || 1.0; + this.autoRotate = options.autoRotate; + this.autoRotateSpeed = options.autoRotateSpeed || 2.0; + this.displayPanAndZoomFrame = (options.displayPanAndZoomFrame === undefined) ? + true : + !!options.displayPanAndZoomFrame; + this.lineTypePanAndZoomFrame = options.dashedPanAndZoomFrame || 'full'; + // In ROS, z is pointing upwards + this.camera.up = new THREE$1.Vector3(0, 0, 1); - switch (event.button) { - case 0: - state = STATE.ROTATE; - rotateStart.set(event.clientX, event.clientY); - break; - case 1: - state = STATE.MOVE; + // internals + var pixelsPerRound = 1800; + var touchMoveThreshold = 10; + var rotateStart = new THREE$1.Vector2(); + var rotateEnd = new THREE$1.Vector2(); + var rotateDelta = new THREE$1.Vector2(); + var zoomStart = new THREE$1.Vector2(); + var zoomEnd = new THREE$1.Vector2(); + var zoomDelta = new THREE$1.Vector2(); + var moveStartCenter = new THREE$1.Vector3(); + var moveStartNormal = new THREE$1.Vector3(); + var moveStartPosition = new THREE$1.Vector3(); + var moveStartIntersection = new THREE$1.Vector3(); + var touchStartPosition = new Array(2); + var touchMoveVector = new Array(2); + this.phiDelta = 0; + this.thetaDelta = 0; + this.scale = 1; + this.lastPosition = new THREE$1.Vector3(); + // internal states + var STATE = { + NONE : -1, + ROTATE : 0, + ZOOM : 1, + MOVE : 2 + }; + var state = STATE.NONE; - moveStartNormal = new THREE.Vector3(0, 0, 1); - var rMat = new THREE.Matrix4().extractRotation(this.camera.matrix); - moveStartNormal.applyMatrix4(rMat); - - moveStartCenter = that.center.clone(); - moveStartPosition = that.camera.position.clone(); - moveStartIntersection = intersectViewPlane(event3D.mouseRay, - moveStartCenter, - moveStartNormal); - break; - case 2: - state = STATE.ZOOM; - zoomStart.set(event.clientX, event.clientY); - break; + this.axes = new Axes({ + shaftRadius : 0.025, + headRadius : 0.07, + headLength : 0.2, + lineType: this.lineTypePanAndZoomFrame + }); + if (this.displayPanAndZoomFrame) { + // initially not visible + scene.add(this.axes); + this.axes.traverse(function(obj) { + obj.visible = false; + }); } - this.showAxes(); - } + /** + * Handle the mousedown 3D event. + * + * @param event3D - the 3D event to handle + */ + function onMouseDown(event3D) { + var event = event3D.domEvent; + event.preventDefault(); - /** - * Handle the mousemove 3D event. - * - * @param event3D - the 3D event to handle - */ - function onMouseMove(event3D) { - var event = event3D.domEvent; - if (state === STATE.ROTATE) { + switch (event.button) { + case 0: + state = STATE.ROTATE; + rotateStart.set(event.clientX, event.clientY); + break; + case 1: + state = STATE.MOVE; - rotateEnd.set(event.clientX, event.clientY); - rotateDelta.subVectors(rotateEnd, rotateStart); + moveStartNormal = new THREE$1.Vector3(0, 0, 1); + var rMat = new THREE$1.Matrix4().extractRotation(this.camera.matrix); + moveStartNormal.applyMatrix4(rMat); - that.rotateLeft(2 * Math.PI * rotateDelta.x / pixelsPerRound * that.userRotateSpeed); - that.rotateUp(2 * Math.PI * rotateDelta.y / pixelsPerRound * that.userRotateSpeed); + moveStartCenter = that.center.clone(); + moveStartPosition = that.camera.position.clone(); + moveStartIntersection = intersectViewPlane(event3D.mouseRay, + moveStartCenter, + moveStartNormal); + break; + case 2: + state = STATE.ZOOM; + zoomStart.set(event.clientX, event.clientY); + break; + } - rotateStart.copy(rotateEnd); this.showAxes(); - } else if (state === STATE.ZOOM) { - zoomEnd.set(event.clientX, event.clientY); - zoomDelta.subVectors(zoomEnd, zoomStart); + } - if (zoomDelta.y > 0) { + /** + * Handle the mousemove 3D event. + * + * @param event3D - the 3D event to handle + */ + function onMouseMove(event3D) { + var event = event3D.domEvent; + if (state === STATE.ROTATE) { + + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart); + + that.rotateLeft(2 * Math.PI * rotateDelta.x / pixelsPerRound * that.userRotateSpeed); + that.rotateUp(2 * Math.PI * rotateDelta.y / pixelsPerRound * that.userRotateSpeed); + + rotateStart.copy(rotateEnd); + this.showAxes(); + } else if (state === STATE.ZOOM) { + zoomEnd.set(event.clientX, event.clientY); + zoomDelta.subVectors(zoomEnd, zoomStart); + + if (zoomDelta.y > 0) { + that.zoomIn(); + } else { + that.zoomOut(); + } + + zoomStart.copy(zoomEnd); + this.showAxes(); + + } else if (state === STATE.MOVE) { + var intersection = intersectViewPlane(event3D.mouseRay, that.center, moveStartNormal); + + if (!intersection) { + return; + } + + var delta = new THREE$1.Vector3().subVectors(moveStartIntersection.clone(), intersection + .clone()); + + that.center.addVectors(moveStartCenter.clone(), delta.clone()); + that.camera.position.addVectors(moveStartPosition.clone(), delta.clone()); + that.update(); + that.camera.updateMatrixWorld(); + this.showAxes(); + } + } + + /** + * Used to track the movement during camera movement. + * + * @param mouseRay - the mouse ray to intersect with + * @param planeOrigin - the origin of the plane + * @param planeNormal - the normal of the plane + * @returns the intersection + */ + function intersectViewPlane(mouseRay, planeOrigin, planeNormal) { + + var vector = new THREE$1.Vector3(); + var intersection = new THREE$1.Vector3(); + + vector.subVectors(planeOrigin, mouseRay.origin); + var dot = mouseRay.direction.dot(planeNormal); + + // bail if ray and plane are parallel + if (Math.abs(dot) < mouseRay.precision) { + return null; + } + + // calc distance to plane + var scalar = planeNormal.dot(vector) / dot; + + intersection = mouseRay.direction.clone().multiplyScalar(scalar); + return intersection; + } + + /** + * Handle the mouseup 3D event. + * + * @param event3D - the 3D event to handle + */ + function onMouseUp(event3D) { + if (!that.userRotate) { + return; + } + + state = STATE.NONE; + } + + /** + * Handle the mousewheel 3D event. + * + * @param event3D - the 3D event to handle + */ + function onMouseWheel(event3D) { + if (!that.userZoom) { + return; + } + + var event = event3D.domEvent; + // wheelDelta --> Chrome, detail --> Firefox + var delta; + if (typeof (event.wheelDelta) !== 'undefined') { + delta = event.wheelDelta; + } else { + delta = -event.detail; + } + if (delta > 0) { that.zoomIn(); } else { that.zoomOut(); } - zoomStart.copy(zoomEnd); - this.showAxes(); - - } else if (state === STATE.MOVE) { - var intersection = intersectViewPlane(event3D.mouseRay, that.center, moveStartNormal); - - if (!intersection) { - return; - } - - var delta = new THREE.Vector3().subVectors(moveStartIntersection.clone(), intersection - .clone()); - - that.center.addVectors(moveStartCenter.clone(), delta.clone()); - that.camera.position.addVectors(moveStartPosition.clone(), delta.clone()); - that.update(); - that.camera.updateMatrixWorld(); this.showAxes(); } - } - /** - * Used to track the movement during camera movement. - * - * @param mouseRay - the mouse ray to intersect with - * @param planeOrigin - the origin of the plane - * @param planeNormal - the normal of the plane - * @returns the intersection - */ - function intersectViewPlane(mouseRay, planeOrigin, planeNormal) { - - var vector = new THREE.Vector3(); - var intersection = new THREE.Vector3(); - - vector.subVectors(planeOrigin, mouseRay.origin); - var dot = mouseRay.direction.dot(planeNormal); - - // bail if ray and plane are parallel - if (Math.abs(dot) < mouseRay.precision) { - return null; - } - - // calc distance to plane - var scalar = planeNormal.dot(vector) / dot; - - intersection = mouseRay.direction.clone().multiplyScalar(scalar); - return intersection; - } - - /** - * Handle the mouseup 3D event. - * - * @param event3D - the 3D event to handle - */ - function onMouseUp(event3D) { - if (!that.userRotate) { - return; - } - - state = STATE.NONE; - } - - /** - * Handle the mousewheel 3D event. - * - * @param event3D - the 3D event to handle - */ - function onMouseWheel(event3D) { - if (!that.userZoom) { - return; - } - - var event = event3D.domEvent; - // wheelDelta --> Chrome, detail --> Firefox - var delta; - if (typeof (event.wheelDelta) !== 'undefined') { - delta = event.wheelDelta; - } else { - delta = -event.detail; - } - if (delta > 0) { - that.zoomIn(); - } else { - that.zoomOut(); - } - - this.showAxes(); - } - - /** - * Handle the touchdown 3D event. - * - * @param event3D - the 3D event to handle - */ - function onTouchDown(event3D) { - var event = event3D.domEvent; - switch (event.touches.length) { - case 1: - state = STATE.ROTATE; - rotateStart.set(event.touches[0].pageX - window.scrollX, - event.touches[0].pageY - window.scrollY); - break; - case 2: - state = STATE.NONE; - /* ready for move */ - moveStartNormal = new THREE.Vector3(0, 0, 1); - var rMat = new THREE.Matrix4().extractRotation(this.camera.matrix); - moveStartNormal.applyMatrix4(rMat); - moveStartCenter = that.center.clone(); - moveStartPosition = that.camera.position.clone(); - moveStartIntersection = intersectViewPlane(event3D.mouseRay, - moveStartCenter, - moveStartNormal); - touchStartPosition[0] = new THREE.Vector2(event.touches[0].pageX, - event.touches[0].pageY); - touchStartPosition[1] = new THREE.Vector2(event.touches[1].pageX, - event.touches[1].pageY); - touchMoveVector[0] = new THREE.Vector2(0, 0); - touchMoveVector[1] = new THREE.Vector2(0, 0); - break; - } - - this.showAxes(); - - event.preventDefault(); - } - - /** - * Handle the touchmove 3D event. - * - * @param event3D - the 3D event to handle - */ - function onTouchMove(event3D) { - var event = event3D.domEvent; - if (state === STATE.ROTATE) { - - rotateEnd.set(event.touches[0].pageX - window.scrollX, event.touches[0].pageY - window.scrollY); - rotateDelta.subVectors(rotateEnd, rotateStart); - - that.rotateLeft(2 * Math.PI * rotateDelta.x / pixelsPerRound * that.userRotateSpeed); - that.rotateUp(2 * Math.PI * rotateDelta.y / pixelsPerRound * that.userRotateSpeed); - - rotateStart.copy(rotateEnd); - this.showAxes(); - } else { - touchMoveVector[0].set(touchStartPosition[0].x - event.touches[0].pageX, - touchStartPosition[0].y - event.touches[0].pageY); - touchMoveVector[1].set(touchStartPosition[1].x - event.touches[1].pageX, - touchStartPosition[1].y - event.touches[1].pageY); - if (touchMoveVector[0].lengthSq() > touchMoveThreshold && - touchMoveVector[1].lengthSq() > touchMoveThreshold) { - touchStartPosition[0].set(event.touches[0].pageX, - event.touches[0].pageY); - touchStartPosition[1].set(event.touches[1].pageX, - event.touches[1].pageY); - if (touchMoveVector[0].dot(touchMoveVector[1]) > 0 && - state !== STATE.ZOOM) { - state = STATE.MOVE; - } else if (touchMoveVector[0].dot(touchMoveVector[1]) < 0 && - state !== STATE.MOVE) { - state = STATE.ZOOM; - } - if (state === STATE.ZOOM) { - var tmpVector = new THREE.Vector2(); - tmpVector.subVectors(touchStartPosition[0], - touchStartPosition[1]); - if (touchMoveVector[0].dot(tmpVector) < 0 && - touchMoveVector[1].dot(tmpVector) > 0) { - that.zoomOut(); - } else if (touchMoveVector[0].dot(tmpVector) > 0 && - touchMoveVector[1].dot(tmpVector) < 0) { - that.zoomIn(); - } - } - } - if (state === STATE.MOVE) { - var intersection = intersectViewPlane(event3D.mouseRay, - that.center, - moveStartNormal); - if (!intersection) { - return; - } - var delta = new THREE.Vector3().subVectors(moveStartIntersection.clone(), - intersection.clone()); - that.center.addVectors(moveStartCenter.clone(), delta.clone()); - that.camera.position.addVectors(moveStartPosition.clone(), delta.clone()); - that.update(); - that.camera.updateMatrixWorld(); + /** + * Handle the touchdown 3D event. + * + * @param event3D - the 3D event to handle + */ + function onTouchDown(event3D) { + var event = event3D.domEvent; + switch (event.touches.length) { + case 1: + state = STATE.ROTATE; + rotateStart.set(event.touches[0].pageX - window.scrollX, + event.touches[0].pageY - window.scrollY); + break; + case 2: + state = STATE.NONE; + /* ready for move */ + moveStartNormal = new THREE$1.Vector3(0, 0, 1); + var rMat = new THREE$1.Matrix4().extractRotation(this.camera.matrix); + moveStartNormal.applyMatrix4(rMat); + moveStartCenter = that.center.clone(); + moveStartPosition = that.camera.position.clone(); + moveStartIntersection = intersectViewPlane(event3D.mouseRay, + moveStartCenter, + moveStartNormal); + touchStartPosition[0] = new THREE$1.Vector2(event.touches[0].pageX, + event.touches[0].pageY); + touchStartPosition[1] = new THREE$1.Vector2(event.touches[1].pageX, + event.touches[1].pageY); + touchMoveVector[0] = new THREE$1.Vector2(0, 0); + touchMoveVector[1] = new THREE$1.Vector2(0, 0); + break; } this.showAxes(); event.preventDefault(); } - } - function onTouchEnd(event3D) { - var event = event3D.domEvent; - if (event.touches.length === 1 && - state !== STATE.ROTATE) { - state = STATE.ROTATE; - rotateStart.set(event.touches[0].pageX - window.scrollX, - event.touches[0].pageY - window.scrollY); + /** + * Handle the touchmove 3D event. + * + * @param event3D - the 3D event to handle + */ + function onTouchMove(event3D) { + var event = event3D.domEvent; + if (state === STATE.ROTATE) { + + rotateEnd.set(event.touches[0].pageX - window.scrollX, event.touches[0].pageY - window.scrollY); + rotateDelta.subVectors(rotateEnd, rotateStart); + + that.rotateLeft(2 * Math.PI * rotateDelta.x / pixelsPerRound * that.userRotateSpeed); + that.rotateUp(2 * Math.PI * rotateDelta.y / pixelsPerRound * that.userRotateSpeed); + + rotateStart.copy(rotateEnd); + this.showAxes(); + } else { + touchMoveVector[0].set(touchStartPosition[0].x - event.touches[0].pageX, + touchStartPosition[0].y - event.touches[0].pageY); + touchMoveVector[1].set(touchStartPosition[1].x - event.touches[1].pageX, + touchStartPosition[1].y - event.touches[1].pageY); + if (touchMoveVector[0].lengthSq() > touchMoveThreshold && + touchMoveVector[1].lengthSq() > touchMoveThreshold) { + touchStartPosition[0].set(event.touches[0].pageX, + event.touches[0].pageY); + touchStartPosition[1].set(event.touches[1].pageX, + event.touches[1].pageY); + if (touchMoveVector[0].dot(touchMoveVector[1]) > 0 && + state !== STATE.ZOOM) { + state = STATE.MOVE; + } else if (touchMoveVector[0].dot(touchMoveVector[1]) < 0 && + state !== STATE.MOVE) { + state = STATE.ZOOM; + } + if (state === STATE.ZOOM) { + var tmpVector = new THREE$1.Vector2(); + tmpVector.subVectors(touchStartPosition[0], + touchStartPosition[1]); + if (touchMoveVector[0].dot(tmpVector) < 0 && + touchMoveVector[1].dot(tmpVector) > 0) { + that.zoomOut(); + } else if (touchMoveVector[0].dot(tmpVector) > 0 && + touchMoveVector[1].dot(tmpVector) < 0) { + that.zoomIn(); + } + } + } + if (state === STATE.MOVE) { + var intersection = intersectViewPlane(event3D.mouseRay, + that.center, + moveStartNormal); + if (!intersection) { + return; + } + var delta = new THREE$1.Vector3().subVectors(moveStartIntersection.clone(), + intersection.clone()); + that.center.addVectors(moveStartCenter.clone(), delta.clone()); + that.camera.position.addVectors(moveStartPosition.clone(), delta.clone()); + that.update(); + that.camera.updateMatrixWorld(); + } + + this.showAxes(); + + event.preventDefault(); + } } - } - // add event listeners - this.addEventListener('mousedown', onMouseDown); - this.addEventListener('mouseup', onMouseUp); - this.addEventListener('mousemove', onMouseMove); - this.addEventListener('touchstart', onTouchDown); - this.addEventListener('touchmove', onTouchMove); - this.addEventListener('touchend', onTouchEnd); - // Chrome/Firefox have different events here - this.addEventListener('mousewheel', onMouseWheel); - this.addEventListener('DOMMouseScroll', onMouseWheel); -}; + function onTouchEnd(event3D) { + var event = event3D.domEvent; + if (event.touches.length === 1 && + state !== STATE.ROTATE) { + state = STATE.ROTATE; + rotateStart.set(event.touches[0].pageX - window.scrollX, + event.touches[0].pageY - window.scrollY); + } + else { + state = STATE.NONE; + } + } -/** - * Display the main axes for 1 second. - */ -ROS3D.OrbitControls.prototype.showAxes = function() { - var that = this; + // add event listeners + this.addEventListener('mousedown', onMouseDown); + this.addEventListener('mouseup', onMouseUp); + this.addEventListener('mousemove', onMouseMove); + this.addEventListener('touchstart', onTouchDown); + this.addEventListener('touchmove', onTouchMove); + this.addEventListener('touchend', onTouchEnd); + // Chrome/Firefox have different events here + this.addEventListener('mousewheel', onMouseWheel); + this.addEventListener('DOMMouseScroll', onMouseWheel); + }; - this.axes.traverse(function(obj) { - obj.visible = true; - }); - if (this.hideTimeout) { - clearTimeout(this.hideTimeout); - } - this.hideTimeout = setTimeout(function() { - that.axes.traverse(function(obj) { - obj.visible = false; + /** + * Display the main axes for 1 second. + */ + showAxes() { + var that = this; + + this.axes.traverse(function(obj) { + obj.visible = true; }); - that.hideTimeout = false; - }, 1000); -}; + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + } + this.hideTimeout = setTimeout(function() { + that.axes.traverse(function(obj) { + obj.visible = false; + }); + that.hideTimeout = false; + }, 1000); + }; + + /** + * Rotate the camera to the left by the given angle. + * + * @param angle (optional) - the angle to rotate by + */ + rotateLeft(angle) { + if (angle === undefined) { + angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; + } + this.thetaDelta -= angle; + }; + + /** + * Rotate the camera to the right by the given angle. + * + * @param angle (optional) - the angle to rotate by + */ + rotateRight(angle) { + if (angle === undefined) { + angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; + } + this.thetaDelta += angle; + }; + + /** + * Rotate the camera up by the given angle. + * + * @param angle (optional) - the angle to rotate by + */ + rotateUp(angle) { + if (angle === undefined) { + angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; + } + this.phiDelta -= angle; + }; + + /** + * Rotate the camera down by the given angle. + * + * @param angle (optional) - the angle to rotate by + */ + rotateDown(angle) { + if (angle === undefined) { + angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; + } + this.phiDelta += angle; + }; + + /** + * Zoom in by the given scale. + * + * @param zoomScale (optional) - the scale to zoom in by + */ + zoomIn(zoomScale) { + if (zoomScale === undefined) { + zoomScale = Math.pow(0.95, this.userZoomSpeed); + } + this.scale /= zoomScale; + }; + + /** + * Zoom out by the given scale. + * + * @param zoomScale (optional) - the scale to zoom in by + */ + zoomOut(zoomScale) { + if (zoomScale === undefined) { + zoomScale = Math.pow(0.95, this.userZoomSpeed); + } + this.scale *= zoomScale; + }; + + /** + * Update the camera to the current settings. + */ + update() { + // x->y, y->z, z->x + var position = this.camera.position; + var offset = position.clone().sub(this.center); + + // angle from z-axis around y-axis + var theta = Math.atan2(offset.y, offset.x); + + // angle from y-axis + var phi = Math.atan2(Math.sqrt(offset.y * offset.y + offset.x * offset.x), offset.z); + + if (this.autoRotate) { + this.rotateLeft(2 * Math.PI / 60 / 60 * this.autoRotateSpeed); + } + + theta += this.thetaDelta; + phi += this.phiDelta; + + // restrict phi to be between EPS and PI-EPS + var eps = 0.000001; + phi = Math.max(eps, Math.min(Math.PI - eps, phi)); + + var radius = offset.length(); + offset.set( + radius * Math.sin(phi) * Math.cos(theta), + radius * Math.sin(phi) * Math.sin(theta), + radius * Math.cos(phi) + ); + offset.multiplyScalar(this.scale); + + position.copy(this.center).add(offset); + + this.camera.lookAt(this.center); + + radius = offset.length(); + this.axes.position.copy(this.center); + this.axes.scale.set(radius * 0.05, radius * 0.05, radius * 0.05); + this.axes.updateMatrixWorld(true); + + this.thetaDelta = 0; + this.phiDelta = 0; + this.scale = 1; + + if (this.lastPosition.distanceTo(this.camera.position) > 0) { + this.dispatchEvent({ + type : 'change' + }); + this.lastPosition.copy(this.camera.position); + } + }; +} /** - * Rotate the camera to the left by the given angle. - * - * @param angle (optional) - the angle to rotate by + * @author David Gossow - dgossow@willowgarage.com + * @author Russell Toris - rctoris@wpi.edu + * @author Jihoon Lee - jihoonlee.in@gmail.com */ -ROS3D.OrbitControls.prototype.rotateLeft = function(angle) { - if (angle === undefined) { - angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; - } - this.thetaDelta -= angle; -}; -/** - * Rotate the camera to the right by the given angle. - * - * @param angle (optional) - the angle to rotate by - */ -ROS3D.OrbitControls.prototype.rotateRight = function(angle) { - if (angle === undefined) { - angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; - } - this.thetaDelta += angle; -}; +class Viewer { -/** - * Rotate the camera up by the given angle. - * - * @param angle (optional) - the angle to rotate by - */ -ROS3D.OrbitControls.prototype.rotateUp = function(angle) { - if (angle === undefined) { - angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; - } - this.phiDelta -= angle; -}; + /** + * A Viewer can be used to render an interactive 3D scene to a HTML5 canvas. + * + * @constructor + * @param options - object with following keys: + * + * * divID - the ID of the div to place the viewer in + * * width - the initial width, in pixels, of the canvas + * * height - the initial height, in pixels, of the canvas + * * background (optional) - the color to render the background, like '#efefef' + * * alpha (optional) - the alpha of the background + * * antialias (optional) - if antialiasing should be used + * * intensity (optional) - the lighting intensity setting to use + * * cameraPosition (optional) - the starting position of the camera + * * displayPanAndZoomFrame (optional) - whether to display a frame when + * * panning/zooming. Defaults to true. + * * lineTypePanAndZoomFrame - line type for the frame that is displayed when + * * panning/zooming. Only has effect when + * * displayPanAndZoomFrame is set to true. + */ + constructor(options) { + options = options || {}; + var divID = options.divID; + var width = options.width; + var height = options.height; + var background = options.background || '#111111'; + var antialias = options.antialias; + var intensity = options.intensity || 0.66; + var near = options.near || 0.01; + var far = options.far || 1000; + var alpha = options.alpha || 1.0; + var cameraPosition = options.cameraPose || { + x : 3, + y : 3, + z : 3 + }; + var cameraZoomSpeed = options.cameraZoomSpeed || 0.5; + var displayPanAndZoomFrame = (options.displayPanAndZoomFrame === undefined) ? true : !!options.displayPanAndZoomFrame; + var lineTypePanAndZoomFrame = options.lineTypePanAndZoomFrame || 'full'; -/** - * Rotate the camera down by the given angle. - * - * @param angle (optional) - the angle to rotate by - */ -ROS3D.OrbitControls.prototype.rotateDown = function(angle) { - if (angle === undefined) { - angle = 2 * Math.PI / 60 / 60 * this.autoRotateSpeed; - } - this.phiDelta += angle; -}; - -/** - * Zoom in by the given scale. - * - * @param zoomScale (optional) - the scale to zoom in by - */ -ROS3D.OrbitControls.prototype.zoomIn = function(zoomScale) { - if (zoomScale === undefined) { - zoomScale = Math.pow(0.95, this.userZoomSpeed); - } - this.scale /= zoomScale; -}; - -/** - * Zoom out by the given scale. - * - * @param zoomScale (optional) - the scale to zoom in by - */ -ROS3D.OrbitControls.prototype.zoomOut = function(zoomScale) { - if (zoomScale === undefined) { - zoomScale = Math.pow(0.95, this.userZoomSpeed); - } - this.scale *= zoomScale; -}; - -/** - * Update the camera to the current settings. - */ -ROS3D.OrbitControls.prototype.update = function() { - // x->y, y->z, z->x - var position = this.camera.position; - var offset = position.clone().sub(this.center); - - // angle from z-axis around y-axis - var theta = Math.atan2(offset.y, offset.x); - - // angle from y-axis - var phi = Math.atan2(Math.sqrt(offset.y * offset.y + offset.x * offset.x), offset.z); - - if (this.autoRotate) { - this.rotateLeft(2 * Math.PI / 60 / 60 * this.autoRotateSpeed); - } - - theta += this.thetaDelta; - phi += this.phiDelta; - - // restrict phi to be between EPS and PI-EPS - var eps = 0.000001; - phi = Math.max(eps, Math.min(Math.PI - eps, phi)); - - var radius = offset.length(); - offset.y = radius * Math.sin(phi) * Math.sin(theta); - offset.z = radius * Math.cos(phi); - offset.x = radius * Math.sin(phi) * Math.cos(theta); - offset.multiplyScalar(this.scale); - - position.copy(this.center).add(offset); - - this.camera.lookAt(this.center); - - radius = offset.length(); - this.axes.position = this.center.clone(); - this.axes.scale.x = this.axes.scale.y = this.axes.scale.z = radius * 0.05; - this.axes.updateMatrixWorld(true); - - this.thetaDelta = 0; - this.phiDelta = 0; - this.scale = 1; - - if (this.lastPosition.distanceTo(this.camera.position) > 0) { - this.dispatchEvent({ - type : 'change' + // create the canvas to render to + this.renderer = new THREE$1.WebGLRenderer({ + antialias : antialias, + alpha: true }); - this.lastPosition.copy(this.camera.position); - } -}; + this.renderer.setClearColor(parseInt(background.replace('#', '0x'), 16), alpha); + this.renderer.sortObjects = false; + this.renderer.setSize(width, height); + this.renderer.shadowMap.enabled = false; + this.renderer.autoClear = false; -THREE.EventDispatcher.prototype.apply( ROS3D.OrbitControls.prototype ); + // create the global scene + this.scene = new THREE$1.Scene(); + + // create the global camera + this.camera = new THREE$1.PerspectiveCamera(40, width / height, near, far); + this.camera.position.x = cameraPosition.x; + this.camera.position.y = cameraPosition.y; + this.camera.position.z = cameraPosition.z; + // add controls to the camera + this.cameraControls = new OrbitControls({ + scene : this.scene, + camera : this.camera, + displayPanAndZoomFrame : displayPanAndZoomFrame, + lineTypePanAndZoomFrame: lineTypePanAndZoomFrame + }); + this.cameraControls.userZoomSpeed = cameraZoomSpeed; + + // lights + this.scene.add(new THREE$1.AmbientLight(0x555555)); + this.directionalLight = new THREE$1.DirectionalLight(0xffffff, intensity); + this.scene.add(this.directionalLight); + + // propagates mouse events to three.js objects + this.selectableObjects = new THREE$1.Object3D(); + this.scene.add(this.selectableObjects); + var mouseHandler = new MouseHandler({ + renderer : this.renderer, + camera : this.camera, + rootObject : this.selectableObjects, + fallbackTarget : this.cameraControls + }); + + // highlights the receiver of mouse events + this.highlighter = new Highlighter({ + mouseHandler : mouseHandler + }); + + this.stopped = true; + this.animationRequestId = undefined; + + // add the renderer to the page + document.getElementById(divID).appendChild(this.renderer.domElement); + + // begin the render loop + this.start(); + }; + + /** + * Start the render loop + */ + start(){ + this.stopped = false; + this.draw(); + }; + + /** + * Renders the associated scene to the viewer. + */ + draw(){ + if(this.stopped){ + // Do nothing if stopped + return; + } + + // update the controls + this.cameraControls.update(); + + // put light to the top-left of the camera + // BUG: position is a read-only property of DirectionalLight, + // attempting to assign to it either does nothing or throws an error. + //this.directionalLight.position = this.camera.localToWorld(new THREE.Vector3(-1, 1, 0)); + this.directionalLight.position.normalize(); + + // set the scene + this.renderer.clear(true, true, true); + this.renderer.render(this.scene, this.camera); + this.highlighter.renderHighlights(this.scene, this.renderer, this.camera); + + // draw the frame + this.animationRequestId = requestAnimationFrame(this.draw.bind(this)); + }; + + /** + * Stop the render loop + */ + stop(){ + if(!this.stopped){ + // Stop animation render loop + cancelAnimationFrame(this.animationRequestId); + } + this.stopped = true; + }; + + /** + * Add the given THREE Object3D to the global scene in the viewer. + * + * @param object - the THREE Object3D to add + * @param selectable (optional) - if the object should be added to the selectable list + */ + addObject(object, selectable) { + if (selectable) { + this.selectableObjects.add(object); + } else { + this.scene.add(object); + } + }; + + /** + * Resize 3D viewer + * + * @param width - new width value + * @param height - new height value + */ + resize(width, height) { + this.camera.aspect = width / height; + this.camera.updateProjectionMatrix(); + this.renderer.setSize(width, height); + }; +} + +exports.MARKER_ARROW = MARKER_ARROW; +exports.MARKER_CUBE = MARKER_CUBE; +exports.MARKER_SPHERE = MARKER_SPHERE; +exports.MARKER_CYLINDER = MARKER_CYLINDER; +exports.MARKER_LINE_STRIP = MARKER_LINE_STRIP; +exports.MARKER_LINE_LIST = MARKER_LINE_LIST; +exports.MARKER_CUBE_LIST = MARKER_CUBE_LIST; +exports.MARKER_SPHERE_LIST = MARKER_SPHERE_LIST; +exports.MARKER_POINTS = MARKER_POINTS; +exports.MARKER_TEXT_VIEW_FACING = MARKER_TEXT_VIEW_FACING; +exports.MARKER_MESH_RESOURCE = MARKER_MESH_RESOURCE; +exports.MARKER_TRIANGLE_LIST = MARKER_TRIANGLE_LIST; +exports.INTERACTIVE_MARKER_KEEP_ALIVE = INTERACTIVE_MARKER_KEEP_ALIVE; +exports.INTERACTIVE_MARKER_POSE_UPDATE = INTERACTIVE_MARKER_POSE_UPDATE; +exports.INTERACTIVE_MARKER_MENU_SELECT = INTERACTIVE_MARKER_MENU_SELECT; +exports.INTERACTIVE_MARKER_BUTTON_CLICK = INTERACTIVE_MARKER_BUTTON_CLICK; +exports.INTERACTIVE_MARKER_MOUSE_DOWN = INTERACTIVE_MARKER_MOUSE_DOWN; +exports.INTERACTIVE_MARKER_MOUSE_UP = INTERACTIVE_MARKER_MOUSE_UP; +exports.INTERACTIVE_MARKER_NONE = INTERACTIVE_MARKER_NONE; +exports.INTERACTIVE_MARKER_MENU = INTERACTIVE_MARKER_MENU; +exports.INTERACTIVE_MARKER_BUTTON = INTERACTIVE_MARKER_BUTTON; +exports.INTERACTIVE_MARKER_MOVE_AXIS = INTERACTIVE_MARKER_MOVE_AXIS; +exports.INTERACTIVE_MARKER_MOVE_PLANE = INTERACTIVE_MARKER_MOVE_PLANE; +exports.INTERACTIVE_MARKER_ROTATE_AXIS = INTERACTIVE_MARKER_ROTATE_AXIS; +exports.INTERACTIVE_MARKER_MOVE_ROTATE = INTERACTIVE_MARKER_MOVE_ROTATE; +exports.INTERACTIVE_MARKER_MOVE_3D = INTERACTIVE_MARKER_MOVE_3D; +exports.INTERACTIVE_MARKER_ROTATE_3D = INTERACTIVE_MARKER_ROTATE_3D; +exports.INTERACTIVE_MARKER_MOVE_ROTATE_3D = INTERACTIVE_MARKER_MOVE_ROTATE_3D; +exports.INTERACTIVE_MARKER_INHERIT = INTERACTIVE_MARKER_INHERIT; +exports.INTERACTIVE_MARKER_FIXED = INTERACTIVE_MARKER_FIXED; +exports.INTERACTIVE_MARKER_VIEW_FACING = INTERACTIVE_MARKER_VIEW_FACING; +exports.makeColorMaterial = makeColorMaterial; +exports.intersectPlane = intersectPlane; +exports.findClosestPoint = findClosestPoint; +exports.closestAxisPoint = closestAxisPoint; +exports.DepthCloud = DepthCloud; +exports.InteractiveMarker = InteractiveMarker; +exports.InteractiveMarkerClient = InteractiveMarkerClient; +exports.InteractiveMarkerControl = InteractiveMarkerControl; +exports.InteractiveMarkerHandle = InteractiveMarkerHandle; +exports.InteractiveMarkerMenu = InteractiveMarkerMenu; +exports.Marker = Marker; +exports.MarkerArrayClient = MarkerArrayClient; +exports.MarkerClient = MarkerClient; +exports.Arrow = Arrow; +exports.Arrow2 = Arrow2; +exports.Axes = Axes; +exports.Grid = Grid; +exports.MeshResource = MeshResource; +exports.TriangleList = TriangleList; +exports.OccupancyGrid = OccupancyGrid; +exports.OccupancyGridClient = OccupancyGridClient; +exports.Odometry = Odometry; +exports.Path = Path$1; +exports.Point = Point; +exports.Polygon = Polygon; +exports.Pose = Pose; +exports.PoseArray = PoseArray; +exports.PoseWithCovariance = PoseWithCovariance; +exports.LaserScan = LaserScan; +exports.Points = Points$1; +exports.PointCloud2 = PointCloud2; +exports.Urdf = Urdf; +exports.UrdfClient = UrdfClient; +exports.Highlighter = Highlighter; +exports.MouseHandler = MouseHandler; +exports.OrbitControls = OrbitControls; +exports.SceneNode = SceneNode; +exports.Viewer = Viewer; + +return exports; + +}({},ROSLIB)); diff --git a/clover/www/js/three.min.js b/clover/www/js/three.min.js index 36953010..3ea1321b 100644 --- a/clover/www/js/three.min.js +++ b/clover/www/js/three.min.js @@ -1,321 +1,331 @@ // threejs.org/license -(function(m,ja){"object"===typeof exports&&"undefined"!==typeof module?ja(exports):"function"===typeof define&&define.amd?define(["exports"],ja):ja(m.THREE=m.THREE||{})})(this,function(m){function ja(){}function C(a,b){this.x=a||0;this.y=b||0}function K(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0=d||0 0 ) {\n\t\tfloat fogFactor = 0.0;\n\t\tif ( fogType == 1 ) {\n\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t\t} else {\n\t\t\tconst float LOG2 = 1.442695;\n\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );\n\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t\t}\n\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n\t}\n}"].join("\n")); -b.compileShader(y);b.compileShader(Y);b.attachShader(M,y);b.attachShader(M,Y);b.linkProgram(M);ha=M;B=b.getAttribLocation(ha,"position");J=b.getAttribLocation(ha,"uv");f=b.getUniformLocation(ha,"uvOffset");g=b.getUniformLocation(ha,"uvScale");h=b.getUniformLocation(ha,"rotation");k=b.getUniformLocation(ha,"scale");l=b.getUniformLocation(ha,"color");q=b.getUniformLocation(ha,"map");n=b.getUniformLocation(ha,"opacity");t=b.getUniformLocation(ha,"modelViewMatrix");r=b.getUniformLocation(ha,"projectionMatrix"); -m=b.getUniformLocation(ha,"fogType");v=b.getUniformLocation(ha,"fogDensity");w=b.getUniformLocation(ha,"fogNear");x=b.getUniformLocation(ha,"fogFar");z=b.getUniformLocation(ha,"fogColor");b.getUniformLocation(ha,"fogDepth");I=b.getUniformLocation(ha,"alphaTest");M=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");M.width=8;M.height=8;y=M.getContext("2d");y.fillStyle="white";y.fillRect(0,0,8,8);He=new tc(M)}c.useProgram(ha);c.initAttributes();c.enableAttribute(B);c.enableAttribute(J); -c.disableUnusedAttributes();c.disable(b.CULL_FACE);c.enable(b.BLEND);b.bindBuffer(b.ARRAY_BUFFER,za);b.vertexAttribPointer(B,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(J,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,la);b.uniformMatrix4fv(r,!1,V.projectionMatrix.elements);c.activeTexture(b.TEXTURE0);b.uniform1i(q,0);y=M=0;(Y=p.fog)?(b.uniform3f(z,Y.color.r,Y.color.g,Y.color.b),Y.isFog?(b.uniform1f(w,Y.near),b.uniform1f(x,Y.far),b.uniform1i(m,1),y=M=1):Y.isFogExp2&&(b.uniform1f(v,Y.density), -b.uniform1i(m,2),y=M=2)):(b.uniform1i(m,0),y=M=0);for(var A=0,ua=u.length;A=d||0 0 ) {\n\t\tfloat fogFactor = 0.0;\n\t\tif ( fogType == 1 ) {\n\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t\t} else {\n\t\t\tconst float LOG2 = 1.442695;\n\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );\n\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t\t}\n\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n\t}\n}"].join("\n")); +b.compileShader(N);b.compileShader(B);b.attachShader(x,N);b.attachShader(x,B);b.linkProgram(x);oa=x;A=b.getAttribLocation(oa,"position");J=b.getAttribLocation(oa,"uv");f=b.getUniformLocation(oa,"uvOffset");g=b.getUniformLocation(oa,"uvScale");h=b.getUniformLocation(oa,"rotation");k=b.getUniformLocation(oa,"scale");m=b.getUniformLocation(oa,"color");q=b.getUniformLocation(oa,"map");n=b.getUniformLocation(oa,"opacity");u=b.getUniformLocation(oa,"modelViewMatrix");r=b.getUniformLocation(oa,"projectionMatrix"); +t=b.getUniformLocation(oa,"fogType");l=b.getUniformLocation(oa,"fogDensity");w=b.getUniformLocation(oa,"fogNear");z=b.getUniformLocation(oa,"fogFar");y=b.getUniformLocation(oa,"fogColor");b.getUniformLocation(oa,"fogDepth");I=b.getUniformLocation(oa,"alphaTest");x=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");x.width=8;x.height=8;N=x.getContext("2d");N.fillStyle="white";N.fillRect(0,0,8,8);Te=new tc(x)}c.useProgram(oa);c.initAttributes();c.enableAttribute(A);c.enableAttribute(J); +c.disableUnusedAttributes();c.disable(b.CULL_FACE);c.enable(b.BLEND);b.bindBuffer(b.ARRAY_BUFFER,Da);b.vertexAttribPointer(A,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(J,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,na);b.uniformMatrix4fv(r,!1,D.projectionMatrix.elements);c.activeTexture(b.TEXTURE0);b.uniform1i(q,0);N=x=0;(B=p.fog)?(b.uniform3f(y,B.color.r,B.color.g,B.color.b),B.isFog?(b.uniform1f(w,B.near),b.uniform1f(z,B.far),b.uniform1i(t,1),N=x=1):B.isFogExp2&&(b.uniform1f(l,B.density), +b.uniform1i(t,2),N=x=2)):(b.uniform1i(t,0),N=x=0);for(var C=0,E=v.length;Cb&&(b=a[c]);return b}function D(){Object.defineProperty(this,"id",{value:Pf+=2});this.uuid=R.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes= -{};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}}function Lb(a,b,c,d,e,f){N.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new jb(a,b,c,d,e,f));this.mergeVertices()}function jb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,m,ta,za,la){var z=f/ta,u=g/za,v=f/2,w=g/2,I=m/2;g=ta+1;var B=za+1,x=f=0,J,y,C=new p;for(y=0;yl;l++){if(n=d[l])if(h=n[0],n=n[1]){q&&e.addAttribute("morphTarget"+l,q[h]);f&&e.addAttribute("morphNormal"+l,f[h]);c[l]=n;continue}c[l]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function Xf(a,b,c){var d,e,f;this.setMode=function(a){d= -a};this.setIndex=function(a){e=a.type;f=a.bytesPerElement};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES?c.faces+=h/3:d===a.POINTS&&(c.points+=h)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+= -k*g.maxInstancedCount,d===a.TRIANGLES?c.faces+=g.maxInstancedCount*k/3:d===a.POINTS&&(c.points+=g.maxInstancedCount*k))}}function Yf(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES?c.faces+=f/3:d===a.POINTS&&(c.points+=f)};this.renderInstances=function(e,f,g){var h=b.get("ANGLE_instanced_arrays");if(null===h)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); -else{var k=e.attributes.position;k.isInterleavedBufferAttribute?(g=k.data.count,h.drawArraysInstancedANGLE(d,0,g,e.maxInstancedCount)):h.drawArraysInstancedANGLE(d,f,g,e.maxInstancedCount);c.calls++;c.vertices+=g*e.maxInstancedCount;d===a.TRIANGLES?c.faces+=e.maxInstancedCount*g/3:d===a.POINTS&&(c.points+=e.maxInstancedCount*g)}}}function Zf(a,b,c){function d(a){a=a.target;var g=e[a.id];null!==g.index&&b.remove(g.index);for(var k in g.attributes)b.remove(g.attributes[k]);a.removeEventListener("dispose", -d);delete e[a.id];if(k=f[a.id])b.remove(k),delete f[a.id];if(k=f[g.id])b.remove(k),delete f[g.id];c.geometries--}var e={},f={};return{get:function(a,b){var f=e[b.id];if(f)return f;b.addEventListener("dispose",d);b.isBufferGeometry?f=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new D).setFromObject(a)),f=b._bufferGeometry);e[b.id]=f;c.geometries++;return f},update:function(c){var d=c.index,e=c.attributes;null!==d&&b.update(d,a.ELEMENT_ARRAY_BUFFER);for(var f in e)b.update(e[f], -a.ARRAY_BUFFER);c=c.morphAttributes;for(f in c)for(var d=c[f],e=0,g=d.length;e/gm,function(a,c){a=W[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return Sd(a)})}function Ne(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, -function(a,c,d,e){a="";for(c=parseInt(c);cb&&(b=a[c]);return b}function E(){Object.defineProperty(this,"id",{value:eg+=2});this.uuid=Q.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes= +{};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}}function Mb(a,b,c,d,e,f){L.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new qb(a,b,c,d,e,f));this.mergeVertices()}function qb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,Ha,Da,na){var t=f/Ha,v=g/Da,I=f/2,A=g/2,w=l/2;g=Ha+1;var z=Da+1,y=f=0,J,x,B=new p;for(x=0;xm;m++){if(n=d[m])if(h=n[0],n=n[1]){q&&e.addAttribute("morphTarget"+m,q[h]);f&&e.addAttribute("morphNormal"+m,f[h]);c[m]=n;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function mg(a,b,c){var d,e,f;this.setMode=function(a){d= +a};this.setIndex=function(a){e=a.type;f=a.bytesPerElement};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES?c.faces+=h/3:d===a.POINTS&&(c.points+=h)};this.renderInstances=function(g,h,k){var m=b.get("ANGLE_instanced_arrays");null===m?console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(m.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+= +k*g.maxInstancedCount,d===a.TRIANGLES?c.faces+=g.maxInstancedCount*k/3:d===a.POINTS&&(c.points+=g.maxInstancedCount*k))}}function ng(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES?c.faces+=f/3:d===a.POINTS&&(c.points+=f)};this.renderInstances=function(e,f,g){var h=b.get("ANGLE_instanced_arrays");if(null===h)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); +else{var k=e.attributes.position;k.isInterleavedBufferAttribute?(g=k.data.count,h.drawArraysInstancedANGLE(d,0,g,e.maxInstancedCount)):h.drawArraysInstancedANGLE(d,f,g,e.maxInstancedCount);c.calls++;c.vertices+=g*e.maxInstancedCount;d===a.TRIANGLES?c.faces+=e.maxInstancedCount*g/3:d===a.POINTS&&(c.points+=e.maxInstancedCount*g)}}}function og(a,b,c){function d(a){a=a.target;var h=e[a.id];null!==h.index&&b.remove(h.index);for(var g in h.attributes)b.remove(h.attributes[g]);a.removeEventListener("dispose", +d);delete e[a.id];if(g=f[a.id])b.remove(g),delete f[a.id];if(g=f[h.id])b.remove(g),delete f[h.id];c.geometries--}var e={},f={};return{get:function(a,b){var f=e[b.id];if(f)return f;b.addEventListener("dispose",d);b.isBufferGeometry?f=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new E).setFromObject(a)),f=b._bufferGeometry);e[b.id]=f;c.geometries++;return f},update:function(c){var d=c.index,e=c.attributes;null!==d&&b.update(d,a.ELEMENT_ARRAY_BUFFER);for(var f in e)b.update(e[f], +a.ARRAY_BUFFER);c=c.morphAttributes;for(f in c)for(var d=c[f],e=0,g=d.length;e/gm,function(a,c){a=R[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return Zd(a)})}function Ze(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, +function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a, -0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height,a);return c}return a}function k(a){return R.isPowerOfTwo(a.width)&&R.isPowerOfTwo(a.height)}function l(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function q(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function n(b){b=b.target;b.removeEventListener("dispose",n);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube); -else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}g.textures--}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer), -c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.textures--}function r(b,q){var t=d.get(b);if(0b||a.height>b){b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a, +0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height,a);return c}return a}function k(a){return Q.isPowerOfTwo(a.width)&&Q.isPowerOfTwo(a.height)}function m(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function q(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function n(b){b=b.target;b.removeEventListener("dispose",n);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube); +else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}b.isVideoTexture&&delete y[b.id];g.textures--}function u(b){b=b.target;b.removeEventListener("dispose",u);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer), +c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.textures--}function r(b,q){var u=d.get(b);if(0p;p++)u[p]=q||r?r?b.image[p].image:b.image[p]:h(b.image[p],e.maxCubemapSize); -var v=k(u[0]),w=f.convert(b.format),z=f.convert(b.type);m(a.TEXTURE_CUBE_MAP,b,v);for(p=0;6>p;p++)if(q)for(var x,I=u[p].mipmaps,y=0,C=I.length;yq;q++)e.__webglFramebuffer[q]=a.createFramebuffer()}else e.__webglFramebuffer=a.createFramebuffer();if(h){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);m(a.TEXTURE_CUBE_MAP,b.texture,n);for(q=0;6>q;q++)p(e.__webglFramebuffer[q],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+q); -l(b.texture,n)&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),m(a.TEXTURE_2D,b.texture,n),p(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),l(b.texture,n)&&a.generateMipmap(a.TEXTURE_2D),c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported"); +e.getMaxAnisotropy())),d.get(g).__currentAnisotropy=g.anisotropy)}function l(b,e,g,h){var k=f.convert(e.texture.format),m=f.convert(e.texture.type);c.texImage2D(h,0,k,e.width,e.height,0,k,m,null);a.bindFramebuffer(a.FRAMEBUFFER,b);a.framebufferTexture2D(a.FRAMEBUFFER,g,h,d.get(e.texture).__webglTexture,0);a.bindFramebuffer(a.FRAMEBUFFER,null)}function p(b,c){a.bindRenderbuffer(a.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_COMPONENT16,c.width,c.height), +a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.RENDERBUFFER,b)):a.renderbufferStorage(a.RENDERBUFFER,a.RGBA4,c.width,c.height);a.bindRenderbuffer(a.RENDERBUFFER,null)}var z="undefined"!==typeof WebGL2RenderingContext&&a instanceof window.WebGL2RenderingContext,y={};this.setTexture2D=r;this.setTextureCube= +function(b,q){var u=d.get(b);if(6===b.image.length)if(0v;v++)l[v]=q||r?r?b.image[v].image:b.image[v]:h(b.image[v],e.maxCubemapSize); +var p=k(l[0]),w=f.convert(b.format),A=f.convert(b.type);t(a.TEXTURE_CUBE_MAP,b,p);for(v=0;6>v;v++)if(q)for(var y,I=l[v].mipmaps,z=0,x=I.length;zq;q++)e.__webglFramebuffer[q]=a.createFramebuffer()}else e.__webglFramebuffer=a.createFramebuffer();if(h){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);t(a.TEXTURE_CUBE_MAP,b.texture,n);for(q=0;6>q;q++)l(e.__webglFramebuffer[q],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+q); +m(b.texture,n)&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),t(a.TEXTURE_2D,b.texture,n),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),m(b.texture,n)&&a.generateMipmap(a.TEXTURE_2D),c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported"); a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);r(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER, -a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format");}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),w(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),w(e.__webglDepthbuffer, -b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture,f=k(b);l(e,f)&&(b=b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function lg(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},remove:function(b){delete a[b.uuid]},clear:function(){a={}}}}function mg(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture(); -a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b=Z.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+Z.maxTextures);G+=1;return a}; -this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);T.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);T.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&& -b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?T.setTextureCube(b,c):T.setTextureCubeDynamic(b,c)}}();this.getRenderTarget=function(){return H};this.setRenderTarget=function(a){(H=a)&&void 0===U.get(a).__webglFramebuffer&&T.setupRenderTarget(a);var b=null,c=!1;a?(b=U.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&& -(b=b[a.activeCubeFace],c=!0),Q.copy(a.viewport),S.copy(a.scissor),W=a.scissorTest):(Q.copy(ca).multiplyScalar(O),S.copy(ea).multiplyScalar(O),W=Oe);M!==b&&(F.bindFramebuffer(F.FRAMEBUFFER,b),M=b);ba.viewport(Q);ba.scissor(S);ba.setScissorTest(W);c&&(c=U.get(a.texture),F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=U.get(a).__webglFramebuffer; -if(g){var h=!1;g!==M&&(F.bindFramebuffer(F.FRAMEBUFFER,g),h=!0);try{var l=a.texture,k=l.format,n=l.type;1023!==k&&oa.convert(k)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===n||oa.convert(n)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ia.get("OES_texture_float")||ia.get("WEBGL_color_buffer_float"))||1016===n&&ia.get("EXT_color_buffer_half_float")? -F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&F.readPixels(b,c,d,e,oa.convert(k),oa.convert(n),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&F.bindFramebuffer(F.FRAMEBUFFER,M)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")}} -function Ob(a,b){this.name="";this.color=new H(a);this.density=void 0!==b?b:2.5E-4}function Pb(a,b,c){this.name="";this.color=new H(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function od(){A.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Xd(a,b,c,d,e){A.call(this);this.lensFlares=[];this.positionScreen=new p;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function Za(a){Q.call(this);this.type="SpriteMaterial"; -this.color=new H(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}function Cc(a){A.call(this);this.type="Sprite";this.material=void 0!==a?a:new Za}function Dc(){A.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Ec(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."), -this.boneInverses=[],a=0,b=this.bones.length;a=a.HAVE_CURRENT_DATA&&(q.needsUpdate=!0);requestAnimationFrame(l)}ea.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var q=this;requestAnimationFrame(l)} -function Rb(a,b,c,d,e,f,g,h,k,l,q,n){ea.call(this,null,f,g,h,k,l,d,e,q,n);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Gc(a,b,c,d,e,f,g,h,k,l){l=void 0!==l?l:1026;if(1026!==l&&1027!==l)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===l&&(c=1012);void 0===c&&1027===l&&(c=1020);ea.call(this,null,d,e,f,g,h,l,c,k);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!== -h?h:1003;this.generateMipmaps=this.flipY=!1}function Sb(a){D.call(this);this.type="WireframeGeometry";var b=[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&&a.isGeometry){var k=a.faces;var l=0;for(d=k.length;lc;c++){var n=q[h[c]];var t=q[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)l=g[n],h=a.vertices[l.index1],b.push(h.x,h.y,h.z),h=a.vertices[l.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry){var h= -new p;if(null!==a.index){k=a.attributes.position;q=a.index;var r=a.groups;0===r.length&&(r=[{start:0,count:q.count,materialIndex:0}]);a=0;for(e=r.length;ac;c++)n=q.getX(l+c),t=q.getX(l+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)l=g[n],h.fromBufferAttribute(k,l.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,l.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position, -l=0,d=k.count/3;lc;c++)g=3*l+c,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z),g=3*l+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z)}this.addAttribute("position",new y(b,3))}function Hc(a,b,c){N.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Tb(a,b,c));this.mergeVertices()}function Tb(a,b,c){D.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h= -new p,k=new p,l=new p,q=new p,n=new p,t,r,m=b+1;for(t=0;t<=c;t++){var v=t/c;for(r=0;r<=b;r++){var w=r/b,k=a(w,v,k);e.push(k.x,k.y,k.z);0<=w-1E-5?(l=a(w-1E-5,v,l),q.subVectors(k,l)):(l=a(w+1E-5,v,l),q.subVectors(l,k));0<=v-1E-5?(l=a(w,v-1E-5,l),n.subVectors(k,l)):(l=a(w,v+1E-5,l),n.subVectors(l,k));h.crossVectors(q,n).normalize();f.push(h.x,h.y,h.z);g.push(w,v)}}for(t=0;td&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}D.call(this);this.type="PolyhedronBufferGeometry"; -this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new y(h,3));this.addAttribute("normal",new y(h.slice(),3));this.addAttribute("uv",new y(k,2));0===d?this.computeVertexNormals(): -this.normalizeNormals()}function Jc(a,b){N.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ub(a,b));this.mergeVertices()}function Ub(a,b){qa.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){N.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new nb(a,b));this.mergeVertices()} -function nb(a,b){qa.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b){N.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Vb(a,b));this.mergeVertices()}function Vb(a,b){var c=(1+Math.sqrt(5))/2;qa.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11, -5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Mc(a,b){N.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Wb(a,b));this.mergeVertices()}function Wb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;qa.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0, -d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Nc(a,b,c,d,e,f){N.call(this);this.type="TubeGeometry";this.parameters={path:a, -tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Xb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Xb(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var l=t/d*Math.PI*2,n=Math.sin(l),l=-Math.cos(l);k.x=l*f.x+n*e.x;k.y=l*f.y+n*e.y;k.z=l*f.z+n*e.z;k.normalize();u.push(k.x, -k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z=q.z+c*k.z;m.push(h.x,h.y,h.z)}}D.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,k=new p,l=new C,q=new p,n,t,m=[],u=[],v=[],w=[];for(n=0;nq;q++){var n=l[f[q]];var t=l[f[(q+1)%3]];d[0]=Math.min(n,t);d[1]=Math.max(n,t);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.addAttribute("position", -new y(c,3))}function pb(a,b,c,d,e,f,g,h){N.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Sa(a,b,c,d,e,f,g,h));this.mergeVertices()}function Sa(a,b,c,d,e,f,g,h){function k(c){var e,f=new C,k=new p,r=0,v=!0===c?a:b,z=!0===c?1:-1;var y=u;for(e=1;e<=d;e++)n.push(0,w*z,0),t.push(0,z,0),m.push(.5,.5),u++;var A=u;for(e=0;e<=d;e++){var D=e/d*h+g,L=Math.cos(D), -D=Math.sin(D);k.x=v*D;k.y=w*z;k.z=v*L;n.push(k.x,k.y,k.z);t.push(0,z,0);f.x=.5*L+.5;f.y=.5*D*z+.5;m.push(f.x,f.y);u++}for(e=0;ethis.duration&&this.resetDuration();this.optimize()}function Id(a){this.manager=void 0!==a?a:wa;this.textures={}}function ae(a){this.manager=void 0!==a?a:wa}function kc(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function be(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."), -a=void 0);this.manager=void 0!==a?a:wa;this.withCredentials=!1}function Re(a){this.manager=void 0!==a?a:wa;this.texturePath=""}function Se(a,b,c,d,e){b=.5*(d-b);e=.5*(e-c);var f=a*a;return(2*c-2*d+b+e)*a*f+(-3*c+3*d-2*b-e)*f+b*a+c}function yb(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}function zb(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}function S(){this.type="Curve";this.arcLengthDivisions=200}function Ka(a,b){S.call(this);this.type="LineCurve";this.v1=a|| -new C;this.v2=b||new C}function Ab(){S.call(this);this.type="CurvePath";this.curves=[];this.autoClose=!1}function Na(a,b,c,d,e,f,g,h){S.call(this);this.type="EllipseCurve";this.aX=a||0;this.aY=b||0;this.xRadius=c||1;this.yRadius=d||1;this.aStartAngle=e||0;this.aEndAngle=f||2*Math.PI;this.aClockwise=g||!1;this.aRotation=h||0}function ab(a){S.call(this);this.type="SplineCurve";this.points=a||[]}function bb(a,b,c,d){S.call(this);this.type="CubicBezierCurve";this.v0=a||new C;this.v1=b||new C;this.v2= -c||new C;this.v3=d||new C}function cb(a,b,c){S.call(this);this.type="QuadraticBezierCurve";this.v0=a||new C;this.v1=b||new C;this.v2=c||new C}function Bb(a){Ab.call(this);this.type="Path";this.currentPoint=new C;a&&this.setFromPoints(a)}function Cb(a){Bb.call(this,a);this.type="Shape";this.holes=[]}function ce(){this.type="ShapePath";this.subPaths=[];this.currentPath=null}function de(a){this.type="Font";this.data=a}function Te(a){this.manager=void 0!==a?a:wa}function ee(a){this.manager=void 0!==a? -a:wa}function Ue(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new U;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new U;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function $c(a,b,c){A.call(this);this.type="CubeCamera";var d=new U(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new p(1,0,0));this.add(d);var e=new U(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new p(-1,0,0));this.add(e);var f=new U(90,1,a,b);f.up.set(0,0,1);f.lookAt(new p(0,1,0)); -this.add(f);var g=new U(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new p(0,-1,0));this.add(g);var h=new U(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new p(0,0,1));this.add(h);var k=new U(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new p(0,0,-1));this.add(k);this.renderTarget=new Ib(c,c,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,l=c.texture.generateMipmaps;c.texture.generateMipmaps= -!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=l;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}}function fe(){A.call(this);this.type="AudioListener";this.context=ge.getContext();this.gain= -this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function lc(a){A.call(this);this.type="Audio";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function he(a){lc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)} -function ie(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function je(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function Ve(a, -b,c){c=c||na.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function na(a,b,c){this.path=b;this.parsedPath=c||na.parseTrackName(b);this.node=na.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function We(){this.uuid=R.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath= -{};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function Xe(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant= -this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Ye(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Jd(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."), -a=b);this.value=a}function ke(){D.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function le(a,b,c,d){this.uuid=R.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function mc(a,b){this.uuid=R.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function me(a,b,c){mc.call(this,a,b);this.meshPerAttribute=c||1}function ne(a, -b,c){P.call(this,a,b);this.meshPerAttribute=c||1}function Ze(a,b,c,d){this.ray=new lb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function $e(a,b){return a.distance-b.distance}function oe(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e= -a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new y(b,3));b=new O({fog:!1});this.cone=new ca(a,b);this.add(this.cone);this.update()}function df(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0e;e++)8===e||13===e||18===e||23===e?d+="-":14===e?d+="4":(2>=b&&(b=33554432+16777216*Math.random()|0),c=b&15,b>>=4,d+=a[19===e?c&3|8:c]);return d}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a, -b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*R.DEG2RAD},radToDeg:function(a){return a*R.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2, -Math.floor(Math.log(a)/Math.LN2))}};Object.defineProperties(C.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(C.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break; -default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this}, -addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y; -return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y= -Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new C,b=new C;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x); -this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ -Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+= -(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b); -return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(K.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,l,q,n,t,m,p,v){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=e;r[5]=f;r[9]=g;r[13]=h;r[2]=k;r[6]=l;r[10]=q;r[14]=n;r[3]=t;r[7]=m;r[11]=p;r[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new K).fromArray(this.elements)}, -copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, -b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new p;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); -var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){var k=f*h;var l=f*e;var q=c*h;a=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+q*d;b[5]=k-a*d;b[9]=-c*g;b[2]=a-k*d;b[6]=q+l*d;b[10]=f*g}else"YXZ"===a.order?(k=g*h,l=g*e,q=d*h,a=d*e,b[0]=k+a*c,b[4]=q*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-q,b[6]=a+k*c,b[10]=f*g):"ZXY"===a.order?(k=g*h,l=g*e,q=d*h,a=d*e,b[0]=k-a*c,b[4]=-f*e,b[8]=q+l*c,b[1]=l+q*c,b[5]=f*h,b[9]= -a-k*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(k=f*h,l=f*e,q=c*h,a=c*e,b[0]=g*h,b[4]=q*d-l,b[8]=k*d+a,b[1]=g*e,b[5]=a*d+k,b[9]=l*d-q,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(k=f*g,l=f*d,q=c*g,a=c*d,b[0]=g*h,b[4]=a-k*e,b[8]=q*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+q,b[10]=k-a*e):"XZY"===a.order&&(k=f*g,l=f*d,q=c*g,a=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=k*e+a,b[5]=f*h,b[9]=l*e-q,b[2]=q*e-l,b[6]=c*h,b[10]=a*e+k);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b= -this.elements,c=a._x,d=a._y,e=a._z,f=a._w,g=c+c,h=d+d,k=e+e;a=c*g;var l=c*h,c=c*k,q=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(q+e);b[4]=l-f;b[8]=c+h;b[1]=l+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+q);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a=new p,b=new p,c=new p;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4, +a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format");}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),p(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),p(e.__webglDepthbuffer, +b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture,f=k(b);m(e,f)&&(b=b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))};this.updateVideoTextures=function(){for(var a in y)y[a].update()}}function Bg(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},remove:function(b){delete a[b.uuid]},clear:function(){a={}}}}function Cg(a, +b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;ba.matrixWorld.determinant();Z.setMaterial(e,h);h=u(c,b.fog,e,a);R=""; +g(a,h,e)}else S.renderBufferDirect(c,b.fog,d,e,a,f);a.onAfterRender(S,b,c,d,e,f)}function n(a,b,c){var d=ca.get(a);c=ma.getParameters(a,ua.state,C,b,Ja.numPlanes,Ja.numIntersection,c);var g=ma.getProgramCode(a,c),h=d.program,k=!0;if(void 0===h)a.addEventListener("dispose",e);else if(h.code!==g)f(a);else{if(void 0!==c.shaderID)return;k=!1}k&&(c.shaderID?(h=tb[c.shaderID],d.shader={name:a.type,uniforms:Ga.clone(h.uniforms),vertexShader:h.vertexShader,fragmentShader:h.fragmentShader}):d.shader={name:a.type, +uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader},a.onBeforeCompile(d.shader),h=ma.acquireProgram(a,d.shader,c,g),d.program=h,a.program=h);c=h.getAttributes();if(a.morphTargets)for(g=a.numSupportedMorphTargets=0;ge.matrixWorld.determinant();Z.setMaterial(d,g);var h=u(a,b,d,e);a=c.id+"_"+h.id+"_"+(!0===d.wireframe);var k=!1;a!==R&&(R=a,k=!0);e.morphTargetInfluences&&(xa.update(e,c,d,h),k=!0);var g=c.index,m=c.attributes.position;b=1;!0===d.wireframe&&(g=ra.getWireframeAttribute(c), +b=2);a=ya;if(null!==g){var q=qa.get(g);a=za;a.setIndex(q)}if(k){k=void 0;if(c&&c.isInstancedBufferGeometry&&null===ia.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{void 0===k&&(k=0);Z.initAttributes();var n=c.attributes,h=h.getAttributes(),l=d.defaultAttributeValues;for(J in h){var r=h[J];if(0<=r){var t=n[J];if(void 0!==t){var v=t.normalized,p=t.itemSize, +w=qa.get(t);if(void 0!==w){var A=w.buffer,y=w.type,w=w.bytesPerElement;if(t.isInterleavedBufferAttribute){var z=t.data,I=z.stride,t=t.offset;z&&z.isInstancedInterleavedBuffer?(Z.enableAttributeAndDivisor(r,z.meshPerAttribute),void 0===c.maxInstancedCount&&(c.maxInstancedCount=z.meshPerAttribute*z.count)):Z.enableAttribute(r);F.bindBuffer(F.ARRAY_BUFFER,A);F.vertexAttribPointer(r,p,y,v,I*w,(k*I+t)*w)}else t.isInstancedBufferAttribute?(Z.enableAttributeAndDivisor(r,t.meshPerAttribute),void 0===c.maxInstancedCount&& +(c.maxInstancedCount=t.meshPerAttribute*t.count)):Z.enableAttribute(r),F.bindBuffer(F.ARRAY_BUFFER,A),F.vertexAttribPointer(r,p,y,v,0,k*p*w)}}else if(void 0!==l&&(v=l[J],void 0!==v))switch(v.length){case 2:F.vertexAttrib2fv(r,v);break;case 3:F.vertexAttrib3fv(r,v);break;case 4:F.vertexAttrib4fv(r,v);break;default:F.vertexAttrib1fv(r,v)}}}Z.disableUnusedAttributes()}null!==g&&F.bindBuffer(F.ELEMENT_ARRAY_BUFFER,q.buffer)}q=0;null!==g?q=g.count:void 0!==m&&(q=m.count);g=c.drawRange.start*b;m=null!== +f?f.start*b:0;var J=Math.max(g,m);f=Math.max(0,Math.min(q,g+c.drawRange.count*b,m+(null!==f?f.count*b:Infinity))-1-J+1);if(0!==f){if(e.isMesh)if(!0===d.wireframe)Z.setLineWidth(d.wireframeLinewidth*(null===N?wa:1)),a.setMode(F.LINES);else switch(e.drawMode){case 0:a.setMode(F.TRIANGLES);break;case 1:a.setMode(F.TRIANGLE_STRIP);break;case 2:a.setMode(F.TRIANGLE_FAN)}else e.isLine?(d=d.linewidth,void 0===d&&(d=1),Z.setLineWidth(d*(null===N?wa:1)),e.isLineSegments?a.setMode(F.LINES):e.isLineLoop?a.setMode(F.LINE_LOOP): +a.setMode(F.LINE_STRIP)):e.isPoints&&a.setMode(F.POINTS);c&&c.isInstancedBufferGeometry?0=T.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+T.maxTextures);Y+=1;return a};this.setTexture2D= +function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ga.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ga.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTargetCube&& +(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ga.setTextureCube(b,c):ga.setTextureCubeDynamic(b,c)}}();this.getRenderTarget=function(){return N};this.setRenderTarget=function(a){(N=a)&&void 0===ca.get(a).__webglFramebuffer&&ga.setupRenderTarget(a);var b=null,c=!1;a?(b=ca.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&&(b= +b[a.activeCubeFace],c=!0),nb.copy(a.viewport),X.copy(a.scissor),G=a.scissorTest):(nb.copy(da).multiplyScalar(wa),X.copy(fa).multiplyScalar(wa),G=$e);M!==b&&(F.bindFramebuffer(F.FRAMEBUFFER,b),M=b);Z.viewport(nb);Z.scissor(X);Z.setScissorTest(G);c&&(c=ca.get(a.texture),F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=ca.get(a).__webglFramebuffer; +if(g){var h=!1;g!==M&&(F.bindFramebuffer(F.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,q=k.type;1023!==m&&pa.convert(m)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||pa.convert(q)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||1015===q&&(ia.get("OES_texture_float")||ia.get("WEBGL_color_buffer_float"))||1016===q&&ia.get("EXT_color_buffer_half_float")? +F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&F.readPixels(b,c,d,e,pa.convert(m),pa.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&F.bindFramebuffer(F.FRAMEBUFFER,M)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")}} +function Pb(a,b){this.name="";this.color=new H(a);this.density=void 0!==b?b:2.5E-4}function Qb(a,b,c){this.name="";this.color=new H(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function vd(){x.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function de(a,b,c,d,e){x.call(this);this.lensFlares=[];this.positionScreen=new p;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function hb(a){P.call(this);this.type="SpriteMaterial"; +this.color=new H(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}function Cc(a){x.call(this);this.type="Sprite";this.material=void 0!==a?a:new hb}function Dc(){x.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Ec(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."), +this.boneInverses=[],a=0,b=this.bones.length;ac;c++){var n=q[h[c]];var u=q[h[(c+1)%3]];f[0]=Math.min(n,u);f[1]=Math.max(n,u);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry){var h=new p;if(null!== +a.index){k=a.attributes.position;q=a.index;var l=a.groups;0===l.length&&(l=[{start:0,count:q.count,materialIndex:0}]);a=0;for(e=l.length;ac;c++)n=q.getX(m+c),u=q.getX(m+(c+1)%3),f[0]=Math.min(n,u),f[1]=Math.max(n,u),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position, +m=0,d=k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z)}this.addAttribute("position",new B(b,3))}function Hc(a,b,c){L.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Ub(a,b,c));this.mergeVertices()}function Ub(a,b,c){E.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h= +new p,k=new p,m=new p,q=new p,n=new p,u,l,t=b+1;for(u=0;u<=c;u++){var v=u/c;for(l=0;l<=b;l++){var w=l/b,k=a(w,v,k);e.push(k.x,k.y,k.z);0<=w-1E-5?(m=a(w-1E-5,v,m),q.subVectors(k,m)):(m=a(w+1E-5,v,m),q.subVectors(m,k));0<=v-1E-5?(m=a(w,v-1E-5,m),n.subVectors(k,m)):(m=a(w,v+1E-5,m),n.subVectors(m,k));h.crossVectors(q,n).normalize();f.push(h.x,h.y,h.z);g.push(w,v)}}for(u=0;ud&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}E.call(this);this.type="PolyhedronBufferGeometry"; +this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new B(h,3));this.addAttribute("normal",new B(h.slice(),3));this.addAttribute("uv",new B(k,2));0===d?this.computeVertexNormals(): +this.normalizeNormals()}function Jc(a,b){L.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Vb(a,b));this.mergeVertices()}function Vb(a,b){ja.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){L.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ub(a,b));this.mergeVertices()} +function ub(a,b){ja.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b){L.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Wb(a,b));this.mergeVertices()}function Wb(a,b){var c=(1+Math.sqrt(5))/2;ja.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11, +5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Mc(a,b){L.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Xb(a,b));this.mergeVertices()}function Xb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;ja.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0, +d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Nc(a,b,c,d,e,f){L.call(this);this.type="TubeGeometry";this.parameters={path:a, +tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Yb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Yb(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(l=0;l<=d;l++){var m=l/d*Math.PI*2,n=Math.sin(m),m=-Math.cos(m);k.x=m*f.x+n*e.x;k.y=m*f.y+n*e.y;k.z=m*f.z+n*e.z;k.normalize();t.push(k.x, +k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z=q.z+c*k.z;r.push(h.x,h.y,h.z)}}E.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,k=new p,m=new D,q=new p,n,l,r=[],t=[],v=[],w=[];for(n=0;n=b;e-=d)f=cf(e,a[e],a[e+1],f);f&&vb(f,f.next)&&(Qc(f),f=f.next);return f}function Rc(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!vb(a,a.next)&&0!==ta(a.prev,a,a.next))a=a.next;else{Qc(a);a=b=a.prev; +if(a===a.next)break;c=!0}}while(c||a!==b);return b}function Sc(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=fe(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;var h=k,m,q,n,l,r=1;do{k=h;var t=h=null;for(q=0;k;){q++;var p=k;for(m=n=0;mn.x?q.x>r.x?q.x:r.x:n.x>r.x?n.x:r.x,I=q.y>n.y?q.y>r.y?q.y:r.y:n.y>r.y?n.y:r.y;m=fe(q.x=m;){if(w!==t.prev&&w!==t.next&&zd(q.x,q.y,n.x,n.y,r.x, +r.y,w.x,w.y)&&0<=ta(w.prev,w,w.next)){t=!1;break a}w=w.prevZ}t=!0}}else a:if(t=a,q=t.prev,n=t,r=t.next,0<=ta(q,n,r))t=!1;else{for(m=t.next.next;m!==t.prev;){if(zd(q.x,q.y,n.x,n.y,r.x,r.y,m.x,m.y)&&0<=ta(m.prev,m,m.next)){t=!1;break a}m=m.next}t=!0}if(t)b.push(k.i/c),b.push(a.i/c),b.push(p.i/c),Qc(a),h=a=p.next;else if(a=p,a===h){if(!g)Sc(Rc(a),b,c,d,e,f,1);else if(1===g){g=b;h=c;k=a;do p=k.prev,t=k.next.next,!vb(p,t)&&df(p,k,k.next,t)&&Tc(p,t)&&Tc(t,p)&&(g.push(p.i/h),g.push(k.i/h),g.push(t.i/h), +Qc(k),Qc(k.next),k=a=t),k=k.next;while(k!==a);a=k;Sc(a,b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(k=g.i!==h.i){k=g;p=h;if(t=k.next.i!==p.i&&k.prev.i!==p.i){b:{t=k;do{if(t.i!==k.i&&t.next.i!==k.i&&t.i!==p.i&&t.next.i!==p.i&&df(t,t.next,k,p)){t=!0;break b}t=t.next}while(t!==k);t=!1}t=!t}if(t=t&&Tc(k,p)&&Tc(p,k)){t=k;q=!1;n=(k.x+p.x)/2;p=(k.y+p.y)/2;do t.y>p!==t.next.y>p&&t.next.y!==t.y&&n<(t.next.x-t.x)*(p-t.y)/(t.next.y-t.y)+t.x&&(q=!q),t=t.next;while(t!==k);t=q}k=t}if(k){a= +ef(g,h);g=Rc(g,g.next);a=Rc(a,a.next);Sc(g,b,c,d,e,f);Sc(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Hg(a,b){return a.x-b.x}function Ig(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&zd(eh.x)&&Tc(c,a)&&(h=c,m=q)),c=c.next;return h}function fe(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Jg(a){var b=a,c=a;do b.xta(a.prev,a,a.next)?0<=ta(a,b,a.next)&&0<=ta(a,a.prev,b):0>ta(a,b,a.prev)||0>ta(a,a.next,b)}function ef(a,b){var c=new ge(a.i,a.x,a.y),d=new ge(b.i,b.x,b.y),e=a.next,f=b.prev; +a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function cf(a,b,c,d){a=new ge(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Qc(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ge(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ib(a,b){L.call(this);this.type="ExtrudeGeometry";this.parameters= +{shapes:a,options:b};this.fromBufferGeometry(new La(a,b));this.mergeVertices()}function La(a,b){"undefined"!==typeof a&&(E.call(this),this.type="ExtrudeBufferGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeVertexNormals())}function Uc(a,b){L.call(this);this.type="TextGeometry";this.parameters={text:a,parameters:b};this.fromBufferGeometry(new ac(a,b));this.mergeVertices()}function ac(a,b){b=b||{};var c=b.font;if(!c||!c.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."), +new L;a=c.generateShapes(a,b.size,b.curveSegments);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);La.call(this,a,b);this.type="TextBufferGeometry"}function Vc(a,b,c,d,e,f,g){L.call(this);this.type="SphereGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new wb(a,b,c,d,e,f,g));this.mergeVertices()} +function wb(a,b,c,d,e,f,g){E.call(this);this.type="SphereBufferGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||1;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;var h=f+g,k,m,q=0,n=[],l=new p,r=new p,t=[],v=[],w=[],z=[];for(m=0;m<=c;m++){var y=[],I=m/c;for(k=0;k<=b;k++){var A=k/b;l.x=-a*Math.cos(d+A*e)*Math.sin(f+I*g);l.y=a*Math.cos(f+ +I*g);l.z=a*Math.sin(d+A*e)*Math.sin(f+I*g);v.push(l.x,l.y,l.z);r.set(l.x,l.y,l.z).normalize();w.push(r.x,r.y,r.z);z.push(A,1-I);y.push(q++)}n.push(y)}for(m=0;mq;q++){var n=m[f[q]];var l=m[f[(q+1)%3]];d[0]=Math.min(n,l);d[1]=Math.max(n,l);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.addAttribute("position",new B(c,3))}function zb(a,b,c,d,e,f,g,h){L.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a, +radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new ab(a,b,c,d,e,f,g,h));this.mergeVertices()}function ab(a,b,c,d,e,f,g,h){function k(c){var e,f=new D,k=new p,u=0,v=!0===c?a:b,y=!0===c?1:-1;var x=t;for(e=1;e<=d;e++)n.push(0,w*y,0),l.push(0,y,0),r.push(.5,.5),t++;var B=t;for(e=0;e<=d;e++){var C=e/d*h+g,E=Math.cos(C),C=Math.sin(C);k.x=v*C;k.y=w*y;k.z=v*E;n.push(k.x,k.y,k.z);l.push(0,y,0);f.x=.5*E+.5;f.y=.5*C*y+.5;r.push(f.x,f.y); +t++}for(e=0;ethis.duration&&this.resetDuration();this.optimize()}function Pd(a){this.manager=void 0!==a?a:xa;this.textures={}}function le(a){this.manager=void 0!==a?a:xa}function kc(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function me(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."), +a=void 0);this.manager=void 0!==a?a:xa;this.withCredentials=!1}function jf(a){this.manager=void 0!==a?a:xa;this.texturePath=""}function ne(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");this.manager=void 0!==a?a:xa;this.options=void 0}function oe(){this.type="ShapePath";this.subPaths=[];this.currentPath=null}function pe(a){this.type="Font"; +this.data=a}function kf(a){this.manager=void 0!==a?a:xa}function qe(a){this.manager=void 0!==a?a:xa}function lf(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new ba;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new ba;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function fd(a,b,c){x.call(this);this.type="CubeCamera";var d=new ba(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new p(1,0,0));this.add(d);var e=new ba(90,1,a,b);e.up.set(0,-1, +0);e.lookAt(new p(-1,0,0));this.add(e);var f=new ba(90,1,a,b);f.up.set(0,0,1);f.lookAt(new p(0,1,0));this.add(f);var g=new ba(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new p(0,-1,0));this.add(g);var h=new ba(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new p(0,0,1));this.add(h);var k=new ba(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new p(0,0,-1));this.add(k);this.renderTarget=new Jb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&& +this.updateMatrixWorld();var c=this.renderTarget,m=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=m;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}} +function re(){x.call(this);this.type="AudioListener";this.context=se.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function lc(a){x.call(this);this.type="Audio";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function te(a){lc.call(this, +a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function ue(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function ve(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion= +b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function mf(a,b,c){c=c||qa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function qa(a,b,c){this.path=b;this.parsedPath=c||qa.parseTrackName(b);this.node=qa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function nf(){this.uuid=Q.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]= +b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function of(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings= +d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function we(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex= +0;this.timeScale=1}function Qd(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function xe(){E.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function ye(a,b,c,d){this.uuid=Q.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function mc(a,b){this.uuid=Q.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1}; +this.onUploadCallback=function(){};this.version=0}function ze(a,b,c){mc.call(this,a,b);this.meshPerAttribute=c||1}function Ae(a,b,c){M.call(this,a,b);this.meshPerAttribute=c||1}function pf(a,b,c,d){this.ray=new sb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function qf(a, +b){return a.distance-b.distance}function Be(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new B(b,3));b=new W({fog:!1});this.cone=new X(a,b);this.add(this.cone);this.update()}function uf(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0b;b++)a[b]=(16>b?"0":"")+b.toString(16).toUpperCase();return function(){var b=4294967295*Math.random()|0,d=4294967295*Math.random()|0,e=4294967295*Math.random()|0,f=4294967295*Math.random()|0;return a[b&255]+a[b>>8&255]+a[b>>16&255]+a[b>>24&255]+"-"+a[d&255]+a[d>>8& +255]+"-"+a[d>>16&15|64]+a[d>>24&255]+"-"+a[e&63|128]+a[e>>8&255]+"-"+a[e>>16&255]+a[e>>24&255]+a[f&255]+a[f>>8&255]+a[f>>16&255]+a[f>>24&255]}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1; +a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*Q.DEG2RAD},radToDeg:function(a){return a*Q.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/ +Math.LN2))}};Object.defineProperties(D.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(D.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ +a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= +a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new D,b=new D;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()|| +1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b, +a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d= +this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(O.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,q,l,u,r,t,p){var n=this.elements;n[0]=a;n[4]=b;n[8]=c;n[12]=d;n[1]=e;n[5]=f;n[9]=g;n[13]=h;n[2]=k;n[6]=m;n[10]=q;n[14]=l;n[3]=u;n[7]=r;n[11]=t;n[15]=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new O).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]= +a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0, +1);return this},extractRotation:function(){var a=new p;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){var k=f*h;var m=f*e;var q=c*h;a=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=m+q*d;b[5]=k-a*d;b[9]=-c*g;b[2]=a-k*d;b[6]=q+m*d;b[10]=f*g}else"YXZ"===a.order?(k=g*h,m=g*e,q=d*h,a=d*e,b[0]=k+a*c,b[4]=q*c-m,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=m*c-q,b[6]=a+k*c,b[10]=f*g):"ZXY"===a.order?(k=g*h,m=g*e,q=d*h,a=d*e,b[0]=k-a*c,b[4]=-f*e,b[8]=q+m*c,b[1]=m+q*c,b[5]=f*h,b[9]= +a-k*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(k=f*h,m=f*e,q=c*h,a=c*e,b[0]=g*h,b[4]=q*d-m,b[8]=k*d+a,b[1]=g*e,b[5]=a*d+k,b[9]=m*d-q,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(k=f*g,m=f*d,q=c*g,a=c*d,b[0]=g*h,b[4]=a-k*e,b[8]=q*e+m,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=m*e+q,b[10]=k-a*e):"XZY"===a.order&&(k=f*g,m=f*d,q=c*g,a=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=k*e+a,b[5]=f*h,b[9]=m*e-q,b[2]=q*e-m,b[6]=c*h,b[10]=a*e+k);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b= +this.elements,c=a._x,d=a._y,e=a._z,f=a._w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,q=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(q+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+q);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a=new p,b=new p,c=new p;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4, c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements; -b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],l=c[9],q=c[13],n=c[2],m=c[6],r=c[10],p=c[14],v=c[3],w=c[7],x=c[11],c=c[15],z=d[0],I=d[4],B=d[8],J=d[12],y=d[1],C=d[5],A=d[9],D=d[13],E=d[2],H=d[6],L=d[10],Y=d[14],N=d[3],M=d[7],V=d[11],d=d[15];b[0]=a*z+e*y+f*E+g*N;b[4]=a*I+e*C+f*H+g*M;b[8]=a*B+e*A+f*L+g*V;b[12]=a*J+e*D+f*Y+g*d;b[1]=h*z+k*y+l*E+q*N;b[5]=h*I+k*C+l*H+q*M;b[9]=h*B+k*A+l*L+q*V;b[13]=h*J+k*D+l*Y+q*d;b[2]=n*z+m*y+r*E+p*N;b[6]=n*I+m*C+r*H+p*M;b[10]=n*B+m*A+r*L+p*V;b[14]=n*J+m* -D+r*Y+p*d;b[3]=v*z+w*y+x*E+c*N;b[7]=v*I+w*C+x*H+c*M;b[11]=v*B+w*A+x*L+c*V;b[15]=v*J+w*D+x*Y+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); -var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements; -a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(Z,{slerp:function(a,b,c,d){return c.copy(a).slerp(b, -d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var q=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==q||l!==n){f=1-g;var m=h*d+k*q+l*n+c*e,r=0<=m?1:-1,p=1-m*m;p>Number.EPSILON&&(p=Math.sqrt(p),m=Math.atan2(p,m*r),f=Math.sin(f*m)/p,g=Math.sin(g*m)/p);r*=g;h=h*f+d*r;k=k*f+q*r;l=l*f+n*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});Object.defineProperties(Z.prototype,{x:{get:function(){return this._x}, -set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this.onChangeCallback()}}});Object.assign(Z.prototype,{set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z, +Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){this.makeRotationFromQuaternion(b);this.scale(c);this.setPosition(a);return this},decompose:function(){var a=new p,b=new O;return function(c, +d,e){var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],f[5],f[6]).length(),k=a.set(f[8],f[9],f[10]).length();0>this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;var f=1/h,m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); +var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements; +a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(ha,{slerp:function(a,b,c,d){return c.copy(a).slerp(b, +d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var q=e[f+1],l=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==q||m!==l){f=1-g;var u=h*d+k*q+m*l+c*e,r=0<=u?1:-1,p=1-u*u;p>Number.EPSILON&&(p=Math.sqrt(p),u=Math.atan2(p,u*r),f=Math.sin(f*u)/p,g=Math.sin(g*u)/p);r*=g;h=h*f+d*r;k=k*f+q*r;m=m*f+l*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});Object.defineProperties(ha.prototype,{x:{get:function(){return this._x}, +set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this.onChangeCallback()}}});Object.assign(ha.prototype,{set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z, this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2),f=f(e/2),c=g(c/2),d=g(d/2),e=g(e/2);"XYZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"YXZ"===a?(this._x=c*k*f+ h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"ZXY"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"ZYX"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"YZX"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f-c*d*e):"XZY"===a&&(this._x=c*k*f-h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f+c*d*e);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a, -b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],l=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y= +b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y= .25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a=new p,b;return function(c,d){void 0===a&&(a=new p);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*= -1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this}, multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this.onChangeCallback(); @@ -324,62 +334,62 @@ this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+th a;return this},onChangeCallback:function(){}});Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x; case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this}, addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z= -a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a=new Z;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."); -return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new Z;return function(b,c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]* -d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a=new K;return function(b){a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a=new K;return function(b){a.multiplyMatrices(b.matrixWorld, +a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a=new ha;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."); +return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new ha;return function(b,c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+ +a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a=new O;return function(b){a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a=new O;return function(b){a.multiplyMatrices(b.matrixWorld, a.getInverse(b.projectionMatrix));return this.applyMatrix4(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x= Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a=new p,b=new p;return function(c,d){a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x= Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x= -this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x- this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b= -a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a=new p;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new p;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(R.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x- +a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a=new p;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new p;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(Q.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x- a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y= a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a= -[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(ra.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var l=this.elements;l[0]=a;l[1]=d;l[2]=g;l[3]=b;l[4]=e;l[5]=h;l[6]=c;l[7]=f;l[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)}, +[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(ma.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)}, copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= -this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var kf=0;ea.DEFAULT_IMAGE=void 0;ea.DEFAULT_MAPPING=300;Object.defineProperty(ea.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(ea.prototype,ja.prototype,{constructor:ea,isTexture:!0,clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping= -a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.center.copy(a.center);this.rotation=a.rotation;this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrix.copy(a.matrix);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding; -return this},toJSON:function(a){var b=void 0===a||"string"===typeof a;if(!b&&void 0!==a.textures[this.uuid])return a.textures[this.uuid];var c={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY}; -if(void 0!==this.image){var d=this.image;void 0===d.uuid&&(d.uuid=R.generateUUID());if(!b&&void 0===a.images[d.uuid]){var e=a.images,f=d.uuid,g=d.uuid;if(d instanceof HTMLCanvasElement)var h=d;else{h=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");h.width=d.width;h.height=d.height;var k=h.getContext("2d");d instanceof ImageData?k.putImageData(d,0,0):k.drawImage(d,0,0,d.width,d.height)}h=2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)% -2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}});Object.assign(da.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break; -case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var Af=0;U.DEFAULT_IMAGE=void 0;U.DEFAULT_MAPPING=300;U.prototype=Object.assign(Object.create(za.prototype),{constructor:U,isTexture:!0,clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter= +a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.center.copy(a.center);this.rotation=a.rotation;this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrix.copy(a.matrix);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){var b=void 0===a||"string"===typeof a;if(!b&&void 0!== +a.textures[this.uuid])return a.textures[this.uuid];var c={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var d=this.image;void 0===d.uuid&&(d.uuid=Q.generateUUID()); +if(!b&&void 0===a.images[d.uuid]){var e=a.images,f=d.uuid,g=d.uuid;if(d instanceof HTMLCanvasElement)var h=d;else{h=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");h.width=d.width;h.height=d.height;var k=h.getContext("2d");d instanceof ImageData?k.putImageData(d,0,0):k.drawImage(d,0,0,d.width,d.height)}h=2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}});Object.defineProperty(U.prototype, +"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(aa.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w= +b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a, b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]* -e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var l=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+ -e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+l-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;l=(l+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>l?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>l?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>l?(h=k=.707106781,c=0):(c=Math.sqrt(l),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a; -this.w=Math.acos((b+f+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w, -this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new da,b=new da);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z); +e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+ +e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c=Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a; +this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w, +this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new aa,b=new aa);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z); this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this}, dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+= (a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a, -b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});Object.assign(Hb.prototype,ja.prototype,{isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height= -a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Ib.prototype=Object.create(Hb.prototype);Ib.prototype.constructor=Ib;Ib.prototype.isWebGLRenderTargetCube=!0;fb.prototype=Object.create(ea.prototype);fb.prototype.constructor=fb;fb.prototype.isDataTexture=!0;Ua.prototype=Object.create(ea.prototype);Ua.prototype.constructor= -Ua;Ua.prototype.isCubeTexture=!0;Object.defineProperty(Ua.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});var Be=new ea,Ce=new Ua,we=[],ye=[],Ae=new Float32Array(16),ze=new Float32Array(9);Ge.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var Od=/([\w\d_]+)(\])?(\[|\.)?/g;gb.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};gb.prototype.setOptional=function(a, -b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};gb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};gb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var sg={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231, +b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});kb.prototype=Object.assign(Object.create(za.prototype),{constructor:kb,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width= +a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Jb.prototype=Object.create(kb.prototype);Jb.prototype.constructor=Jb;Jb.prototype.isWebGLRenderTargetCube=!0;lb.prototype=Object.create(U.prototype);lb.prototype.constructor=lb;lb.prototype.isDataTexture=!0;db.prototype=Object.create(U.prototype); +db.prototype.constructor=db;db.prototype.isCubeTexture=!0;Object.defineProperty(db.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});var Ne=new U,Oe=new db,Ie=[],Ke=[],Me=new Float32Array(16),Le=new Float32Array(9);Se.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var Vd=/([\w\d_]+)(\])?(\[|\.)?/g;mb.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};mb.prototype.setOptional= +function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};mb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};mb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var Kg={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231, cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539, deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536, lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154, mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519, royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Object.assign(H.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&& -a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=R.euclideanModulo(b, -1);c=R.clamp(c,0,1);d=R.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255, +a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=Q.euclideanModulo(b, +1);c=Q.clamp(c,0,1);d=Q.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255, parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360, -e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f): k/(2-e-f);switch(e){case b:g=(c-d)/k+(c 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.86267 + (0.49788 + 0.01436 * y ) * y;\n\tfloat b = 3.45068 + (4.18814 + y) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tvec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\n\treturn result;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", @@ -438,461 +448,468 @@ normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"}, -mb={basic:{uniforms:Ea.merge([E.common,E.specularmap,E.envmap,E.aomap,E.lightmap,E.fog]),vertexShader:W.meshbasic_vert,fragmentShader:W.meshbasic_frag},lambert:{uniforms:Ea.merge([E.common,E.specularmap,E.envmap,E.aomap,E.lightmap,E.emissivemap,E.fog,E.lights,{emissive:{value:new H(0)}}]),vertexShader:W.meshlambert_vert,fragmentShader:W.meshlambert_frag},phong:{uniforms:Ea.merge([E.common,E.specularmap,E.envmap,E.aomap,E.lightmap,E.emissivemap,E.bumpmap,E.normalmap,E.displacementmap,E.gradientmap, -E.fog,E.lights,{emissive:{value:new H(0)},specular:{value:new H(1118481)},shininess:{value:30}}]),vertexShader:W.meshphong_vert,fragmentShader:W.meshphong_frag},standard:{uniforms:Ea.merge([E.common,E.envmap,E.aomap,E.lightmap,E.emissivemap,E.bumpmap,E.normalmap,E.displacementmap,E.roughnessmap,E.metalnessmap,E.fog,E.lights,{emissive:{value:new H(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:W.meshphysical_vert,fragmentShader:W.meshphysical_frag},points:{uniforms:Ea.merge([E.points, -E.fog]),vertexShader:W.points_vert,fragmentShader:W.points_frag},dashed:{uniforms:Ea.merge([E.common,E.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:W.linedashed_vert,fragmentShader:W.linedashed_frag},depth:{uniforms:Ea.merge([E.common,E.displacementmap]),vertexShader:W.depth_vert,fragmentShader:W.depth_frag},normal:{uniforms:Ea.merge([E.common,E.bumpmap,E.normalmap,E.displacementmap,{opacity:{value:1}}]),vertexShader:W.normal_vert,fragmentShader:W.normal_frag},cube:{uniforms:{tCube:{value:null}, -tFlip:{value:-1},opacity:{value:1}},vertexShader:W.cube_vert,fragmentShader:W.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:W.equirect_vert,fragmentShader:W.equirect_frag},distanceRGBA:{uniforms:Ea.merge([E.common,E.displacementmap,{referencePosition:{value:new p},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:W.distanceRGBA_vert,fragmentShader:W.distanceRGBA_frag},shadow:{uniforms:Ea.merge([E.lights,E.fog,{color:{value:new H(0)},opacity:{value:1}}]),vertexShader:W.shadow_vert, -fragmentShader:W.shadow_frag}};mb.physical={uniforms:Ea.merge([mb.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:W.meshphysical_vert,fragmentShader:W.meshphysical_frag};Object.assign(kd.prototype,{set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<= -this.max.y},getParameter:function(a,b){return(b||new C).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new C).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new C;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min); -this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});tc.prototype=Object.create(ea.prototype);tc.prototype.constructor=tc;var Lf=0;Object.assign(Q.prototype,ja.prototype,{isMaterial:!0,onBeforeCompile:function(){},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+ -b+"' parameter is undefined.");else if("shading"===b)console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===c?!0:!1;else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."):d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]="overdraw"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c= -void 0===a||"string"===typeof a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type;""!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);void 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());1!==this.emissiveIntensity&&(d.emissiveIntensity=this.emissiveIntensity); -this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&& -this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid); -this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity);this.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&& -(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);!0===this.flatShading&&(d.flatShading=this.flatShading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation); -1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0e&&(e=l);q>f&&(f=q);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b= -Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=l);q>f&&(f=q);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<= -this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){return(b||new p).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a=new p;return function(b){this.clampPoint(b.center, +tb={basic:{uniforms:Ga.merge([K.common,K.specularmap,K.envmap,K.aomap,K.lightmap,K.fog]),vertexShader:R.meshbasic_vert,fragmentShader:R.meshbasic_frag},lambert:{uniforms:Ga.merge([K.common,K.specularmap,K.envmap,K.aomap,K.lightmap,K.emissivemap,K.fog,K.lights,{emissive:{value:new H(0)}}]),vertexShader:R.meshlambert_vert,fragmentShader:R.meshlambert_frag},phong:{uniforms:Ga.merge([K.common,K.specularmap,K.envmap,K.aomap,K.lightmap,K.emissivemap,K.bumpmap,K.normalmap,K.displacementmap,K.gradientmap, +K.fog,K.lights,{emissive:{value:new H(0)},specular:{value:new H(1118481)},shininess:{value:30}}]),vertexShader:R.meshphong_vert,fragmentShader:R.meshphong_frag},standard:{uniforms:Ga.merge([K.common,K.envmap,K.aomap,K.lightmap,K.emissivemap,K.bumpmap,K.normalmap,K.displacementmap,K.roughnessmap,K.metalnessmap,K.fog,K.lights,{emissive:{value:new H(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:R.meshphysical_vert,fragmentShader:R.meshphysical_frag},points:{uniforms:Ga.merge([K.points, +K.fog]),vertexShader:R.points_vert,fragmentShader:R.points_frag},dashed:{uniforms:Ga.merge([K.common,K.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:R.linedashed_vert,fragmentShader:R.linedashed_frag},depth:{uniforms:Ga.merge([K.common,K.displacementmap]),vertexShader:R.depth_vert,fragmentShader:R.depth_frag},normal:{uniforms:Ga.merge([K.common,K.bumpmap,K.normalmap,K.displacementmap,{opacity:{value:1}}]),vertexShader:R.normal_vert,fragmentShader:R.normal_frag},cube:{uniforms:{tCube:{value:null}, +tFlip:{value:-1},opacity:{value:1}},vertexShader:R.cube_vert,fragmentShader:R.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:R.equirect_vert,fragmentShader:R.equirect_frag},distanceRGBA:{uniforms:Ga.merge([K.common,K.displacementmap,{referencePosition:{value:new p},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:R.distanceRGBA_vert,fragmentShader:R.distanceRGBA_frag},shadow:{uniforms:Ga.merge([K.lights,K.fog,{color:{value:new H(0)},opacity:{value:1}}]),vertexShader:R.shadow_vert, +fragmentShader:R.shadow_frag}};tb.physical={uniforms:Ga.merge([tb.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:R.meshphysical_vert,fragmentShader:R.meshphysical_frag};Object.assign(od.prototype,{set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<= +this.max.y},getParameter:function(a,b){return(b||new D).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new D).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new D;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min); +this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});tc.prototype=Object.create(U.prototype);tc.prototype.constructor=tc;var ag=0;P.prototype=Object.assign(Object.create(za.prototype),{constructor:P,isMaterial:!0,onBeforeCompile:function(){},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0=== +c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if("shading"===b)console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===c?!0:!1;else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."):d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]="overdraw"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata; +b.push(d)}return b}var c=void 0===a||"string"===typeof a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type;""!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);void 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());1!==this.emissiveIntensity&& +(d.emissiveIntensity=this.emissiveIntensity);this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap= +this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&& +(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity);this.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap= +this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);!0===this.flatShading&&(d.flatShading=this.flatShading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite= +this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation);1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0e&&(e=m);q>f&&(f=q);l>g&&(g=l)}this.min.set(b,c,d);this.max.set(e, +f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);q>f&&(f=q);l>g&&(g=l)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<= +a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){return(b||new p).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a=new p;return function(b){this.clampPoint(b.center, a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){if(0=a.constant},clampPoint:function(a, -b){return(b||new p).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new p;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new p;return function(b){b=b||new Da;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a= +b){return(b||new p).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new p;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new p;return function(b){b=b||new Ia;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a= [new p,new p,new p,new p,new p,new p,new p,new p];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b); -a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Da.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new Oa;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=c=0,f=b.length;e=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<= -b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);b=b||new p;b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){a=a||new Oa;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a); -this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Aa.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a= +b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);b=b||new p;b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){a=a||new Xa;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a); +this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Ea.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a= new p,b=new p;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+ this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return(b||new p).copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(){var a=new p;return function(b,c){c=c||new p;var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes, -c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],q=c[8],n=c[9],m=c[10],r=c[11],p=c[12],v=c[13],w=c[14],c=c[15];b[0].setComponents(f-a,l-g,r-q,c-p).normalize();b[1].setComponents(f+a,l+g,r+q,c+p).normalize();b[2].setComponents(f+d,l+h,r+n,c+v).normalize();b[3].setComponents(f-d,l-h,r-n,c-v).normalize();b[4].setComponents(f-e,l-k,r-m,c-w).normalize();b[5].setComponents(f+e,l+k,r+m,c+w).normalize();return this},intersectsObject:function(){var a=new Da;return function(b){var c= -b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Da;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});Ya.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" "); -Ya.DefaultOrder="XYZ";Object.defineProperties(Ya.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this.onChangeCallback()}}});Object.assign(Ya.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z= -c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=R.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],q=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z= -Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-q,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-q,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(q,-1,1)),.99999>Math.abs(q)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"=== -b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-q,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new K;return function(b,c,d){a.makeRotationFromQuaternion(b); -return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new Z;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0=== -b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new p(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Pd.prototype,{set:function(a){this.mask=1<b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes, +c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],q=c[8],l=c[9],p=c[10],r=c[11],t=c[12],v=c[13],w=c[14],c=c[15];b[0].setComponents(f-a,m-g,r-q,c-t).normalize();b[1].setComponents(f+a,m+g,r+q,c+t).normalize();b[2].setComponents(f+d,m+h,r+l,c+v).normalize();b[3].setComponents(f-d,m-h,r-l,c-v).normalize();b[4].setComponents(f-e,m-k,r-p,c-w).normalize();b[5].setComponents(f+e,m+k,r+p,c+w).normalize();return this},intersectsObject:function(){var a=new Ia;return function(b){var c= +b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Ia;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});gb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" "); +gb.DefaultOrder="XYZ";Object.defineProperties(gb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this.onChangeCallback()}}});Object.assign(gb.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z= +c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=Q.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z= +Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"=== +b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new O;return function(b,c,d){a.makeRotationFromQuaternion(b); +return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new ha;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]); +void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new p(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Wd.prototype,{set:function(a){this.mask=1<g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;ca?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new p;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a= -new p,b=new p,c=new p;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),q=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k);if(0=-p?e<=p?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*q)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*q)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*q)+n):e<=-p?(d=Math.max(0,-(-k*h+l)),e=0b)return null; -b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin); -return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null; -if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a=new p;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new p,b=new p,c=new p,d=new p;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null; -g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});Object.assign(Mb.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start); -this.end.copy(a.end);return this},getCenter:function(a){return(a||new p).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new p).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){b=b||new p;return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new p,b=new p;return function(c,d){a.subVectors(c, -this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=R.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new p;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});Object.assign(Qa,{normal:function(){var a=new p;return function(b,c,d,e){e=e||new p; -e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=b.x+b.y}}()});Object.assign(Qa.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new p,b=new p;return function(){a.subVectors(this.c, -this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new p).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return Qa.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new Aa).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return Qa.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return Qa.containsPoint(a,this.a,this.b,this.c)},closestPointToPoint:function(){var a= -new Aa,b=[new Mb,new Mb,new Mb],c=new p,d=new p;return function(e,f){f=f||new p;var g=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))f.copy(c);else for(b[0].set(this.a,this.b),b[1].set(this.b,this.c),b[2].set(this.c,this.a),e=0;ec.far?null:{distance:b,point:x.clone(),object:a}}function c(c,d,e,f,l,n,q,t){g.fromBufferAttribute(f,n);h.fromBufferAttribute(f,q);k.fromBufferAttribute(f,t);if(c=b(c,c.material,d,e,g,h,k,w))l&&(m.fromBufferAttribute(l, -n),r.fromBufferAttribute(l,q),u.fromBufferAttribute(l,t),c.uv=a(w,g,h,k,m,r,u)),c.face=new Pa(n,q,t,Qa.normal(g,h,k)),c.faceIndex=n;return c}var d=new K,e=new lb,f=new Da,g=new p,h=new p,k=new p,l=new p,q=new p,n=new p,m=new C,r=new C,u=new C,v=new p,w=new p,x=new p;return function(t,p){var v=this.geometry,x=this.material,z=this.matrixWorld;if(void 0!==x&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(z),!1!==t.ray.intersectsSphere(f)&&(d.getInverse(z), -e.copy(t.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox)))){var y;if(v.isBufferGeometry){var x=v.index,I=v.attributes.position,z=v.attributes.uv,C;if(null!==x){var A=0;for(C=x.count;Af||(f=d.ray.origin.distanceTo(a),fd.far||e.push({distance:f,point:a.clone(),face:null,object:this}))}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});Dc.prototype=Object.assign(Object.create(A.prototype),{constructor:Dc,copy:function(a){A.prototype.copy.call(this, -a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ef||(q.applyMatrix4(this.matrixWorld),m=d.ray.origin.distanceTo(q),md.far||e.push({distance:m,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}));else for(g=0,v=r.length/3-1;gf||(q.applyMatrix4(this.matrixWorld),m=d.ray.origin.distanceTo(q), -md.far||e.push({distance:m,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,l=k.length,g=0;gf||(q.applyMatrix4(this.matrixWorld),m=d.ray.origin.distanceTo(q),md.far||e.push({distance:m,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry, -this.material)).copy(this)}});ca.prototype=Object.assign(Object.create(ma.prototype),{constructor:ca,isLineSegments:!0});rd.prototype=Object.assign(Object.create(ma.prototype),{constructor:rd,isLineLoop:!0});Ba.prototype=Object.create(Q.prototype);Ba.prototype.constructor=Ba;Ba.prototype.isPointsMaterial=!0;Ba.prototype.copy=function(a){Q.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Qb.prototype=Object.assign(Object.create(A.prototype), -{constructor:Qb,isPoints:!0,raycast:function(){var a=new K,b=new lb,c=new Da;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:h,distanceToRay:Math.sqrt(f),point:a.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k); -c.radius+=l;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),m=l*l,l=new p;if(h.isBufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var t=n.array,n=0,r=t.length;nc)return null;var d=[],e=[],f=[],g;if(0=h--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}var k= -g;c<=k&&(k=0);g=k+1;c<=g&&(g=0);var l=g+1;c<=l&&(l=0);a:{var m;var n=a[e[k]].x;var p=a[e[k]].y;var r=a[e[g]].x;var u=a[e[g]].y;var v=a[e[l]].x;var w=a[e[l]].y;if(0>=(r-n)*(w-p)-(u-p)*(v-n))var x=!1;else{var z=v-r;var y=w-u;var B=n-v;var C=p-w;var A=r-n;x=u-p;for(m=0;m=-Number.EPSILON&&D>=-Number.EPSILON&&N>=-Number.EPSILON){x= -!1;break a}}}x=!0}}if(x){d.push([a[e[k]],a[e[g]],a[e[l]]]);f.push([e[k],e[g],e[l]]);k=g;for(l=g+1;lNumber.EPSILON){if(0< -q){if(0>p||p>q)return[];k=l*m-k*n;if(0>k||k>q)return[]}else{if(0c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,l]}function f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0d&&(d=c);var e=a+1;e>c&&(e=0);c=f(h[a],h[d],h[e],D[b]);if(!c)return!1;c=D.length-1;d=b-1;0>d&&(d=c);e=b+1;e>c&&(e=0);return(c=f(D[b],D[d],D[e],h[a]))?!0:!1}function d(a,b){var c;for(c=0;ct){console.log('THREE.ShapeUtils: Infinite Loop! Holes left:" + indepHoles.length + ", Probably Hole outside Shape!');break}for(m=p;ma;a++)m=b[a].x+":"+b[a].y,m=h[m],void 0!==m&&(b[a]=m);return k.concat()},isClockWise:function(a){return 0>Ha.area(a)}};$a.prototype=Object.create(N.prototype);$a.prototype.constructor=$a;Ga.prototype= -Object.create(D.prototype);Ga.prototype.constructor=Ga;Ga.prototype.getArrays=function(){var a=this.getAttribute("position"),a=a?Array.prototype.slice.call(a.array):[],b=this.getAttribute("uv"),b=b?Array.prototype.slice.call(b.array):[],c=this.index,c=c?Array.prototype.slice.call(c.array):[];return{position:a,uv:b,index:c}};Ga.prototype.addShapeList=function(a,b){var c=a.length;b.arrays=this.getArrays();for(var d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;g=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new C(f, -d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new C(f/e,d/e)}function e(a,b){for(G=a.length;0<=--G;){var c=G;var d=G-1;0>d&&(d=a.length-1);var e,f=A+2*w;for(e=0;eMath.abs(g-k)?[new C(a,1-c),new C(h,1-d),new C(l,1-e),new C(n,1-b)]:[new C(g,1-c),new C(k,1-d),new C(m,1-e),new C(p,1-b)]}};Qc.prototype=Object.create(N.prototype); -Qc.prototype.constructor=Qc;$b.prototype=Object.create(Ga.prototype);$b.prototype.constructor=$b;Rc.prototype=Object.create(N.prototype);Rc.prototype.constructor=Rc;ob.prototype=Object.create(D.prototype);ob.prototype.constructor=ob;Sc.prototype=Object.create(N.prototype);Sc.prototype.constructor=Sc;ac.prototype=Object.create(D.prototype);ac.prototype.constructor=ac;Tc.prototype=Object.create(N.prototype);Tc.prototype.constructor=Tc;bc.prototype=Object.create(D.prototype);bc.prototype.constructor= -bc;cc.prototype=Object.create(N.prototype);cc.prototype.constructor=cc;dc.prototype=Object.create(D.prototype);dc.prototype.constructor=dc;ec.prototype=Object.create(D.prototype);ec.prototype.constructor=ec;pb.prototype=Object.create(N.prototype);pb.prototype.constructor=pb;Sa.prototype=Object.create(D.prototype);Sa.prototype.constructor=Sa;Uc.prototype=Object.create(pb.prototype);Uc.prototype.constructor=Uc;Vc.prototype=Object.create(Sa.prototype);Vc.prototype.constructor=Vc;Wc.prototype=Object.create(N.prototype); -Wc.prototype.constructor=Wc;fc.prototype=Object.create(D.prototype);fc.prototype.constructor=fc;var Ca=Object.freeze({WireframeGeometry:Sb,ParametricGeometry:Hc,ParametricBufferGeometry:Tb,TetrahedronGeometry:Jc,TetrahedronBufferGeometry:Ub,OctahedronGeometry:Kc,OctahedronBufferGeometry:nb,IcosahedronGeometry:Lc,IcosahedronBufferGeometry:Vb,DodecahedronGeometry:Mc,DodecahedronBufferGeometry:Wb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:qa,TubeGeometry:Nc,TubeBufferGeometry:Xb,TorusKnotGeometry:Oc, -TorusKnotBufferGeometry:Yb,TorusGeometry:Pc,TorusBufferGeometry:Zb,TextGeometry:Qc,TextBufferGeometry:$b,SphereGeometry:Rc,SphereBufferGeometry:ob,RingGeometry:Sc,RingBufferGeometry:ac,PlaneGeometry:Ac,PlaneBufferGeometry:kb,LatheGeometry:Tc,LatheBufferGeometry:bc,ShapeGeometry:cc,ShapeBufferGeometry:dc,ExtrudeGeometry:$a,ExtrudeBufferGeometry:Ga,EdgesGeometry:ec,ConeGeometry:Uc,ConeBufferGeometry:Vc,CylinderGeometry:pb,CylinderBufferGeometry:Sa,CircleGeometry:Wc,CircleBufferGeometry:fc,BoxGeometry:Lb, -BoxBufferGeometry:jb});gc.prototype=Object.create(Q.prototype);gc.prototype.constructor=gc;gc.prototype.isShadowMaterial=!0;hc.prototype=Object.create(oa.prototype);hc.prototype.constructor=hc;hc.prototype.isRawShaderMaterial=!0;Ma.prototype=Object.create(Q.prototype);Ma.prototype.constructor=Ma;Ma.prototype.isMeshStandardMaterial=!0;Ma.prototype.copy=function(a){Q.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness; -this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap; -this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};qb.prototype=Object.create(Ma.prototype);qb.prototype.constructor=qb;qb.prototype.isMeshPhysicalMaterial= -!0;qb.prototype.copy=function(a){Ma.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ia.prototype=Object.create(Q.prototype);Ia.prototype.constructor=Ia;Ia.prototype.isMeshPhongMaterial=!0;Ia.prototype.copy=function(a){Q.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= -a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine= -a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};rb.prototype=Object.create(Ia.prototype);rb.prototype.constructor=rb;rb.prototype.isMeshToonMaterial=!0;rb.prototype.copy=function(a){Ia.prototype.copy.call(this, -a);this.gradientMap=a.gradientMap;return this};sb.prototype=Object.create(Q.prototype);sb.prototype.constructor=sb;sb.prototype.isMeshNormalMaterial=!0;sb.prototype.copy=function(a){Q.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth; -this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};tb.prototype=Object.create(Q.prototype);tb.prototype.constructor=tb;tb.prototype.isMeshLambertMaterial=!0;tb.prototype.copy=function(a){Q.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity= -a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};ub.prototype=Object.create(O.prototype);ub.prototype.constructor= -ub;ub.prototype.isLineDashedMaterial=!0;ub.prototype.copy=function(a){O.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var tg=Object.freeze({ShadowMaterial:gc,SpriteMaterial:Za,RawShaderMaterial:hc,ShaderMaterial:oa,PointsMaterial:Ba,MeshPhysicalMaterial:qb,MeshStandardMaterial:Ma,MeshPhongMaterial:Ia,MeshToonMaterial:rb,MeshNormalMaterial:sb,MeshLambertMaterial:tb,MeshDepthMaterial:Wa,MeshDistanceMaterial:Xa,MeshBasicMaterial:va,LineDashedMaterial:ub, -LineBasicMaterial:O,Material:Q}),jd={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},wa=new Yd,Ta={};Object.assign(Ja.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=jd.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)}, -0),f;if(void 0!==Ta[a])Ta[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2],g=g[3],g=window.decodeURIComponent(g);h&&(g=window.atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":for(var l=new Uint8Array(g.length),h=0;h=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=T.arraySlice(c,e,f),this.values=T.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrackPrototype: Invalid value size in track.",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("THREE.KeyframeTrackPrototype: Track is empty.", -this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrackPrototype: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrackPrototype: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&T.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrackPrototype: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a, -b,c=this.times,d=this.values,e=this.getValueSize(),f=2302===this.getInterpolation(),g=1,h=c.length-1,k=1;kg;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;ca?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new p;return function(b){var c= +a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new p,b=new p,c=new p;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),n=c.lengthSq(),p=Math.abs(1-k*k);if(0=-r?e<=r?(h=1/p,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+n):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):e<=-r?(d=Math.max(0,-(-k*h+m)),e=0b)return null;b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)? +0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y- +f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a=new p;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new p,b=new p,c=new p,d=new p;return function(e,f,g,h,k){b.subVectors(f, +e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}}); +Object.assign(Nb.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){return(a||new p).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new p).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, +at:function(a,b){b=b||new p;return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new p,b=new p;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=Q.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new p;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a); +return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});Object.assign(Za,{normal:function(){var a=new p;return function(b,c,d,e){e=e||new p;e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=b.x+b.y}}()});Object.assign(Za.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)}, +copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new p,b=new p;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new p).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return Za.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new Ea).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return Za.barycoordFromPoint(a, +this.a,this.b,this.c,b)},containsPoint:function(a){return Za.containsPoint(a,this.a,this.b,this.c)},closestPointToPoint:function(){var a=new Ea,b=[new Nb,new Nb,new Nb],c=new p,d=new p;return function(e,f){f=f||new p;var g=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))f.copy(c);else for(b[0].set(this.a,this.b),b[1].set(this.b,this.c),b[2].set(this.c,this.a),e=0;ec.far?null:{distance:b, +point:z.clone(),object:a}}function c(c,d,e,f,m,l,q,n){g.fromBufferAttribute(f,l);h.fromBufferAttribute(f,q);k.fromBufferAttribute(f,n);if(c=b(c,c.material,d,e,g,h,k,w))m&&(u.fromBufferAttribute(m,l),r.fromBufferAttribute(m,q),t.fromBufferAttribute(m,n),c.uv=a(w,g,h,k,u,r,t)),c.face=new Ya(l,q,n,Za.normal(g,h,k)),c.faceIndex=l;return c}var d=new O,e=new sb,f=new Ia,g=new p,h=new p,k=new p,m=new p,l=new p,n=new p,u=new D,r=new D,t=new D,v=new p,w=new p,z=new p;return function(q,p){var v=this.geometry, +z=this.material,y=this.matrixWorld;if(void 0!==z&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(y),!1!==q.ray.intersectsSphere(f)&&(d.getInverse(y),e.copy(q.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox)))){var x;if(v.isBufferGeometry){var z=v.index,B=v.attributes.position,y=v.attributes.uv,D;if(null!==z){var C=0;for(D=z.count;Cf||(f=d.ray.origin.distanceTo(a),fd.far||e.push({distance:f,point:a.clone(),face:null,object:this}))}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}}); +Dc.prototype=Object.assign(Object.create(x.prototype),{constructor:Dc,copy:function(a){x.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break; +for(;ef||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),ud.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}));else for(g=0,v=r.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),ud.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),ud.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld), +index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});X.prototype=Object.assign(Object.create(sa.prototype),{constructor:X,isLineSegments:!0});yd.prototype=Object.assign(Object.create(sa.prototype),{constructor:yd,isLineLoop:!0});Ka.prototype=Object.create(P.prototype);Ka.prototype.constructor=Ka;Ka.prototype.isPointsMaterial=!0;Ka.prototype.copy=function(a){P.prototype.copy.call(this,a);this.color.copy(a.color); +this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Rb.prototype=Object.assign(Object.create(x.prototype),{constructor:Rb,isPoints:!0,raycast:function(){var a=new O,b=new sb,c=new Ia;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:h,distanceToRay:Math.sqrt(f),point:a.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry, +k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var m=m/((this.scale.x+this.scale.y+this.scale.z)/3),l=m*m,m=new p;if(h.isBufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var u=n.array,n=0,r=u.length;n=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Sb.prototype=Object.create(U.prototype);Sb.prototype.constructor=Sb;Sb.prototype.isCompressedTexture= +!0;Gc.prototype=Object.create(U.prototype);Gc.prototype.constructor=Gc;Gc.prototype.isDepthTexture=!0;Tb.prototype=Object.create(E.prototype);Tb.prototype.constructor=Tb;Hc.prototype=Object.create(L.prototype);Hc.prototype.constructor=Hc;Ub.prototype=Object.create(E.prototype);Ub.prototype.constructor=Ub;Ic.prototype=Object.create(L.prototype);Ic.prototype.constructor=Ic;ja.prototype=Object.create(E.prototype);ja.prototype.constructor=ja;Jc.prototype=Object.create(L.prototype);Jc.prototype.constructor= +Jc;Vb.prototype=Object.create(ja.prototype);Vb.prototype.constructor=Vb;Kc.prototype=Object.create(L.prototype);Kc.prototype.constructor=Kc;ub.prototype=Object.create(ja.prototype);ub.prototype.constructor=ub;Lc.prototype=Object.create(L.prototype);Lc.prototype.constructor=Lc;Wb.prototype=Object.create(ja.prototype);Wb.prototype.constructor=Wb;Mc.prototype=Object.create(L.prototype);Mc.prototype.constructor=Mc;Xb.prototype=Object.create(ja.prototype);Xb.prototype.constructor=Xb;Nc.prototype=Object.create(L.prototype); +Nc.prototype.constructor=Nc;Yb.prototype=Object.create(E.prototype);Yb.prototype.constructor=Yb;Oc.prototype=Object.create(L.prototype);Oc.prototype.constructor=Oc;Zb.prototype=Object.create(E.prototype);Zb.prototype.constructor=Zb;Pc.prototype=Object.create(L.prototype);Pc.prototype.constructor=Pc;$b.prototype=Object.create(E.prototype);$b.prototype.constructor=$b;var Lg={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=bf(a,0,e,c,!0),g=[];if(!f)return g;var h;if(d){var k= +c,d=[],m;var l=0;for(m=b.length;l80*c){var r=h=a[0];var t=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-r,d-t);h=0!==h?1/h:0}Sc(f,g,c,r,t,h);return g}},$a={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e$a.area(a)},triangulateShape:function(a,b){function c(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new D(f, +d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new D(f/e,d/e)}function e(a,b){for(G=a.length;0<=--G;){var c=G;var d=G-1;0>d&&(d=a.length-1);var e,f=x+2*w;for(e=0;eMath.abs(g-k)?[new D(a,1-c),new D(h,1-d),new D(m,1-e),new D(n,1-b)]:[new D(g,1-c),new D(k,1-d),new D(l,1-e),new D(p,1-b)]}};Uc.prototype=Object.create(L.prototype);Uc.prototype.constructor= +Uc;ac.prototype=Object.create(La.prototype);ac.prototype.constructor=ac;Vc.prototype=Object.create(L.prototype);Vc.prototype.constructor=Vc;wb.prototype=Object.create(E.prototype);wb.prototype.constructor=wb;Wc.prototype=Object.create(L.prototype);Wc.prototype.constructor=Wc;bc.prototype=Object.create(E.prototype);bc.prototype.constructor=bc;Xc.prototype=Object.create(L.prototype);Xc.prototype.constructor=Xc;cc.prototype=Object.create(E.prototype);cc.prototype.constructor=cc;xb.prototype=Object.create(L.prototype); +xb.prototype.constructor=xb;xb.prototype.toJSON=function(){var a=L.prototype.toJSON.call(this);return ff(this.parameters.shapes,a)};yb.prototype=Object.create(E.prototype);yb.prototype.constructor=yb;yb.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);return ff(this.parameters.shapes,a)};dc.prototype=Object.create(E.prototype);dc.prototype.constructor=dc;zb.prototype=Object.create(L.prototype);zb.prototype.constructor=zb;ab.prototype=Object.create(E.prototype);ab.prototype.constructor= +ab;Yc.prototype=Object.create(zb.prototype);Yc.prototype.constructor=Yc;Zc.prototype=Object.create(ab.prototype);Zc.prototype.constructor=Zc;$c.prototype=Object.create(L.prototype);$c.prototype.constructor=$c;ec.prototype=Object.create(E.prototype);ec.prototype.constructor=ec;var ka=Object.freeze({WireframeGeometry:Tb,ParametricGeometry:Hc,ParametricBufferGeometry:Ub,TetrahedronGeometry:Jc,TetrahedronBufferGeometry:Vb,OctahedronGeometry:Kc,OctahedronBufferGeometry:ub,IcosahedronGeometry:Lc,IcosahedronBufferGeometry:Wb, +DodecahedronGeometry:Mc,DodecahedronBufferGeometry:Xb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:ja,TubeGeometry:Nc,TubeBufferGeometry:Yb,TorusKnotGeometry:Oc,TorusKnotBufferGeometry:Zb,TorusGeometry:Pc,TorusBufferGeometry:$b,TextGeometry:Uc,TextBufferGeometry:ac,SphereGeometry:Vc,SphereBufferGeometry:wb,RingGeometry:Wc,RingBufferGeometry:bc,PlaneGeometry:Ac,PlaneBufferGeometry:rb,LatheGeometry:Xc,LatheBufferGeometry:cc,ShapeGeometry:xb,ShapeBufferGeometry:yb,ExtrudeGeometry:ib,ExtrudeBufferGeometry:La, +EdgesGeometry:dc,ConeGeometry:Yc,ConeBufferGeometry:Zc,CylinderGeometry:zb,CylinderBufferGeometry:ab,CircleGeometry:$c,CircleBufferGeometry:ec,BoxGeometry:Mb,BoxBufferGeometry:qb});fc.prototype=Object.create(P.prototype);fc.prototype.constructor=fc;fc.prototype.isShadowMaterial=!0;gc.prototype=Object.create(Fa.prototype);gc.prototype.constructor=gc;gc.prototype.isRawShaderMaterial=!0;Ua.prototype=Object.create(P.prototype);Ua.prototype.constructor=Ua;Ua.prototype.isMeshStandardMaterial=!0;Ua.prototype.copy= +function(a){P.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale); +this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets= +a.morphTargets;this.morphNormals=a.morphNormals;return this};Ab.prototype=Object.create(Ua.prototype);Ab.prototype.constructor=Ab;Ab.prototype.isMeshPhysicalMaterial=!0;Ab.prototype.copy=function(a){Ua.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ma.prototype=Object.create(P.prototype);Ma.prototype.constructor=Ma;Ma.prototype.isMeshPhongMaterial=!0;Ma.prototype.copy=function(a){P.prototype.copy.call(this, +a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale= +a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Bb.prototype= +Object.create(Ma.prototype);Bb.prototype.constructor=Bb;Bb.prototype.isMeshToonMaterial=!0;Bb.prototype.copy=function(a){Ma.prototype.copy.call(this,a);this.gradientMap=a.gradientMap;return this};Cb.prototype=Object.create(P.prototype);Cb.prototype.constructor=Cb;Cb.prototype.isMeshNormalMaterial=!0;Cb.prototype.copy=function(a){P.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap; +this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Db.prototype=Object.create(P.prototype);Db.prototype.constructor=Db;Db.prototype.isMeshLambertMaterial=!0;Db.prototype.copy=function(a){P.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin; +this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Eb.prototype=Object.create(W.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isLineDashedMaterial=!0;Eb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Mg=Object.freeze({ShadowMaterial:fc,SpriteMaterial:hb,RawShaderMaterial:gc,ShaderMaterial:Fa,PointsMaterial:Ka,MeshPhysicalMaterial:Ab,MeshStandardMaterial:Ua, +MeshPhongMaterial:Ma,MeshToonMaterial:Bb,MeshNormalMaterial:Cb,MeshLambertMaterial:Db,MeshDepthMaterial:eb,MeshDistanceMaterial:fb,MeshBasicMaterial:Aa,LineDashedMaterial:Eb,LineBasicMaterial:W,Material:P}),Ib={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},xa=new he,cb={};Object.assign(Na.prototype,{load:function(a,b,c,d){void 0===a&&(a= +"");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Ib.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==cb[a])cb[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2],g=g[3],g=window.decodeURIComponent(g);h&&(g=window.atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":for(var m=new Uint8Array(g.length), +h=0;hg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(Q.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g, +c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(Q.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);Ee.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);Fe.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);Ge.initNonuniformCatmullRom(f.z, +g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(Ee.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),Fe.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),Ge.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(Ee.calc(a),Fe.calc(a),Ge.calc(a));return b};ca.prototype.copy=function(a){C.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1],c=c[a>c.length-3?c.length-1:a+2];b.set(hf(d,e.x,f.x, +g.x,c.x),hf(d,e.y,f.y,g.y,c.y));return b};Ra.prototype.copy=function(a){C.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[], +b=0,c=0,d=this.curves.length;c=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ga.arraySlice(c,e,f),this.values=ga.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times,b=this.values, +d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ga.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f, +d);a=!1;break}return a},optimize:function(){for(var a,b,c=this.times,d=this.values,e=this.getValueSize(),f=2302===this.getInterpolation(),g=1,h=c.length-1,k=1;kl.opacity&&(l.transparent=!0);d.setTextures(k);return d.parse(l)}}()});Object.assign(be.prototype, -{load:function(a,b,c,d){var e=this,f=this.texturePath&&"string"===typeof this.texturePath?this.texturePath:kc.prototype.extractUrlBase(a),g=new Ja(this.manager);g.setWithCredentials(this.withCredentials);g.load(a,function(c){c=JSON.parse(c);var d=c.metadata;if(void 0!==d&&(d=d.type,void 0!==d)){if("object"===d.toLowerCase()){console.error("THREE.JSONLoader: "+a+" should be loaded with THREE.ObjectLoader instead.");return}if("scene"===d.toLowerCase()){console.error("THREE.JSONLoader: "+a+" should be loaded with THREE.SceneLoader instead."); -return}}c=e.parse(c,f);b(c.geometry,c.materials)},c,d)},setTexturePath:function(a){this.texturePath=a},parse:function(){return function(a,b){void 0!==a.data&&(a=a.data);a.scale=void 0!==a.scale?1/a.scale:1;var c=new N,d=a,e,f,g,h=d.faces;var k=d.vertices;var l=d.normals,m=d.colors;var n=d.scale;var t=0;if(void 0!==d.uvs){for(e=0;ef;f++){var B=h[r++];var A=y[2*B];B=y[2*B+1];A=new C(A,B);2!==f&&c.faceVertexUvs[e][v].push(A);0!==f&&c.faceVertexUvs[e][v+1].push(A)}}w&&(w=3* -h[r++],u.normal.set(l[w++],l[w++],l[w]),z.normal.copy(u.normal));if(x)for(e=0;4>e;e++)w=3*h[r++],x=new p(l[w++],l[w++],l[w]),2!==e&&u.vertexNormals.push(x),0!==e&&z.vertexNormals.push(x);n&&(n=h[r++],n=m[n],u.color.setHex(n),z.color.setHex(n));if(k)for(e=0;4>e;e++)n=h[r++],n=m[n],2!==e&&u.vertexColors.push(new H(n)),0!==e&&z.vertexColors.push(new H(n));c.faces.push(u);c.faces.push(z)}else{u=new Pa;u.a=h[r++];u.b=h[r++];u.c=h[r++];v&&(v=h[r++],u.materialIndex=v);v=c.faces.length;if(e)for(e=0;ef;f++)B=h[r++],A=y[2*B],B=y[2*B+1],A=new C(A,B),c.faceVertexUvs[e][v].push(A);w&&(w=3*h[r++],u.normal.set(l[w++],l[w++],l[w]));if(x)for(e=0;3>e;e++)w=3*h[r++],x=new p(l[w++],l[w++],l[w]),u.vertexNormals.push(x);n&&(n=h[r++],u.color.setHex(m[n]));if(k)for(e=0;3>e;e++)n=h[r++],u.vertexColors.push(new H(m[n]));c.faces.push(u)}}d=a;r=void 0!==d.influencesPerVertex?d.influencesPerVertex:2;if(d.skinWeights)for(g=0,h=d.skinWeights.length;gg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(R.clamp(d[k- -1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(R.clamp(e[0].dot(e[a]),-1,1)),c/=a,0=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate= -!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cd;)d+=c;for(;d>c;)d-=c;dc.length-2?c.length-1:a+1],c=c[a>c.length-3?c.length-1:a+2];b.set(Se(d, -e.x,f.x,g.x,c.x),Se(d,e.y,f.y,g.y,c.y));return b};ab.prototype.copy=function(a){S.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<= -a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Ha.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Cb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints()),k=a?!k:k;h=[];var l=[],m=[],n=0;l[n]=void 0;m[n]=[];for(var p=0,r=f.length;pd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d= -0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){Z.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(Ve.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_, -c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(na,{Composite:Ve,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new na.Composite(a,b,c):new na(a,b,c)},sanitizeNodeName:function(a){return a.replace(/\s/g,"_").replace(/[^\w-]/g,"")},parseTrackName:function(){var a=new RegExp("^"+/((?:[\w-]+[\/:])*)/.source+/([\w-\.]+)?/.source+/(?:\.([\w-]+)(?:\[(.+)\])?)?/.source+/\.([\w-]+)(?:\[(.+)\])?/.source+ -"$"),b=["material","materials","bones"];return function(c){var d=a.exec(c);if(!d)throw Error("PropertyBinding: Cannot parse trackName: "+c);var d={nodeName:d[2],objectName:d[3],objectIndex:d[4],propertyName:d[5],propertyIndex:d[6]},e=d.nodeName&&d.nodeName.lastIndexOf(".");if(void 0!==e&&-1!==e){var f=d.nodeName.substring(e+1);-1!==b.indexOf(f)&&(d.nodeName=d.nodeName.substring(0,e),d.objectName=f)}if(null===d.propertyName||0===d.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+ -c);return d}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=function(a){for(var c=0;c=b){var m=b++,n=a[m];c[n.uuid]=l;a[l]=n;c[k]=m;a[m]=h;h=0;for(k=e;h!==k;++h){var n=d[h],p= -n[l];n[l]=n[m];n[m]=p}}}this.nCachedObjects_=b},uncache:function(){for(var a,b,c=this._objects,d=c.length,e=this.nCachedObjects_,f=this._indicesByUUID,g=this._bindings,h=g.length,k=0,l=arguments.length;k!==l;++k){b=arguments[k].uuid;var m=f[b];if(void 0!==m)if(delete f[b],mb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0], -b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{d=2202===d; --1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,d)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time= -b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Object.assign(Ye.prototype,ja.prototype, -{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],m=l.name,n=k[m];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,m));continue}n=new je(na.create(c,m,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName,l.getValueSize());++n.referenceCount;this._addInactiveBinding(n, -g,m)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings, -c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length}, -get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&aMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.lookAt(this.plane.normal);A.prototype.updateMatrixWorld.call(this,a)};var Ld,pe;Eb.prototype=Object.create(A.prototype);Eb.prototype.constructor=Eb;Eb.prototype.setDirection=function(){var a=new p,b;return function(c){.99999c.y?this.quaternion.set(1, -0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Eb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Eb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};hd.prototype=Object.create(ca.prototype);hd.prototype.constructor=hd;var Nd=new p, -te=new qe,ue=new qe,ve=new qe;ya.prototype=Object.create(S.prototype);ya.prototype.constructor=ya;ya.prototype.isCatmullRomCurve3=!0;ya.prototype.getPoint=function(a,b){b=b||new p;var c=this.points,d=c.length;a*=d-(this.closed?0:1);var e=Math.floor(a);a-=e;this.closed?e+=0e&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);te.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);ue.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);ve.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(te.initCatmullRom(f.x,g.x,h.x, -c.x,this.tension),ue.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),ve.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(te.calc(a),ue.calc(a),ve.calc(a));return b};ya.prototype.copy=function(a){S.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bm.opacity&&(m.transparent=!0);d.setTextures(k);return d.parse(m)}}()});var He={decodeText:function(a){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(a);for(var b="",c=0,d=a.length;cf;f++){var A=h[r++]; +var B=x[2*A];A=x[2*A+1];B=new D(B,A);2!==f&&c.faceVertexUvs[e][v].push(B);0!==f&&c.faceVertexUvs[e][v+1].push(B)}}w&&(w=3*h[r++],t.normal.set(m[w++],m[w++],m[w]),y.normal.copy(t.normal));if(z)for(e=0;4>e;e++)w=3*h[r++],z=new p(m[w++],m[w++],m[w]),2!==e&&t.vertexNormals.push(z),0!==e&&y.vertexNormals.push(z);n&&(n=h[r++],n=l[n],t.color.setHex(n),y.color.setHex(n));if(k)for(e=0;4>e;e++)n=h[r++],n=l[n],2!==e&&t.vertexColors.push(new H(n)),0!==e&&y.vertexColors.push(new H(n));c.faces.push(t);c.faces.push(y)}else{t= +new Ya;t.a=h[r++];t.b=h[r++];t.c=h[r++];v&&(v=h[r++],t.materialIndex=v);v=c.faces.length;if(e)for(e=0;ef;f++)A=h[r++],B=x[2*A],A=x[2*A+1],B=new D(B,A),c.faceVertexUvs[e][v].push(B);w&&(w=3*h[r++],t.normal.set(m[w++],m[w++],m[w]));if(z)for(e=0;3>e;e++)w=3*h[r++],z=new p(m[w++],m[w++],m[w]),t.vertexNormals.push(z);n&&(n=h[r++],t.color.setHex(l[n]));if(k)for(e=0;3>e;e++)n=h[r++],t.vertexColors.push(new H(l[n]));c.faces.push(t)}}d=a;r=void 0!==d.influencesPerVertex? +d.influencesPerVertex:2;if(d.skinWeights)for(g=0,h=d.skinWeights.length;gNumber.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=$a.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1=== +f.length){var g=f[0];var h=new jb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints()),k=a?!k:k;h=[];var m=[],l=[],n=0;m[n]=void 0;l[n]=[];for(var p=0,r=f.length;pd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}}, +saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){ha.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(mf.prototype,{getValue:function(a, +b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(qa,{Composite:mf,create:function(a, +b,c){return a&&a.isAnimationObjectGroup?new qa.Composite(a,b,c):new qa(a,b,c)},sanitizeNodeName:function(a){return a.replace(/\s/g,"_").replace(/[^\w-]/g,"")},parseTrackName:function(){var a=new RegExp("^"+/((?:[\w-]+[\/:])*)/.source+/([\w-\.]+)?/.source+/(?:\.([\w-]+)(?:\[(.+)\])?)?/.source+/\.([\w-]+)(?:\[(.+)\])?/.source+"$"),b=["material","materials","bones"];return function(c){var d=a.exec(c);if(!d)throw Error("PropertyBinding: Cannot parse trackName: "+c);var d={nodeName:d[2],objectName:d[3], +objectIndex:d[4],propertyName:d[5],propertyIndex:d[6]},e=d.nodeName&&d.nodeName.lastIndexOf(".");if(void 0!==e&&-1!==e){var f=d.nodeName.substring(e+1);-1!==b.indexOf(f)&&(d.nodeName=d.nodeName.substring(0,e),d.objectName=f)}if(null===d.propertyName||0===d.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+c);return d}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=function(a){for(var c= +0;c=b){var l=b++,n=a[l];c[n.uuid]=m;a[m]=n;c[k]=l;a[l]=h;h=0;for(k=e;h!==k;++h){var n=d[h],p=n[m];n[m]=n[l];n[l]=p}}}this.nCachedObjects_=b},uncache:function(){for(var a,b,c=this._objects,d=c.length,e=this.nCachedObjects_,f=this._indicesByUUID,g=this._bindings,h=g.length,k=0,m=arguments.length;k!==m;++k){b=arguments[k].uuid;var l= +f[b];if(void 0!==l)if(delete f[b],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200=== +d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,d)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a, +b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});we.prototype=Object.assign(Object.create(za.prototype),{constructor:we,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m= +d[h],l=m.name,n=k[l];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,l));continue}n=new ve(qa.create(c,l,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,l)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a, +d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip= +{};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex; +return null!==a&&aMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.lookAt(this.plane.normal); +x.prototype.updateMatrixWorld.call(this,a)};var Sd,Ce;Hb.prototype=Object.create(x.prototype);Hb.prototype.constructor=Hb;Hb.prototype.setDirection=function(){var a=new p,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Hb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix(); +this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Hb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};nd.prototype=Object.create(X.prototype);nd.prototype.constructor=nd;C.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(C.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(bb.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); +a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new L,c=0,d=a.length;c Date: Thu, 21 May 2020 21:01:16 +0300 Subject: [PATCH 04/47] docs: switch lpe and ekf2 settings in aruco map navigation articles --- docs/en/aruco_map.md | 14 +++++++------- docs/ru/aruco_map.md | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/en/aruco_map.md b/docs/en/aruco_map.md index e915c7c9..a873b27e 100644 --- a/docs/en/aruco_map.md +++ b/docs/en/aruco_map.md @@ -91,13 +91,6 @@ The marker map adheres to the [ROS coordinate system convention](http://www.ros. In order to enable vision position estimation you should use the following [PX4 parameters](px4_parameters.md). -If you're using **EKF2** estimator (`SYS_MC_EST_GROUP` parameter is set to `ekf2`), make sure the following is set: - -* `EKF2_AID_MASK` should have `vision position fusion` and `vision yaw fusion` flags set. -* Vision angle observations noise: `EKF2_EVA_NOISE` = 0.1 rad. -* Vision position observations noise: `EKF2_EVP_NOISE` = 0.1 m. -* `EKF2_EV_DELAY` = 0. - If you're using **LPE** (`SYS_MC_EST_GROUP` parameter is set to `local_position_estimator,attitude_estimator_q`): * `LPE_FUSION` should have `vision position` and `land detector` flags set. We suggest unsetting the `baro` flag for indoor flights. @@ -108,6 +101,13 @@ If you're using **LPE** (`SYS_MC_EST_GROUP` parameter is set to `local_position_ +If you're using **EKF2** estimator (`SYS_MC_EST_GROUP` parameter is set to `ekf2`), make sure the following is set: + +* `EKF2_AID_MASK` should have `vision position fusion` and `vision yaw fusion` flags set. +* Vision angle observations noise: `EKF2_EVA_NOISE` = 0.1 rad. +* Vision position observations noise: `EKF2_EVP_NOISE` = 0.1 m. +* `EKF2_EV_DELAY` = 0. + > **Hint** We recommend using **LPE** for marker-based navigation. You may use [the `selfcheck.py` utility](selfcheck.md) to check your settings. diff --git a/docs/ru/aruco_map.md b/docs/ru/aruco_map.md index 04cf68ee..f43a5621 100644 --- a/docs/ru/aruco_map.md +++ b/docs/ru/aruco_map.md @@ -91,23 +91,23 @@ rosrun aruco_pose genmap.py 0.33 2 4 1 1 0 > ~/catkin_ws/src/clover/aruco_pose/m Для работы механизма Vision Position Estimation необходимы следующие [настройки PX4](px4_parameters.md). -При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`): - -* В параметре `EKF2_AID_MASK` включены флажки `vision position fusion`, `vision yaw fusion`. -* Шум угла по зрению: `EKF2_EVA_NOISE` = 0.1 rad -* Шум позиции по зрению: `EKF2_EVP_NOISE` = 0.1 m -* `EKF2_EV_DELAY` = 0 - При использовании **LPE** (параметр `SYS_MC_EST_GROUP` = `local_position_estimator, attitude_estimator_q`): * В параметре `LPE_FUSION` включены флажки `vision position`, `land detector`. Флажок `baro` рекомендуется отключить. * Вес угла по рысканью по зрению: `ATT_W_EXT_HDG` = 0.5 * Включена ориентация по Yaw по зрению: `ATT_EXT_HDG_M` = 1 `Vision`. * Шумы позиции по зрению: `LPE_VIS_XY` = 0.1 m, `LPE_VIS_Z` = 0.1 m. -* `LPE_VIS_DELAY` = 0 sec +* `LPE_VIS_DELAY` = 0 sec. +При использовании **EKF2** (параметр `SYS_MC_EST_GROUP` = `ekf2`): + +* В параметре `EKF2_AID_MASK` включены флажки `vision position fusion`, `vision yaw fusion`. +* Шум угла по зрению: `EKF2_EVA_NOISE` = 0.1 rad. +* Шум позиции по зрению: `EKF2_EVP_NOISE` = 0.1 m. +* `EKF2_EV_DELAY` = 0. + > **Hint** На данный момент для полета по маркерам рекомендуется использование **LPE**. Для проверки правильности всех настроек можно [воспользоваться утилитой `selfcheck.py`](selfcheck.md). From abb495275b071a37c77886d7461ba1ce16381885 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 26 May 2020 06:54:42 +0300 Subject: [PATCH 05/47] docs: translate robocross-2019 article --- docs/en/SUMMARY.md | 1 + docs/en/robocross2019.md | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 docs/en/robocross2019.md diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index c7a5d484..87cddd7c 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -89,4 +89,5 @@ * [Copter Hack 2019](copterhack2019.md) * [Copter Hack 2018](copterhack2018.md) * [Copter Hack 2017](copterhack2017.md) + * [Robocross-2019](robocross2019.md) * [Camera calibration (legacy)](camera_calib.md) diff --git a/docs/en/robocross2019.md b/docs/en/robocross2019.md new file mode 100644 index 00000000..d05b50bb --- /dev/null +++ b/docs/en/robocross2019.md @@ -0,0 +1,25 @@ +# Robocross-2019 + +On July, 2019, for the fourth time in a row, the team Copter Express won the annual tests of unmanned vehicles "[Robocross](http://russianrobotics.ru/activities/robokross-2019/)". Tests are held at the GAZ test site near Nizhny Novgorod. + +The main objective of the tests in the UAV category was to localize and destroy the target - the red balloon - autonomously. + +## Video + + + +## Implementation + +The team used an F450 frame based quadcopter and [Clover software platform](https://github.com/CopterExpress/clover). The final source code is available [on GitHub](https://github.com/CopterExpress/robocross2019/). + +`robocross2019` ROS package is divided into two parts: `red_dead_detection` ROS nodelet recognizes the red ball, `ball.py` implements high-level flight logic. + +## red_dead_detection + +The `red_dead_detection` nodelet recognizes the red ball on the image from the forward looking quadcopter camera (`/front_camera/image_raw` and `/front_camera/camera_info` topics). The simplest method of filtering the image by color is applied. Then the nodelet calculates the geometric center of the detected segments, and performs camera distortion compensation (`cv::undistortPoints`). + +Using the known focal lengths of the camera (from `camera_info`), the nodelet calculates the vector directed towards the target. The resulting vector is published to the topic `/red_dead_detection/direction`; its coordinate system (`frame_id` is associated with the front camera `front_camera_optical`). + +## balloon.py + +To fly towards the ball, the direction vector `red_dead_detection/direction` is used, which is set as a setpoint for the velocity of the drone. The yaw angle is also set towards the ball. The target is considered destroyed when the total area of red pixels is less than the threshold for a certain amount of camera frames. From 69c46786deac6263a061d6ad5ef87dcc4235575c Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Fri, 29 May 2020 21:25:58 +0300 Subject: [PATCH 06/47] builder: Set apt retries to 3 This should lower the number of builds that failed due to repositories being unstable --- builder/image-software.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/builder/image-software.sh b/builder/image-software.sh index 330b8539..a012e037 100755 --- a/builder/image-software.sh +++ b/builder/image-software.sh @@ -57,6 +57,10 @@ my_travis_retry() { return $result } +echo_stamp "Increase apt retries" + +echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries + echo_stamp "Install apt keys & repos" # TODO: This STDOUT consist 'OK' From 98d5d506077dd64348a9d8cfebfe3569758aad3c Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Sat, 30 May 2020 01:57:14 +0300 Subject: [PATCH 07/47] aruco_pose: Prevent OpenCV from crashing (#238) * aruco_pose: Add tests that crash OpenCV * aruco_pose: Don't try to interpolate single points --- aruco_pose/CMakeLists.txt | 3 +- aruco_pose/test/crash_image_01.png | Bin 0 -> 162969 bytes aruco_pose/test/crash_image_02.png | Bin 0 -> 160180 bytes aruco_pose/test/crash_image_03.png | Bin 0 -> 168671 bytes aruco_pose/test/crash_opencv.py | 18 +++++++++ aruco_pose/test/crash_opencv.test | 51 ++++++++++++++++++++++++++ aruco_pose/vendor/aruco/src/aruco.cpp | 2 + 7 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 aruco_pose/test/crash_image_01.png create mode 100644 aruco_pose/test/crash_image_02.png create mode 100644 aruco_pose/test/crash_image_03.png create mode 100644 aruco_pose/test/crash_opencv.py create mode 100644 aruco_pose/test/crash_opencv.test diff --git a/aruco_pose/CMakeLists.txt b/aruco_pose/CMakeLists.txt index cdd55fd4..e72ce8fa 100644 --- a/aruco_pose/CMakeLists.txt +++ b/aruco_pose/CMakeLists.txt @@ -25,7 +25,7 @@ find_package(catkin REQUIRED COMPONENTS ) find_package(OpenCV 3 REQUIRED COMPONENTS core imgproc calib3d) -if ("${OpenCV_VERSION_MINOR}" LESS "3") +if ("${OpenCV_VERSION_MINOR}" LESS "9") message(STATUS "OpenCV version too low, using vendored ArUco package") include(vendor/VendorOpenCV.cmake) else() @@ -229,4 +229,5 @@ if (CATKIN_ENABLE_TESTING) add_rostest(test/test_parser_empty_map.test) add_rostest(test/test_node_failure.test) add_rostest(test/largemap.test) + add_rostest(test/crash_opencv.test) endif() diff --git a/aruco_pose/test/crash_image_01.png b/aruco_pose/test/crash_image_01.png new file mode 100644 index 0000000000000000000000000000000000000000..dc509792c2dec22f91741fa94cd156f203681da8 GIT binary patch literal 162969 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

92bP5mYe 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 literal 0 HcmV?d00001 diff --git a/aruco_pose/test/crash_image_02.png b/aruco_pose/test/crash_image_02.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3753299fa9b1d9bb93551df3266ed6af0fb6c4 GIT binary patch literal 160180 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 + + + + + + + + + %h + + + _sftp-ssh._tcp + 22 + + + diff --git a/builder/image-build.sh b/builder/image-build.sh index fc6f6a03..147daa60 100755 --- a/builder/image-build.sh +++ b/builder/image-build.sh @@ -108,6 +108,8 @@ ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-software ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/examples' '/home/pi/' # network setup ${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} exec ${SCRIPTS_DIR}'/image-network.sh' +# avahi setup +${BUILDER_DIR}/image-chroot.sh ${IMAGE_PATH} copy ${SCRIPTS_DIR}'/assets/avahi-services/sftp-ssh.service' '/etc/avahi/services' # If RPi then use a one thread to build a ROS package on RPi, else use all [[ $(arch) == 'armv7l' ]] && NUMBER_THREADS=1 || NUMBER_THREADS=$(nproc --all) From 66ecbb4d090ea3693dcd186632b7c17af7b65ea6 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Wed, 10 Jun 2020 14:51:13 +0300 Subject: [PATCH 15/47] docs: Update ROS repository keys (en/ru) --- docs/en/ros-install.md | 2 +- docs/ru/ros-install.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/ros-install.md b/docs/en/ros-install.md index e58a86a0..b2632048 100644 --- a/docs/en/ros-install.md +++ b/docs/en/ros-install.md @@ -17,7 +17,7 @@ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main Configure access keys in your system for correct download: ```bash -sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 +sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` Make sure that your packages are up to date: diff --git a/docs/ru/ros-install.md b/docs/ru/ros-install.md index 9af90e42..7dbc52ea 100644 --- a/docs/ru/ros-install.md +++ b/docs/ru/ros-install.md @@ -17,7 +17,7 @@ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main Настройте ключи доступа в своей системе для правильной загрузки: ```bash -sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 +sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` Убедитесь в том, что вы имеете последние версии индексов пакетов: From 3682e253a7ba3fbadd9e5c5228f9f3c866a1ce3c Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 10 Jun 2020 22:40:28 +0300 Subject: [PATCH 16/47] =?UTF-8?q?selfcheck.py:=20don=E2=80=99t=20fall=20wh?= =?UTF-8?q?en=20ROS=5FHOSTNAME=20is=20not=20set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clover/src/selfcheck.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clover/src/selfcheck.py b/clover/src/selfcheck.py index 59defb5d..1a3cddf1 100755 --- a/clover/src/selfcheck.py +++ b/clover/src/selfcheck.py @@ -701,7 +701,7 @@ def check_preflight_status(): @check('Network') def check_network(): - ros_hostname = os.environ.get('ROS_HOSTNAME').strip() + ros_hostname = os.environ.get('ROS_HOSTNAME', '').strip() if not ros_hostname: failure('no ROS_HOSTNAME is set') From 91dd7799efb98672ab70bd176c1ad443b4ee0c0d Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 10 Jun 2020 23:25:57 +0300 Subject: [PATCH 17/47] image: remove unneeded ROS_DISTRO settings from .bashrc --- builder/image-ros.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/builder/image-ros.sh b/builder/image-ros.sh index 9de629fd..a0168566 100755 --- a/builder/image-ros.sh +++ b/builder/image-ros.sh @@ -143,7 +143,6 @@ echo_stamp "Setup ROS environment" cat << EOF >> /home/pi/.bashrc LANG='C.UTF-8' LC_ALL='C.UTF-8' -ROS_DISTRO='melodic' export ROS_HOSTNAME=\`hostname\`.local source /opt/ros/melodic/setup.bash source /home/pi/catkin_ws/devel/setup.bash From c71a46ce9da523a6427abef5a6df1384d07ae2ea Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 11 Jun 2020 16:13:07 +0300 Subject: [PATCH 18/47] Put CATKIN_IGNORE file to some directories --- apps/CATKIN_IGNORE | 0 clover/www/CATKIN_IGNORE | 0 docs/CATKIN_IGNORE | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/CATKIN_IGNORE create mode 100644 clover/www/CATKIN_IGNORE create mode 100644 docs/CATKIN_IGNORE diff --git a/apps/CATKIN_IGNORE b/apps/CATKIN_IGNORE new file mode 100644 index 00000000..e69de29b diff --git a/clover/www/CATKIN_IGNORE b/clover/www/CATKIN_IGNORE new file mode 100644 index 00000000..e69de29b diff --git a/docs/CATKIN_IGNORE b/docs/CATKIN_IGNORE new file mode 100644 index 00000000..e69de29b From bcb7351a905f1bd7e225bb52681d90f8b77e5471 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 13 Jun 2020 02:08:00 +0300 Subject: [PATCH 19/47] roswww_static: infrastructure for web-based Clover plugins (#230) * Package for generating static web sites for ROS * rosstatic: add CMakeLists.txt * rosstatic: utilize rospkg, store static directory in ROS_HOME * rosstatic: default_package param * rosstatic: fix URLs in docs * clover.launch: make clover the default package for www * Unused import * Rename rosstatic to roswww_static * Fixes --- builder/assets/monkey | 2 +- clover/launch/clover.launch | 5 +++ clover/www/index.html | 4 +-- docs/en/javascript.md | 4 +-- docs/ru/javascript.md | 4 +-- roswww_static/CMakeLists.txt | 8 +++++ roswww_static/README.md | 17 ++++++++++ roswww_static/launch/example.launch | 6 ++++ roswww_static/main.py | 40 +++++++++++++++++++++++ roswww_static/package.xml | 49 +++++++++++++++++++++++++++++ 10 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 roswww_static/CMakeLists.txt create mode 100644 roswww_static/README.md create mode 100644 roswww_static/launch/example.launch create mode 100755 roswww_static/main.py create mode 100644 roswww_static/package.xml diff --git a/builder/assets/monkey b/builder/assets/monkey index d52b2e75..f67ca9cf 100644 --- a/builder/assets/monkey +++ b/builder/assets/monkey @@ -20,7 +20,7 @@ # Example: # DocumentRoot /home/krypton/htdocs - DocumentRoot /home/pi/catkin_ws/src/clover/clover/www + DocumentRoot /home/pi/.ros/www # Redirect: # --------- diff --git a/clover/launch/clover.launch b/clover/launch/clover.launch index 97f623dd..41b704ca 100644 --- a/clover/launch/clover.launch +++ b/clover/launch/clover.launch @@ -82,4 +82,9 @@ + + + + + diff --git a/clover/www/index.html b/clover/www/index.html index fe3f0def..2234aefc 100644 --- a/clover/www/index.html +++ b/clover/www/index.html @@ -12,8 +12,8 @@

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 G*#7`{vVXY% literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/07_wirecuts_1.png b/docs/assets/flysky_a8s/07_wirecuts_1.png new file mode 100644 index 0000000000000000000000000000000000000000..816ba73e2b4a8375fa4d33edfbae95ec1a9d9585 GIT binary patch literal 70774 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/08_wirecuts_2.png b/docs/assets/flysky_a8s/08_wirecuts_2.png new file mode 100644 index 0000000000000000000000000000000000000000..18e06f7d7c0b5799c6f7a26fee861889f4e37a67 GIT binary patch literal 65224 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/09_wirecuts_stripped.png b/docs/assets/flysky_a8s/09_wirecuts_stripped.png new file mode 100644 index 0000000000000000000000000000000000000000..847f8100f6621b0208cdce6589d29bb9bdb3622c GIT binary patch literal 66958 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/10_heatshrink.png b/docs/assets/flysky_a8s/10_heatshrink.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa98ce070917f148d004eee0551b089aeaf8e4e GIT binary patch literal 27102 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flysky_a8s/11_solder_scheme.png b/docs/assets/flysky_a8s/11_solder_scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..45164d11f668f572d3e6df108f5a3062de9aa534 GIT binary patch literal 70270 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