8 lines
46 KiB
JavaScript
8 lines
46 KiB
JavaScript
var u0=Object.defineProperty;var u=(C,M)=>{for(var I in M)u0(C,I,{get:M[I],enumerable:!0,configurable:!0,set:(N)=>M[I]=()=>N})};var f={};u(f,{str:()=>{{return mC}},squaredLength:()=>{{return i0}},sqrLen:()=>{{return IM}},sqlerp:()=>{{return WM}},slerp:()=>{{return e}},setAxisAngle:()=>{{return h0}},setAxes:()=>{{return AM}},set:()=>{{return oC}},scale:()=>{{return g0}},rotationTo:()=>{{return QM}},rotateZ:()=>{{return lC}},rotateY:()=>{{return dC}},rotateX:()=>{{return iC}},random:()=>{{return yC}},pow:()=>{{return zC}},normalize:()=>{{return C0}},multiply:()=>{{return q0}},mul:()=>{{return aC}},ln:()=>{{return v0}},lerp:()=>{{return CM}},length:()=>{{return f0}},len:()=>{{return MM}},invert:()=>{{return rC}},identity:()=>{{return gC}},getAxisAngle:()=>{{return nC}},getAngle:()=>{{return fC}},fromValues:()=>{{return bC}},fromMat3:()=>{{return w0}},fromEuler:()=>{{return sC}},exp:()=>{{return p0}},exactEquals:()=>{{return NM}},equals:()=>{{return VM}},dot:()=>{{return n0}},create:()=>{{return a}},copy:()=>{{return uC}},conjugate:()=>{{return xC}},clone:()=>{{return eC}},calculateW:()=>{{return cC}},add:()=>{{return tC}}});var F=0.000001,k=typeof Float32Array!=="undefined"?Float32Array:Array,n=Math.random,AI=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var C=0,M=arguments.length;while(M--)C+=arguments[M]*arguments[M];return Math.sqrt(C)};function X0(){var C=new k(9);if(k!=Float32Array)C[1]=0,C[2]=0,C[3]=0,C[5]=0,C[6]=0,C[7]=0;return C[0]=1,C[4]=1,C[8]=1,C}var d={};u(d,{zero:()=>{{return FC}},transformQuat:()=>{{return HC}},transformMat4:()=>{{return PC}},transformMat3:()=>{{return LC}},subtract:()=>{{return Z0}},sub:()=>{{return _C}},str:()=>{{return OC}},squaredLength:()=>{{return L0}},squaredDistance:()=>{{return P0}},sqrLen:()=>{{return qC}},sqrDist:()=>{{return hC}},set:()=>{{return CC}},scaleAndAdd:()=>{{return EC}},scale:()=>{{return AC}},round:()=>{{return WC}},rotateZ:()=>{{return GC}},rotateY:()=>{{return DC}},rotateX:()=>{{return JC}},random:()=>{{return KC}},normalize:()=>{{return o}},negate:()=>{{return XC}},multiply:()=>{{return $0}},mul:()=>{{return TC}},min:()=>{{return VC}},max:()=>{{return QC}},lerp:()=>{{return ZC}},length:()=>{{return Y0}},len:()=>{{return t}},inverse:()=>{{return YC}},hermite:()=>{{return $C}},fromValues:()=>{{return s}},forEach:()=>{{return pC}},floor:()=>{{return NC}},exactEquals:()=>{{return RC}},equals:()=>{{return kC}},dot:()=>{{return m}},divide:()=>{{return B0}},div:()=>{{return jC}},distance:()=>{{return K0}},dist:()=>{{return SC}},cross:()=>{{return r}},create:()=>{{return x}},copy:()=>{{return a0}},clone:()=>{{return t0}},ceil:()=>{{return IC}},bezier:()=>{{return BC}},angle:()=>{{return UC}},add:()=>{{return MC}}});function x(){var C=new k(3);if(k!=Float32Array)C[0]=0,C[1]=0,C[2]=0;return C}function t0(C){var M=new k(3);return M[0]=C[0],M[1]=C[1],M[2]=C[2],M}function Y0(C){var M=C[0],I=C[1],N=C[2];return Math.hypot(M,I,N)}function s(C,M,I){var N=new k(3);return N[0]=C,N[1]=M,N[2]=I,N}function a0(C,M){return C[0]=M[0],C[1]=M[1],C[2]=M[2],C}function CC(C,M,I,N){return C[0]=M,C[1]=I,C[2]=N,C}function MC(C,M,I){return C[0]=M[0]+I[0],C[1]=M[1]+I[1],C[2]=M[2]+I[2],C}function Z0(C,M,I){return C[0]=M[0]-I[0],C[1]=M[1]-I[1],C[2]=M[2]-I[2],C}function $0(C,M,I){return C[0]=M[0]*I[0],C[1]=M[1]*I[1],C[2]=M[2]*I[2],C}function B0(C,M,I){return C[0]=M[0]/I[0],C[1]=M[1]/I[1],C[2]=M[2]/I[2],C}function IC(C,M){return C[0]=Math.ceil(M[0]),C[1]=Math.ceil(M[1]),C[2]=Math.ceil(M[2]),C}function NC(C,M){return C[0]=Math.floor(M[0]),C[1]=Math.floor(M[1]),C[2]=Math.floor(M[2]),C}function VC(C,M,I){return C[0]=Math.min(M[0],I[0]),C[1]=Math.min(M[1],I[1]),C[2]=Math.min(M[2],I[2]),C}function QC(C,M,I){return C[0]=Math.max(M[0],I[0]),C[1]=Math.max(M[1],I[1]),C[2]=Math.max(M[2],I[2]),C}function WC(C,M){return C[0]=Math.round(M[0]),C[1]=Math.round(M[1]),C[2]=Math.round(M[2]),C}function AC(C,M,I){return C[0]=M[0]*I,C[1]=M[1]*I,C[2]=M[2]*I,C}function EC(C,M,I,N){return C[0]=M[0]+I[0]*N,C[1]=M[1]+I[1]*N,C[2]=M[2]+I[2]*N,C}function K0(C,M){var I=M[0]-C[0],N=M[1]-C[1],V=M[2]-C[2];return Math.hypot(I,N,V)}function P0(C,M){var I=M[0]-C[0],N=M[1]-C[1],V=M[2]-C[2];return I*I+N*N+V*V}function L0(C){var M=C[0],I=C[1],N=C[2];return M*M+I*I+N*N}function XC(C,M){return C[0]=-M[0],C[1]=-M[1],C[2]=-M[2],C}function YC(C,M){return C[0]=1/M[0],C[1]=1/M[1],C[2]=1/M[2],C}function o(C,M){var I=M[0],N=M[1],V=M[2],Q=I*I+N*N+V*V;if(Q>0)Q=1/Math.sqrt(Q);return C[0]=M[0]*Q,C[1]=M[1]*Q,C[2]=M[2]*Q,C}function m(C,M){return C[0]*M[0]+C[1]*M[1]+C[2]*M[2]}function r(C,M,I){var N=M[0],V=M[1],Q=M[2],W=I[0],A=I[1],E=I[2];return C[0]=V*E-Q*A,C[1]=Q*W-N*E,C[2]=N*A-V*W,C}function ZC(C,M,I,N){var V=M[0],Q=M[1],W=M[2];return C[0]=V+N*(I[0]-V),C[1]=Q+N*(I[1]-Q),C[2]=W+N*(I[2]-W),C}function $C(C,M,I,N,V,Q){var W=Q*Q,A=W*(2*Q-3)+1,E=W*(Q-2)+Q,X=W*(Q-1),Y=W*(3-2*Q);return C[0]=M[0]*A+I[0]*E+N[0]*X+V[0]*Y,C[1]=M[1]*A+I[1]*E+N[1]*X+V[1]*Y,C[2]=M[2]*A+I[2]*E+N[2]*X+V[2]*Y,C}function BC(C,M,I,N,V,Q){var W=1-Q,A=W*W,E=Q*Q,X=A*W,Y=3*Q*A,$=3*E*W,K=E*Q;return C[0]=M[0]*X+I[0]*Y+N[0]*$+V[0]*K,C[1]=M[1]*X+I[1]*Y+N[1]*$+V[1]*K,C[2]=M[2]*X+I[2]*Y+N[2]*$+V[2]*K,C}function KC(C,M){M=M||1;var I=n()*2*Math.PI,N=n()*2-1,V=Math.sqrt(1-N*N)*M;return C[0]=Math.cos(I)*V,C[1]=Math.sin(I)*V,C[2]=N*M,C}function PC(C,M,I){var N=M[0],V=M[1],Q=M[2],W=I[3]*N+I[7]*V+I[11]*Q+I[15];return W=W||1,C[0]=(I[0]*N+I[4]*V+I[8]*Q+I[12])/W,C[1]=(I[1]*N+I[5]*V+I[9]*Q+I[13])/W,C[2]=(I[2]*N+I[6]*V+I[10]*Q+I[14])/W,C}function LC(C,M,I){var N=M[0],V=M[1],Q=M[2];return C[0]=N*I[0]+V*I[3]+Q*I[6],C[1]=N*I[1]+V*I[4]+Q*I[7],C[2]=N*I[2]+V*I[5]+Q*I[8],C}function HC(C,M,I){var N=I[0],V=I[1],Q=I[2],W=I[3],A=M[0],E=M[1],X=M[2],Y=V*X-Q*E,$=Q*A-N*X,K=N*E-V*A,B=V*K-Q*$,L=Q*Y-N*K,P=N*$-V*Y,Z=W*2;return Y*=Z,$*=Z,K*=Z,B*=2,L*=2,P*=2,C[0]=A+Y+B,C[1]=E+$+L,C[2]=X+K+P,C}function JC(C,M,I,N){var V=[],Q=[];return V[0]=M[0]-I[0],V[1]=M[1]-I[1],V[2]=M[2]-I[2],Q[0]=V[0],Q[1]=V[1]*Math.cos(N)-V[2]*Math.sin(N),Q[2]=V[1]*Math.sin(N)+V[2]*Math.cos(N),C[0]=Q[0]+I[0],C[1]=Q[1]+I[1],C[2]=Q[2]+I[2],C}function DC(C,M,I,N){var V=[],Q=[];return V[0]=M[0]-I[0],V[1]=M[1]-I[1],V[2]=M[2]-I[2],Q[0]=V[2]*Math.sin(N)+V[0]*Math.cos(N),Q[1]=V[1],Q[2]=V[2]*Math.cos(N)-V[0]*Math.sin(N),C[0]=Q[0]+I[0],C[1]=Q[1]+I[1],C[2]=Q[2]+I[2],C}function GC(C,M,I,N){var V=[],Q=[];return V[0]=M[0]-I[0],V[1]=M[1]-I[1],V[2]=M[2]-I[2],Q[0]=V[0]*Math.cos(N)-V[1]*Math.sin(N),Q[1]=V[0]*Math.sin(N)+V[1]*Math.cos(N),Q[2]=V[2],C[0]=Q[0]+I[0],C[1]=Q[1]+I[1],C[2]=Q[2]+I[2],C}function UC(C,M){var I=C[0],N=C[1],V=C[2],Q=M[0],W=M[1],A=M[2],E=Math.sqrt(I*I+N*N+V*V),X=Math.sqrt(Q*Q+W*W+A*A),Y=E*X,$=Y&&m(C,M)/Y;return Math.acos(Math.min(Math.max($,-1),1))}function FC(C){return C[0]=0,C[1]=0,C[2]=0,C}function OC(C){return"vec3("+C[0]+", "+C[1]+", "+C[2]+")"}function RC(C,M){return C[0]===M[0]&&C[1]===M[1]&&C[2]===M[2]}function kC(C,M){var I=C[0],N=C[1],V=C[2],Q=M[0],W=M[1],A=M[2];return Math.abs(I-Q)<=F*Math.max(1,Math.abs(I),Math.abs(Q))&&Math.abs(N-W)<=F*Math.max(1,Math.abs(N),Math.abs(W))&&Math.abs(V-A)<=F*Math.max(1,Math.abs(V),Math.abs(A))}var _C=Z0,TC=$0,jC=B0,SC=K0,hC=P0,t=Y0,qC=L0,pC=function(){var C=x();return function(M,I,N,V,Q,W){var A,E;if(!I)I=3;if(!N)N=0;if(V)E=Math.min(V*I+N,M.length);else E=M.length;for(A=N;A<E;A+=I)C[0]=M[A],C[1]=M[A+1],C[2]=M[A+2],Q(C,C,W),M[A]=C[0],M[A+1]=C[1],M[A+2]=C[2];return M}}();function vC(){var C=new k(4);if(k!=Float32Array)C[0]=0,C[1]=0,C[2]=0,C[3]=0;return C}function H0(C){var M=new k(4);return M[0]=C[0],M[1]=C[1],M[2]=C[2],M[3]=C[3],M}function J0(C,M,I,N){var V=new k(4);return V[0]=C,V[1]=M,V[2]=I,V[3]=N,V}function D0(C,M){return C[0]=M[0],C[1]=M[1],C[2]=M[2],C[3]=M[3],C}function G0(C,M,I,N,V){return C[0]=M,C[1]=I,C[2]=N,C[3]=V,C}function U0(C,M,I){return C[0]=M[0]+I[0],C[1]=M[1]+I[1],C[2]=M[2]+I[2],C[3]=M[3]+I[3],C}function F0(C,M,I){return C[0]=M[0]*I,C[1]=M[1]*I,C[2]=M[2]*I,C[3]=M[3]*I,C}function O0(C){var M=C[0],I=C[1],N=C[2],V=C[3];return Math.hypot(M,I,N,V)}function R0(C){var M=C[0],I=C[1],N=C[2],V=C[3];return M*M+I*I+N*N+V*V}function k0(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=I*I+N*N+V*V+Q*Q;if(W>0)W=1/Math.sqrt(W);return C[0]=I*W,C[1]=N*W,C[2]=V*W,C[3]=Q*W,C}function _0(C,M){return C[0]*M[0]+C[1]*M[1]+C[2]*M[2]+C[3]*M[3]}function T0(C,M,I,N){var V=M[0],Q=M[1],W=M[2],A=M[3];return C[0]=V+N*(I[0]-V),C[1]=Q+N*(I[1]-Q),C[2]=W+N*(I[2]-W),C[3]=A+N*(I[3]-A),C}function j0(C,M){return C[0]===M[0]&&C[1]===M[1]&&C[2]===M[2]&&C[3]===M[3]}function S0(C,M){var I=C[0],N=C[1],V=C[2],Q=C[3],W=M[0],A=M[1],E=M[2],X=M[3];return Math.abs(I-W)<=F*Math.max(1,Math.abs(I),Math.abs(W))&&Math.abs(N-A)<=F*Math.max(1,Math.abs(N),Math.abs(A))&&Math.abs(V-E)<=F*Math.max(1,Math.abs(V),Math.abs(E))&&Math.abs(Q-X)<=F*Math.max(1,Math.abs(Q),Math.abs(X))}var EI=function(){var C=vC();return function(M,I,N,V,Q,W){var A,E;if(!I)I=4;if(!N)N=0;if(V)E=Math.min(V*I+N,M.length);else E=M.length;for(A=N;A<E;A+=I)C[0]=M[A],C[1]=M[A+1],C[2]=M[A+2],C[3]=M[A+3],Q(C,C,W),M[A]=C[0],M[A+1]=C[1],M[A+2]=C[2],M[A+3]=C[3];return M}}();function a(){var C=new k(4);if(k!=Float32Array)C[0]=0,C[1]=0,C[2]=0;return C[3]=1,C}function gC(C){return C[0]=0,C[1]=0,C[2]=0,C[3]=1,C}function h0(C,M,I){I=I*0.5;var N=Math.sin(I);return C[0]=N*M[0],C[1]=N*M[1],C[2]=N*M[2],C[3]=Math.cos(I),C}function nC(C,M){var I=Math.acos(M[3])*2,N=Math.sin(I/2);if(N>F)C[0]=M[0]/N,C[1]=M[1]/N,C[2]=M[2]/N;else C[0]=1,C[1]=0,C[2]=0;return I}function fC(C,M){var I=n0(C,M);return Math.acos(2*I*I-1)}function q0(C,M,I){var N=M[0],V=M[1],Q=M[2],W=M[3],A=I[0],E=I[1],X=I[2],Y=I[3];return C[0]=N*Y+W*A+V*X-Q*E,C[1]=V*Y+W*E+Q*A-N*X,C[2]=Q*Y+W*X+N*E-V*A,C[3]=W*Y-N*A-V*E-Q*X,C}function iC(C,M,I){I*=0.5;var N=M[0],V=M[1],Q=M[2],W=M[3],A=Math.sin(I),E=Math.cos(I);return C[0]=N*E+W*A,C[1]=V*E+Q*A,C[2]=Q*E-V*A,C[3]=W*E-N*A,C}function dC(C,M,I){I*=0.5;var N=M[0],V=M[1],Q=M[2],W=M[3],A=Math.sin(I),E=Math.cos(I);return C[0]=N*E-Q*A,C[1]=V*E+W*A,C[2]=Q*E+N*A,C[3]=W*E-V*A,C}function lC(C,M,I){I*=0.5;var N=M[0],V=M[1],Q=M[2],W=M[3],A=Math.sin(I),E=Math.cos(I);return C[0]=N*E+V*A,C[1]=V*E-N*A,C[2]=Q*E+W*A,C[3]=W*E-Q*A,C}function cC(C,M){var I=M[0],N=M[1],V=M[2];return C[0]=I,C[1]=N,C[2]=V,C[3]=Math.sqrt(Math.abs(1-I*I-N*N-V*V)),C}function p0(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=Math.sqrt(I*I+N*N+V*V),A=Math.exp(Q),E=W>0?A*Math.sin(W)/W:0;return C[0]=I*E,C[1]=N*E,C[2]=V*E,C[3]=A*Math.cos(W),C}function v0(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=Math.sqrt(I*I+N*N+V*V),A=W>0?Math.atan2(W,Q)/W:0;return C[0]=I*A,C[1]=N*A,C[2]=V*A,C[3]=0.5*Math.log(I*I+N*N+V*V+Q*Q),C}function zC(C,M,I){return v0(C,M),g0(C,C,I),p0(C,C),C}function e(C,M,I,N){var V=M[0],Q=M[1],W=M[2],A=M[3],E=I[0],X=I[1],Y=I[2],$=I[3],K,B,L,P,Z;if(B=V*E+Q*X+W*Y+A*$,B<0)B=-B,E=-E,X=-X,Y=-Y,$=-$;if(1-B>F)K=Math.acos(B),L=Math.sin(K),P=Math.sin((1-N)*K)/L,Z=Math.sin(N*K)/L;else P=1-N,Z=N;return C[0]=P*V+Z*E,C[1]=P*Q+Z*X,C[2]=P*W+Z*Y,C[3]=P*A+Z*$,C}function yC(C){var M=n(),I=n(),N=n(),V=Math.sqrt(1-M),Q=Math.sqrt(M);return C[0]=V*Math.sin(2*Math.PI*I),C[1]=V*Math.cos(2*Math.PI*I),C[2]=Q*Math.sin(2*Math.PI*N),C[3]=Q*Math.cos(2*Math.PI*N),C}function rC(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=I*I+N*N+V*V+Q*Q,A=W?1/W:0;return C[0]=-I*A,C[1]=-N*A,C[2]=-V*A,C[3]=Q*A,C}function xC(C,M){return C[0]=-M[0],C[1]=-M[1],C[2]=-M[2],C[3]=M[3],C}function w0(C,M){var I=M[0]+M[4]+M[8],N;if(I>0)N=Math.sqrt(I+1),C[3]=0.5*N,N=0.5/N,C[0]=(M[5]-M[7])*N,C[1]=(M[6]-M[2])*N,C[2]=(M[1]-M[3])*N;else{var V=0;if(M[4]>M[0])V=1;if(M[8]>M[V*3+V])V=2;var Q=(V+1)%3,W=(V+2)%3;N=Math.sqrt(M[V*3+V]-M[Q*3+Q]-M[W*3+W]+1),C[V]=0.5*N,N=0.5/N,C[3]=(M[Q*3+W]-M[W*3+Q])*N,C[Q]=(M[Q*3+V]+M[V*3+Q])*N,C[W]=(M[W*3+V]+M[V*3+W])*N}return C}function sC(C,M,I,N){var V=0.5*Math.PI/180;M*=V,I*=V,N*=V;var Q=Math.sin(M),W=Math.cos(M),A=Math.sin(I),E=Math.cos(I),X=Math.sin(N),Y=Math.cos(N);return C[0]=Q*E*Y-W*A*X,C[1]=W*A*Y+Q*E*X,C[2]=W*E*X-Q*A*Y,C[3]=W*E*Y+Q*A*X,C}function mC(C){return"quat("+C[0]+", "+C[1]+", "+C[2]+", "+C[3]+")"}var eC=H0,bC=J0,uC=D0,oC=G0,tC=U0,aC=q0,g0=F0,n0=_0,CM=T0,f0=O0,MM=f0,i0=R0,IM=i0,C0=k0,NM=j0,VM=S0,QM=function(){var C=x(),M=s(1,0,0),I=s(0,1,0);return function(N,V,Q){var W=m(V,Q);if(W<-0.999999){if(r(C,M,V),t(C)<0.000001)r(C,I,V);return o(C,C),h0(N,C,Math.PI),N}else if(W>0.999999)return N[0]=0,N[1]=0,N[2]=0,N[3]=1,N;else return r(C,V,Q),N[0]=C[0],N[1]=C[1],N[2]=C[2],N[3]=1+W,C0(N,N)}}(),WM=function(){var C=a(),M=a();return function(I,N,V,Q,W,A){return e(C,N,W,A),e(M,V,Q,A),e(I,C,M,2*A*(1-A)),I}}(),AM=function(){var C=X0();return function(M,I,N,V){return C[0]=N[0],C[3]=N[1],C[6]=N[2],C[1]=V[0],C[4]=V[1],C[7]=V[2],C[2]=-I[0],C[5]=-I[1],C[8]=-I[2],C0(M,w0(M,C))}}();var v={};u(v,{transpose:()=>{{return BM}},translate:()=>{{return HM}},targetTo:()=>{{return zM}},subtract:()=>{{return x0}},sub:()=>{{return oM}},str:()=>{{return yM}},set:()=>{{return $M}},scale:()=>{{return JM}},rotateZ:()=>{{return FM}},rotateY:()=>{{return UM}},rotateX:()=>{{return GM}},rotate:()=>{{return DM}},perspectiveZO:()=>{{return fM}},perspectiveNO:()=>{{return y0}},perspectiveFromFieldOfView:()=>{{return iM}},perspective:()=>{{return nM}},orthoZO:()=>{{return lM}},orthoNO:()=>{{return r0}},ortho:()=>{{return dM}},multiplyScalarAndAdd:()=>{{return mM}},multiplyScalar:()=>{{return sM}},multiply:()=>{{return l0}},mul:()=>{{return uM}},lookAt:()=>{{return cM}},invert:()=>{{return KM}},identity:()=>{{return d0}},getTranslation:()=>{{return hM}},getScaling:()=>{{return z0}},getRotation:()=>{{return qM}},frustum:()=>{{return gM}},fromZRotation:()=>{{return jM}},fromYRotation:()=>{{return TM}},fromXRotation:()=>{{return _M}},fromValues:()=>{{return ZM}},fromTranslation:()=>{{return OM}},fromScaling:()=>{{return RM}},fromRotationTranslationScaleOrigin:()=>{{return vM}},fromRotationTranslationScale:()=>{{return pM}},fromRotationTranslation:()=>{{return c0}},fromRotation:()=>{{return kM}},fromQuat2:()=>{{return SM}},fromQuat:()=>{{return wM}},frob:()=>{{return rM}},exactEquals:()=>{{return eM}},equals:()=>{{return bM}},determinant:()=>{{return LM}},create:()=>{{return EM}},copy:()=>{{return YM}},clone:()=>{{return XM}},adjoint:()=>{{return PM}},add:()=>{{return xM}}});function EM(){var C=new k(16);if(k!=Float32Array)C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[11]=0,C[12]=0,C[13]=0,C[14]=0;return C[0]=1,C[5]=1,C[10]=1,C[15]=1,C}function XM(C){var M=new k(16);return M[0]=C[0],M[1]=C[1],M[2]=C[2],M[3]=C[3],M[4]=C[4],M[5]=C[5],M[6]=C[6],M[7]=C[7],M[8]=C[8],M[9]=C[9],M[10]=C[10],M[11]=C[11],M[12]=C[12],M[13]=C[13],M[14]=C[14],M[15]=C[15],M}function YM(C,M){return C[0]=M[0],C[1]=M[1],C[2]=M[2],C[3]=M[3],C[4]=M[4],C[5]=M[5],C[6]=M[6],C[7]=M[7],C[8]=M[8],C[9]=M[9],C[10]=M[10],C[11]=M[11],C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15],C}function ZM(C,M,I,N,V,Q,W,A,E,X,Y,$,K,B,L,P){var Z=new k(16);return Z[0]=C,Z[1]=M,Z[2]=I,Z[3]=N,Z[4]=V,Z[5]=Q,Z[6]=W,Z[7]=A,Z[8]=E,Z[9]=X,Z[10]=Y,Z[11]=$,Z[12]=K,Z[13]=B,Z[14]=L,Z[15]=P,Z}function $M(C,M,I,N,V,Q,W,A,E,X,Y,$,K,B,L,P,Z){return C[0]=M,C[1]=I,C[2]=N,C[3]=V,C[4]=Q,C[5]=W,C[6]=A,C[7]=E,C[8]=X,C[9]=Y,C[10]=$,C[11]=K,C[12]=B,C[13]=L,C[14]=P,C[15]=Z,C}function d0(C){return C[0]=1,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=1,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=1,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function BM(C,M){if(C===M){var I=M[1],N=M[2],V=M[3],Q=M[6],W=M[7],A=M[11];C[1]=M[4],C[2]=M[8],C[3]=M[12],C[4]=I,C[6]=M[9],C[7]=M[13],C[8]=N,C[9]=Q,C[11]=M[14],C[12]=V,C[13]=W,C[14]=A}else C[0]=M[0],C[1]=M[4],C[2]=M[8],C[3]=M[12],C[4]=M[1],C[5]=M[5],C[6]=M[9],C[7]=M[13],C[8]=M[2],C[9]=M[6],C[10]=M[10],C[11]=M[14],C[12]=M[3],C[13]=M[7],C[14]=M[11],C[15]=M[15];return C}function KM(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=M[4],A=M[5],E=M[6],X=M[7],Y=M[8],$=M[9],K=M[10],B=M[11],L=M[12],P=M[13],Z=M[14],H=M[15],O=I*A-N*W,U=I*E-V*W,G=I*X-Q*W,J=N*E-V*A,D=N*X-Q*A,S=V*X-Q*E,_=Y*P-$*L,T=Y*Z-K*L,j=Y*H-B*L,h=$*Z-K*P,q=$*H-B*P,p=K*H-B*Z,R=O*p-U*q+G*h+J*j-D*T+S*_;if(!R)return null;return R=1/R,C[0]=(A*p-E*q+X*h)*R,C[1]=(V*q-N*p-Q*h)*R,C[2]=(P*S-Z*D+H*J)*R,C[3]=(K*D-$*S-B*J)*R,C[4]=(E*j-W*p-X*T)*R,C[5]=(I*p-V*j+Q*T)*R,C[6]=(Z*G-L*S-H*U)*R,C[7]=(Y*S-K*G+B*U)*R,C[8]=(W*q-A*j+X*_)*R,C[9]=(N*j-I*q-Q*_)*R,C[10]=(L*D-P*G+H*O)*R,C[11]=($*G-Y*D-B*O)*R,C[12]=(A*T-W*h-E*_)*R,C[13]=(I*h-N*T+V*_)*R,C[14]=(P*U-L*J-Z*O)*R,C[15]=(Y*J-$*U+K*O)*R,C}function PM(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=M[4],A=M[5],E=M[6],X=M[7],Y=M[8],$=M[9],K=M[10],B=M[11],L=M[12],P=M[13],Z=M[14],H=M[15];return C[0]=A*(K*H-B*Z)-$*(E*H-X*Z)+P*(E*B-X*K),C[1]=-(N*(K*H-B*Z)-$*(V*H-Q*Z)+P*(V*B-Q*K)),C[2]=N*(E*H-X*Z)-A*(V*H-Q*Z)+P*(V*X-Q*E),C[3]=-(N*(E*B-X*K)-A*(V*B-Q*K)+$*(V*X-Q*E)),C[4]=-(W*(K*H-B*Z)-Y*(E*H-X*Z)+L*(E*B-X*K)),C[5]=I*(K*H-B*Z)-Y*(V*H-Q*Z)+L*(V*B-Q*K),C[6]=-(I*(E*H-X*Z)-W*(V*H-Q*Z)+L*(V*X-Q*E)),C[7]=I*(E*B-X*K)-W*(V*B-Q*K)+Y*(V*X-Q*E),C[8]=W*($*H-B*P)-Y*(A*H-X*P)+L*(A*B-X*$),C[9]=-(I*($*H-B*P)-Y*(N*H-Q*P)+L*(N*B-Q*$)),C[10]=I*(A*H-X*P)-W*(N*H-Q*P)+L*(N*X-Q*A),C[11]=-(I*(A*B-X*$)-W*(N*B-Q*$)+Y*(N*X-Q*A)),C[12]=-(W*($*Z-K*P)-Y*(A*Z-E*P)+L*(A*K-E*$)),C[13]=I*($*Z-K*P)-Y*(N*Z-V*P)+L*(N*K-V*$),C[14]=-(I*(A*Z-E*P)-W*(N*Z-V*P)+L*(N*E-V*A)),C[15]=I*(A*K-E*$)-W*(N*K-V*$)+Y*(N*E-V*A),C}function LM(C){var M=C[0],I=C[1],N=C[2],V=C[3],Q=C[4],W=C[5],A=C[6],E=C[7],X=C[8],Y=C[9],$=C[10],K=C[11],B=C[12],L=C[13],P=C[14],Z=C[15],H=M*W-I*Q,O=M*A-N*Q,U=M*E-V*Q,G=I*A-N*W,J=I*E-V*W,D=N*E-V*A,S=X*L-Y*B,_=X*P-$*B,T=X*Z-K*B,j=Y*P-$*L,h=Y*Z-K*L,q=$*Z-K*P;return H*q-O*h+U*j+G*T-J*_+D*S}function l0(C,M,I){var N=M[0],V=M[1],Q=M[2],W=M[3],A=M[4],E=M[5],X=M[6],Y=M[7],$=M[8],K=M[9],B=M[10],L=M[11],P=M[12],Z=M[13],H=M[14],O=M[15],U=I[0],G=I[1],J=I[2],D=I[3];return C[0]=U*N+G*A+J*$+D*P,C[1]=U*V+G*E+J*K+D*Z,C[2]=U*Q+G*X+J*B+D*H,C[3]=U*W+G*Y+J*L+D*O,U=I[4],G=I[5],J=I[6],D=I[7],C[4]=U*N+G*A+J*$+D*P,C[5]=U*V+G*E+J*K+D*Z,C[6]=U*Q+G*X+J*B+D*H,C[7]=U*W+G*Y+J*L+D*O,U=I[8],G=I[9],J=I[10],D=I[11],C[8]=U*N+G*A+J*$+D*P,C[9]=U*V+G*E+J*K+D*Z,C[10]=U*Q+G*X+J*B+D*H,C[11]=U*W+G*Y+J*L+D*O,U=I[12],G=I[13],J=I[14],D=I[15],C[12]=U*N+G*A+J*$+D*P,C[13]=U*V+G*E+J*K+D*Z,C[14]=U*Q+G*X+J*B+D*H,C[15]=U*W+G*Y+J*L+D*O,C}function HM(C,M,I){var N=I[0],V=I[1],Q=I[2],W,A,E,X,Y,$,K,B,L,P,Z,H;if(M===C)C[12]=M[0]*N+M[4]*V+M[8]*Q+M[12],C[13]=M[1]*N+M[5]*V+M[9]*Q+M[13],C[14]=M[2]*N+M[6]*V+M[10]*Q+M[14],C[15]=M[3]*N+M[7]*V+M[11]*Q+M[15];else W=M[0],A=M[1],E=M[2],X=M[3],Y=M[4],$=M[5],K=M[6],B=M[7],L=M[8],P=M[9],Z=M[10],H=M[11],C[0]=W,C[1]=A,C[2]=E,C[3]=X,C[4]=Y,C[5]=$,C[6]=K,C[7]=B,C[8]=L,C[9]=P,C[10]=Z,C[11]=H,C[12]=W*N+Y*V+L*Q+M[12],C[13]=A*N+$*V+P*Q+M[13],C[14]=E*N+K*V+Z*Q+M[14],C[15]=X*N+B*V+H*Q+M[15];return C}function JM(C,M,I){var N=I[0],V=I[1],Q=I[2];return C[0]=M[0]*N,C[1]=M[1]*N,C[2]=M[2]*N,C[3]=M[3]*N,C[4]=M[4]*V,C[5]=M[5]*V,C[6]=M[6]*V,C[7]=M[7]*V,C[8]=M[8]*Q,C[9]=M[9]*Q,C[10]=M[10]*Q,C[11]=M[11]*Q,C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15],C}function DM(C,M,I,N){var V=N[0],Q=N[1],W=N[2],A=Math.hypot(V,Q,W),E,X,Y,$,K,B,L,P,Z,H,O,U,G,J,D,S,_,T,j,h,q,p,R,w;if(A<F)return null;if(A=1/A,V*=A,Q*=A,W*=A,E=Math.sin(I),X=Math.cos(I),Y=1-X,$=M[0],K=M[1],B=M[2],L=M[3],P=M[4],Z=M[5],H=M[6],O=M[7],U=M[8],G=M[9],J=M[10],D=M[11],S=V*V*Y+X,_=Q*V*Y+W*E,T=W*V*Y-Q*E,j=V*Q*Y-W*E,h=Q*Q*Y+X,q=W*Q*Y+V*E,p=V*W*Y+Q*E,R=Q*W*Y-V*E,w=W*W*Y+X,C[0]=$*S+P*_+U*T,C[1]=K*S+Z*_+G*T,C[2]=B*S+H*_+J*T,C[3]=L*S+O*_+D*T,C[4]=$*j+P*h+U*q,C[5]=K*j+Z*h+G*q,C[6]=B*j+H*h+J*q,C[7]=L*j+O*h+D*q,C[8]=$*p+P*R+U*w,C[9]=K*p+Z*R+G*w,C[10]=B*p+H*R+J*w,C[11]=L*p+O*R+D*w,M!==C)C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15];return C}function GM(C,M,I){var N=Math.sin(I),V=Math.cos(I),Q=M[4],W=M[5],A=M[6],E=M[7],X=M[8],Y=M[9],$=M[10],K=M[11];if(M!==C)C[0]=M[0],C[1]=M[1],C[2]=M[2],C[3]=M[3],C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15];return C[4]=Q*V+X*N,C[5]=W*V+Y*N,C[6]=A*V+$*N,C[7]=E*V+K*N,C[8]=X*V-Q*N,C[9]=Y*V-W*N,C[10]=$*V-A*N,C[11]=K*V-E*N,C}function UM(C,M,I){var N=Math.sin(I),V=Math.cos(I),Q=M[0],W=M[1],A=M[2],E=M[3],X=M[8],Y=M[9],$=M[10],K=M[11];if(M!==C)C[4]=M[4],C[5]=M[5],C[6]=M[6],C[7]=M[7],C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15];return C[0]=Q*V-X*N,C[1]=W*V-Y*N,C[2]=A*V-$*N,C[3]=E*V-K*N,C[8]=Q*N+X*V,C[9]=W*N+Y*V,C[10]=A*N+$*V,C[11]=E*N+K*V,C}function FM(C,M,I){var N=Math.sin(I),V=Math.cos(I),Q=M[0],W=M[1],A=M[2],E=M[3],X=M[4],Y=M[5],$=M[6],K=M[7];if(M!==C)C[8]=M[8],C[9]=M[9],C[10]=M[10],C[11]=M[11],C[12]=M[12],C[13]=M[13],C[14]=M[14],C[15]=M[15];return C[0]=Q*V+X*N,C[1]=W*V+Y*N,C[2]=A*V+$*N,C[3]=E*V+K*N,C[4]=X*V-Q*N,C[5]=Y*V-W*N,C[6]=$*V-A*N,C[7]=K*V-E*N,C}function OM(C,M){return C[0]=1,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=1,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=1,C[11]=0,C[12]=M[0],C[13]=M[1],C[14]=M[2],C[15]=1,C}function RM(C,M){return C[0]=M[0],C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=M[1],C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=M[2],C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function kM(C,M,I){var N=I[0],V=I[1],Q=I[2],W=Math.hypot(N,V,Q),A,E,X;if(W<F)return null;return W=1/W,N*=W,V*=W,Q*=W,A=Math.sin(M),E=Math.cos(M),X=1-E,C[0]=N*N*X+E,C[1]=V*N*X+Q*A,C[2]=Q*N*X-V*A,C[3]=0,C[4]=N*V*X-Q*A,C[5]=V*V*X+E,C[6]=Q*V*X+N*A,C[7]=0,C[8]=N*Q*X+V*A,C[9]=V*Q*X-N*A,C[10]=Q*Q*X+E,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function _M(C,M){var I=Math.sin(M),N=Math.cos(M);return C[0]=1,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=N,C[6]=I,C[7]=0,C[8]=0,C[9]=-I,C[10]=N,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function TM(C,M){var I=Math.sin(M),N=Math.cos(M);return C[0]=N,C[1]=0,C[2]=-I,C[3]=0,C[4]=0,C[5]=1,C[6]=0,C[7]=0,C[8]=I,C[9]=0,C[10]=N,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function jM(C,M){var I=Math.sin(M),N=Math.cos(M);return C[0]=N,C[1]=I,C[2]=0,C[3]=0,C[4]=-I,C[5]=N,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=1,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function c0(C,M,I){var N=M[0],V=M[1],Q=M[2],W=M[3],A=N+N,E=V+V,X=Q+Q,Y=N*A,$=N*E,K=N*X,B=V*E,L=V*X,P=Q*X,Z=W*A,H=W*E,O=W*X;return C[0]=1-(B+P),C[1]=$+O,C[2]=K-H,C[3]=0,C[4]=$-O,C[5]=1-(Y+P),C[6]=L+Z,C[7]=0,C[8]=K+H,C[9]=L-Z,C[10]=1-(Y+B),C[11]=0,C[12]=I[0],C[13]=I[1],C[14]=I[2],C[15]=1,C}function SM(C,M){var I=new k(3),N=-M[0],V=-M[1],Q=-M[2],W=M[3],A=M[4],E=M[5],X=M[6],Y=M[7],$=N*N+V*V+Q*Q+W*W;if($>0)I[0]=(A*W+Y*N+E*Q-X*V)*2/$,I[1]=(E*W+Y*V+X*N-A*Q)*2/$,I[2]=(X*W+Y*Q+A*V-E*N)*2/$;else I[0]=(A*W+Y*N+E*Q-X*V)*2,I[1]=(E*W+Y*V+X*N-A*Q)*2,I[2]=(X*W+Y*Q+A*V-E*N)*2;return c0(C,M,I),C}function hM(C,M){return C[0]=M[12],C[1]=M[13],C[2]=M[14],C}function z0(C,M){var I=M[0],N=M[1],V=M[2],Q=M[4],W=M[5],A=M[6],E=M[8],X=M[9],Y=M[10];return C[0]=Math.hypot(I,N,V),C[1]=Math.hypot(Q,W,A),C[2]=Math.hypot(E,X,Y),C}function qM(C,M){var I=new k(3);z0(I,M);var N=1/I[0],V=1/I[1],Q=1/I[2],W=M[0]*N,A=M[1]*V,E=M[2]*Q,X=M[4]*N,Y=M[5]*V,$=M[6]*Q,K=M[8]*N,B=M[9]*V,L=M[10]*Q,P=W+Y+L,Z=0;if(P>0)Z=Math.sqrt(P+1)*2,C[3]=0.25*Z,C[0]=($-B)/Z,C[1]=(K-E)/Z,C[2]=(A-X)/Z;else if(W>Y&&W>L)Z=Math.sqrt(1+W-Y-L)*2,C[3]=($-B)/Z,C[0]=0.25*Z,C[1]=(A+X)/Z,C[2]=(K+E)/Z;else if(Y>L)Z=Math.sqrt(1+Y-W-L)*2,C[3]=(K-E)/Z,C[0]=(A+X)/Z,C[1]=0.25*Z,C[2]=($+B)/Z;else Z=Math.sqrt(1+L-W-Y)*2,C[3]=(A-X)/Z,C[0]=(K+E)/Z,C[1]=($+B)/Z,C[2]=0.25*Z;return C}function pM(C,M,I,N){var V=M[0],Q=M[1],W=M[2],A=M[3],E=V+V,X=Q+Q,Y=W+W,$=V*E,K=V*X,B=V*Y,L=Q*X,P=Q*Y,Z=W*Y,H=A*E,O=A*X,U=A*Y,G=N[0],J=N[1],D=N[2];return C[0]=(1-(L+Z))*G,C[1]=(K+U)*G,C[2]=(B-O)*G,C[3]=0,C[4]=(K-U)*J,C[5]=(1-($+Z))*J,C[6]=(P+H)*J,C[7]=0,C[8]=(B+O)*D,C[9]=(P-H)*D,C[10]=(1-($+L))*D,C[11]=0,C[12]=I[0],C[13]=I[1],C[14]=I[2],C[15]=1,C}function vM(C,M,I,N,V){var Q=M[0],W=M[1],A=M[2],E=M[3],X=Q+Q,Y=W+W,$=A+A,K=Q*X,B=Q*Y,L=Q*$,P=W*Y,Z=W*$,H=A*$,O=E*X,U=E*Y,G=E*$,J=N[0],D=N[1],S=N[2],_=V[0],T=V[1],j=V[2],h=(1-(P+H))*J,q=(B+G)*J,p=(L-U)*J,R=(B-G)*D,w=(1-(K+H))*D,c=(Z+O)*D,z=(L+U)*S,A0=(Z-O)*S,E0=(1-(K+P))*S;return C[0]=h,C[1]=q,C[2]=p,C[3]=0,C[4]=R,C[5]=w,C[6]=c,C[7]=0,C[8]=z,C[9]=A0,C[10]=E0,C[11]=0,C[12]=I[0]+_-(h*_+R*T+z*j),C[13]=I[1]+T-(q*_+w*T+A0*j),C[14]=I[2]+j-(p*_+c*T+E0*j),C[15]=1,C}function wM(C,M){var I=M[0],N=M[1],V=M[2],Q=M[3],W=I+I,A=N+N,E=V+V,X=I*W,Y=N*W,$=N*A,K=V*W,B=V*A,L=V*E,P=Q*W,Z=Q*A,H=Q*E;return C[0]=1-$-L,C[1]=Y+H,C[2]=K-Z,C[3]=0,C[4]=Y-H,C[5]=1-X-L,C[6]=B+P,C[7]=0,C[8]=K+Z,C[9]=B-P,C[10]=1-X-$,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function gM(C,M,I,N,V,Q,W){var A=1/(I-M),E=1/(V-N),X=1/(Q-W);return C[0]=Q*2*A,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=Q*2*E,C[6]=0,C[7]=0,C[8]=(I+M)*A,C[9]=(V+N)*E,C[10]=(W+Q)*X,C[11]=-1,C[12]=0,C[13]=0,C[14]=W*Q*2*X,C[15]=0,C}function y0(C,M,I,N,V){var Q=1/Math.tan(M/2),W;if(C[0]=Q/I,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=Q,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[11]=-1,C[12]=0,C[13]=0,C[15]=0,V!=null&&V!==Infinity)W=1/(N-V),C[10]=(V+N)*W,C[14]=2*V*N*W;else C[10]=-1,C[14]=-2*N;return C}function fM(C,M,I,N,V){var Q=1/Math.tan(M/2),W;if(C[0]=Q/I,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=Q,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[11]=-1,C[12]=0,C[13]=0,C[15]=0,V!=null&&V!==Infinity)W=1/(N-V),C[10]=V*W,C[14]=V*N*W;else C[10]=-1,C[14]=-N;return C}function iM(C,M,I,N){var V=Math.tan(M.upDegrees*Math.PI/180),Q=Math.tan(M.downDegrees*Math.PI/180),W=Math.tan(M.leftDegrees*Math.PI/180),A=Math.tan(M.rightDegrees*Math.PI/180),E=2/(W+A),X=2/(V+Q);return C[0]=E,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=X,C[6]=0,C[7]=0,C[8]=-((W-A)*E*0.5),C[9]=(V-Q)*X*0.5,C[10]=N/(I-N),C[11]=-1,C[12]=0,C[13]=0,C[14]=N*I/(I-N),C[15]=0,C}function r0(C,M,I,N,V,Q,W){var A=1/(M-I),E=1/(N-V),X=1/(Q-W);return C[0]=-2*A,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=-2*E,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=2*X,C[11]=0,C[12]=(M+I)*A,C[13]=(V+N)*E,C[14]=(W+Q)*X,C[15]=1,C}function lM(C,M,I,N,V,Q,W){var A=1/(M-I),E=1/(N-V),X=1/(Q-W);return C[0]=-2*A,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=-2*E,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=X,C[11]=0,C[12]=(M+I)*A,C[13]=(V+N)*E,C[14]=Q*X,C[15]=1,C}function cM(C,M,I,N){var V,Q,W,A,E,X,Y,$,K,B,L=M[0],P=M[1],Z=M[2],H=N[0],O=N[1],U=N[2],G=I[0],J=I[1],D=I[2];if(Math.abs(L-G)<F&&Math.abs(P-J)<F&&Math.abs(Z-D)<F)return d0(C);if(Y=L-G,$=P-J,K=Z-D,B=1/Math.hypot(Y,$,K),Y*=B,$*=B,K*=B,V=O*K-U*$,Q=U*Y-H*K,W=H*$-O*Y,B=Math.hypot(V,Q,W),!B)V=0,Q=0,W=0;else B=1/B,V*=B,Q*=B,W*=B;if(A=$*W-K*Q,E=K*V-Y*W,X=Y*Q-$*V,B=Math.hypot(A,E,X),!B)A=0,E=0,X=0;else B=1/B,A*=B,E*=B,X*=B;return C[0]=V,C[1]=A,C[2]=Y,C[3]=0,C[4]=Q,C[5]=E,C[6]=$,C[7]=0,C[8]=W,C[9]=X,C[10]=K,C[11]=0,C[12]=-(V*L+Q*P+W*Z),C[13]=-(A*L+E*P+X*Z),C[14]=-(Y*L+$*P+K*Z),C[15]=1,C}function zM(C,M,I,N){var V=M[0],Q=M[1],W=M[2],A=N[0],E=N[1],X=N[2],Y=V-I[0],$=Q-I[1],K=W-I[2],B=Y*Y+$*$+K*K;if(B>0)B=1/Math.sqrt(B),Y*=B,$*=B,K*=B;var L=E*K-X*$,P=X*Y-A*K,Z=A*$-E*Y;if(B=L*L+P*P+Z*Z,B>0)B=1/Math.sqrt(B),L*=B,P*=B,Z*=B;return C[0]=L,C[1]=P,C[2]=Z,C[3]=0,C[4]=$*Z-K*P,C[5]=K*L-Y*Z,C[6]=Y*P-$*L,C[7]=0,C[8]=Y,C[9]=$,C[10]=K,C[11]=0,C[12]=V,C[13]=Q,C[14]=W,C[15]=1,C}function yM(C){return"mat4("+C[0]+", "+C[1]+", "+C[2]+", "+C[3]+", "+C[4]+", "+C[5]+", "+C[6]+", "+C[7]+", "+C[8]+", "+C[9]+", "+C[10]+", "+C[11]+", "+C[12]+", "+C[13]+", "+C[14]+", "+C[15]+")"}function rM(C){return Math.hypot(C[0],C[1],C[2],C[3],C[4],C[5],C[6],C[7],C[8],C[9],C[10],C[11],C[12],C[13],C[14],C[15])}function xM(C,M,I){return C[0]=M[0]+I[0],C[1]=M[1]+I[1],C[2]=M[2]+I[2],C[3]=M[3]+I[3],C[4]=M[4]+I[4],C[5]=M[5]+I[5],C[6]=M[6]+I[6],C[7]=M[7]+I[7],C[8]=M[8]+I[8],C[9]=M[9]+I[9],C[10]=M[10]+I[10],C[11]=M[11]+I[11],C[12]=M[12]+I[12],C[13]=M[13]+I[13],C[14]=M[14]+I[14],C[15]=M[15]+I[15],C}function x0(C,M,I){return C[0]=M[0]-I[0],C[1]=M[1]-I[1],C[2]=M[2]-I[2],C[3]=M[3]-I[3],C[4]=M[4]-I[4],C[5]=M[5]-I[5],C[6]=M[6]-I[6],C[7]=M[7]-I[7],C[8]=M[8]-I[8],C[9]=M[9]-I[9],C[10]=M[10]-I[10],C[11]=M[11]-I[11],C[12]=M[12]-I[12],C[13]=M[13]-I[13],C[14]=M[14]-I[14],C[15]=M[15]-I[15],C}function sM(C,M,I){return C[0]=M[0]*I,C[1]=M[1]*I,C[2]=M[2]*I,C[3]=M[3]*I,C[4]=M[4]*I,C[5]=M[5]*I,C[6]=M[6]*I,C[7]=M[7]*I,C[8]=M[8]*I,C[9]=M[9]*I,C[10]=M[10]*I,C[11]=M[11]*I,C[12]=M[12]*I,C[13]=M[13]*I,C[14]=M[14]*I,C[15]=M[15]*I,C}function mM(C,M,I,N){return C[0]=M[0]+I[0]*N,C[1]=M[1]+I[1]*N,C[2]=M[2]+I[2]*N,C[3]=M[3]+I[3]*N,C[4]=M[4]+I[4]*N,C[5]=M[5]+I[5]*N,C[6]=M[6]+I[6]*N,C[7]=M[7]+I[7]*N,C[8]=M[8]+I[8]*N,C[9]=M[9]+I[9]*N,C[10]=M[10]+I[10]*N,C[11]=M[11]+I[11]*N,C[12]=M[12]+I[12]*N,C[13]=M[13]+I[13]*N,C[14]=M[14]+I[14]*N,C[15]=M[15]+I[15]*N,C}function eM(C,M){return C[0]===M[0]&&C[1]===M[1]&&C[2]===M[2]&&C[3]===M[3]&&C[4]===M[4]&&C[5]===M[5]&&C[6]===M[6]&&C[7]===M[7]&&C[8]===M[8]&&C[9]===M[9]&&C[10]===M[10]&&C[11]===M[11]&&C[12]===M[12]&&C[13]===M[13]&&C[14]===M[14]&&C[15]===M[15]}function bM(C,M){var I=C[0],N=C[1],V=C[2],Q=C[3],W=C[4],A=C[5],E=C[6],X=C[7],Y=C[8],$=C[9],K=C[10],B=C[11],L=C[12],P=C[13],Z=C[14],H=C[15],O=M[0],U=M[1],G=M[2],J=M[3],D=M[4],S=M[5],_=M[6],T=M[7],j=M[8],h=M[9],q=M[10],p=M[11],R=M[12],w=M[13],c=M[14],z=M[15];return Math.abs(I-O)<=F*Math.max(1,Math.abs(I),Math.abs(O))&&Math.abs(N-U)<=F*Math.max(1,Math.abs(N),Math.abs(U))&&Math.abs(V-G)<=F*Math.max(1,Math.abs(V),Math.abs(G))&&Math.abs(Q-J)<=F*Math.max(1,Math.abs(Q),Math.abs(J))&&Math.abs(W-D)<=F*Math.max(1,Math.abs(W),Math.abs(D))&&Math.abs(A-S)<=F*Math.max(1,Math.abs(A),Math.abs(S))&&Math.abs(E-_)<=F*Math.max(1,Math.abs(E),Math.abs(_))&&Math.abs(X-T)<=F*Math.max(1,Math.abs(X),Math.abs(T))&&Math.abs(Y-j)<=F*Math.max(1,Math.abs(Y),Math.abs(j))&&Math.abs($-h)<=F*Math.max(1,Math.abs($),Math.abs(h))&&Math.abs(K-q)<=F*Math.max(1,Math.abs(K),Math.abs(q))&&Math.abs(B-p)<=F*Math.max(1,Math.abs(B),Math.abs(p))&&Math.abs(L-R)<=F*Math.max(1,Math.abs(L),Math.abs(R))&&Math.abs(P-w)<=F*Math.max(1,Math.abs(P),Math.abs(w))&&Math.abs(Z-c)<=F*Math.max(1,Math.abs(Z),Math.abs(c))&&Math.abs(H-z)<=F*Math.max(1,Math.abs(H),Math.abs(z))}var nM=y0,dM=r0,uM=l0,oM=x0;class l{C;M;I;constructor(C=d.create(),M=f.create(),I=d.fromValues(1,1,1)){this.position=C;this.rotation=M;this.scale=I}rotateEuler(C,M,I){return f.fromEuler(this.rotation,C,M,I),this}toMat4(){const C=v.create();return v.fromRotationTranslationScale(C,this.rotation,this.position,this.scale),C}}var ZI=(C)=>f.fromEuler(f.create(),C[0],C[1],C[2]),$I=(C)=>[C,C,C];class g{C;constructor(C){this.app=C;this.onStart&&C.onStart(this.onStart.bind(this)),this.onUpdate&&C.onUpdate(this.onUpdate.bind(this)),this.onAfterUpdate&&C.onAfterUpdate(this.onAfterUpdate.bind(this)),this.onBeforeUpdate&&C.onBeforeUpdate(this.onBeforeUpdate.bind(this)),this.onDraw&&C.onDraw(this.onDraw.bind(this))}}class M0 extends g{C;M;I;N;V;Q;projectionMatrix=v.create();buffers={textures:{}};faceDataType;colorDataType;constructor(C,M,I,N=new l([0,0,-6]),V=new l([100,100,0]),Q={}){super(C);this.app=C;this.mesh=M;this.shader=I;this.camera=N;this.light=V;this.config=Q;this.faceDataType=this.getDataType(M.config.faces),this.colorDataType=M.config.colors?this.getDataType(M.config.colors):null}getDataType(C){switch(C.BYTES_PER_ELEMENT){case 1:return 5121;case 2:return 5123;case 4:return 5125;default:return 5126}}configure(C){return this.config=C,this}makeBuffer(C,M=34962){const I=this.app.gl,N=I.createBuffer();if(!N)throw new Error("failed to create a buffer");return I.bindBuffer(M,N),I.bufferData(M,C,I.STATIC_DRAW),I.bindBuffer(M,null),N}initializeBuffers(){const C=this.app.gl.createVertexArray();if(!C)throw new Error("VAO creation failed");this.buffers.vao=C,this.app.gl.bindVertexArray(C),this.buffers.faces=this.makeBuffer(this.mesh.config.faces,this.app.gl.ELEMENT_ARRAY_BUFFER);const M=this.shader.mappings;if(this.buffers.position=this.makeBuffer(this.mesh.config.positions),this.bindAttrib(this.buffers.position,M.attributes.vertex,3,this.app.gl.FLOAT),this.mesh.config.normals)this.buffers.normal=this.makeBuffer(this.mesh.config.normals),this.bindAttrib(this.buffers.normal,M.attributes.normal,3,this.app.gl.FLOAT,!0);if(this.mesh.config.colors)this.buffers.color=this.makeBuffer(this.mesh.config.colors),this.bindAttrib(this.buffers.color,M.attributes.vertexColor,4,this.colorDataType||this.app.gl.UNSIGNED_BYTE);if(this.mesh.config.uvs)this.buffers.uv=this.makeBuffer(this.mesh.config.uvs),this.bindAttrib(this.buffers.uv,M.attributes.uv0,2,this.app.gl.FLOAT);this.app.gl.bindVertexArray(null)}async initializeTextures(){const{gl:C}=this.app;for(let[M,I]of Object.entries(this.shader.textures)){await I.loadImage();const N=C.createTexture();if(!N)throw new Error("failed to allocate texture");const V=I.texture;C.bindTexture(C.TEXTURE_2D,N),C.texImage2D(C.TEXTURE_2D,0,C.RGBA,I.width,I.height,0,C.RGBA,C.UNSIGNED_BYTE,V);const Q=I.config.uvClamp?C.CLAMP_TO_EDGE:C.REPEAT;C.texParameteri(C.TEXTURE_2D,C.TEXTURE_WRAP_S,Q),C.texParameteri(C.TEXTURE_2D,C.TEXTURE_WRAP_T,Q),C.texParameteri(C.TEXTURE_2D,C.TEXTURE_MAG_FILTER,C.NEAREST),C.texParameteri(C.TEXTURE_2D,C.TEXTURE_MIN_FILTER,C.NEAREST),this.buffers.textures[M]=N}}bindTextures(){const{gl:C}=this.app,M=this.app.gl.TEXTURE0,I=Object.entries(this.buffers.textures),N=[];return I.forEach(([V,Q],W)=>{const A=this.shader.mappings.uniforms[V];if(!A)return;C.activeTexture(M+W),C.bindTexture(C.TEXTURE_2D,Q),C.uniform1i(A,W),N.push(()=>{C.activeTexture(M+W),C.bindTexture(C.TEXTURE_2D,null)})}),N}bindAttrib(C,M,I,N,V=!1){const Q=this.app.gl;Q.bindBuffer(Q.ARRAY_BUFFER,C);const W=Number.isSafeInteger(M)?M:this.shader.attrib(M);if(W!==-1)Q.vertexAttribPointer(W,I,N,V,0,0),Q.enableVertexAttribArray(W);Q.bindBuffer(Q.ARRAY_BUFFER,null)}initializeShader(C,M){const I=v.invert(v.create(),this.camera.toMat4()),N=this.app.gl,{uniforms:V}=this.shader.mappings;this.shader.use(),N.uniform1f(V.time,C),N.uniform4fv(V.light0Color,[1,1,1,1]),N.uniformMatrix4fv(V.view,!1,I),N.uniformMatrix4fv(V.projection,!1,this.projectionMatrix),N.uniform3fv(V.light0,this.light.position),N.uniformMatrix4fv(V.objectToWorld,!1,M.toMat4()),N.uniformMatrix4fv(V.objectToWorldInv,!1,v.invert(v.create(),M.toMat4())),this.shader.onPrerender(this.app,C)}async onStart(C,M){M.loading("baking vectors"),M.telemetry?.addRenderers(1),M.telemetry?.addTriangles(this.mesh.config.faces.length),M.telemetry?.addVertexes(this.mesh.config.vertexCount),v.perspective(this.projectionMatrix,this.app.config.fov||45,this.app.aspect,this.app.config.zNear||0.1,this.app.config.zFar||100),this.shader.compile(),this.shader.link(),this.initializeBuffers(),this.shader.link(),await this.initializeTextures()}onRenderableUpdate(C,M){const I=this.app.gl;I.bindVertexArray(this.buffers.vao||null),I.bindBuffer(I.ELEMENT_ARRAY_BUFFER,this.buffers.faces||null),I.bindBuffer(I.ARRAY_BUFFER,this.buffers.position||null),this.initializeShader(C,M);const N=this.bindTextures();I.drawElements(this.config.drawMode??I.TRIANGLES,this.mesh.config.faces.length,this.faceDataType,0);const V=I.getError();if(V!==0)throw console.log({err:V}),new Error(`(MeshRenderer<Mesh#${this.mesh.name}>) webgl failure: ${V}`);I.bindVertexArray(null),I.bindBuffer(I.ELEMENT_ARRAY_BUFFER,null),I.bindBuffer(I.ARRAY_BUFFER,null),N.forEach((Q)=>Q())}}class I0 extends g{constructor(){super(...arguments)}panes=[];addTransform(C,M){this.panes.push({name:C,type:"transform",onChange:M})}}class N0 extends g{C;el;frameTimes=[];maxFrameTimes=100;lastFrameTime=0;activeTriangles=0;activeVertexes=0;activeRenderers=0;activeTextures=0;constructor(C,M="#telemetry"){super(C);this.app=C;if(this.el=document.querySelector(M),this.el&&location.search.includes("telemetry"))this.el.style.display="block"}insertTime(C){if(this.frameTimes.push(C),this.frameTimes.length>this.maxFrameTimes)this.frameTimes.shift()}async onStart(){this.lastFrameTime=0,this.frameTimes=[],setTimeout(()=>this.setText(),0),setInterval(()=>{this.setText()},1001)}setText(){const C=this.frameTimes.reduce((I,N)=>I+N,0)/this.frameTimes.length,M=1000/C;this.el.innerHTML=`${M.toFixed(1)} FPS (${C.toFixed(3)} ms)<br />update :: b: ${this.app.registry.onBeforeUpdate.length} | u: ${this.app.registry.onUpdate.length} | a: ${this.app.registry.onAfterUpdate.length} | d: ${this.app.registry.onDraw.length}<br />render :: mr: ${this.activeRenderers} | v: ${this.activeVertexes} | t: ${this.activeTriangles}<br />others :: tex: ${this.activeTextures}`}onAfterUpdate(C){const M=C-this.lastFrameTime;this.insertTime(M),this.lastFrameTime=C}addTriangles(C){this.activeTriangles+=C}addVertexes(C){this.activeVertexes+=C}addRenderers(C){this.activeRenderers+=C}addTextures(C){this.activeTextures+=C}}class tM{C;canvas;telemetry;gl;editor;loadingMessages=new Set(["[noeidelon] [stage 2]"]);registry={onBeforeUpdate:[],onAfterUpdate:[],onUpdate:[],onStart:[],onDraw:[]};constructor(C={}){this.config=C;try{this.canvas=document.querySelector("canvas"),this.canvas.width=window.innerWidth,this.canvas.height=window.innerHeight;const M=this.canvas.getContext("webgl2");if(!M)throw new Error("Canvas was unable to get a webgl2 context");const I=this.gl=M;if(I.viewport(0,0,I.drawingBufferWidth,I.drawingBufferHeight),this.gl.getExtension("EXT_texture_filter_anisotropic"),location.search.includes("telemetry")||C.telemetry)this.telemetry=new N0(this);if(location.search.includes("editor")||C.editor)this.editor=new I0(this)}catch(M){const I=document.querySelector("main");if(I)I.innerHTML="<div><i>your browser didn't let me set up webgl.</i></div>";throw new Error(`Unable to initialize WebGL. Your browser or machine may not support it.\n -> ${M}`)}}get aspect(){return this.canvas.clientWidth/this.canvas.clientHeight}clear(){const C=this.gl;C.clearColor(0,0,0,1),C.clearDepth(1),C.enable(C.DEPTH_TEST),C.depthFunc(C.LEQUAL),C.clear(C.COLOR_BUFFER_BIT|C.DEPTH_BUFFER_BIT)}loading(C){this.loadingMessages.add(C.toLowerCase()),document.querySelector("#loading-text").innerHTML=[...this.loadingMessages].join("<br />")}ready(){document.querySelector("#loading")?.classList.remove("loading-active")}onBeforeUpdate(C){this.registry.onBeforeUpdate.push(C)}onAfterUpdate(C){this.registry.onAfterUpdate.push(C)}onUpdate(C){this.registry.onUpdate.push(C)}onStart(C){this.registry.onStart.push(C)}onDraw(C){this.registry.onDraw.push(C)}doUpdate(C){this.registry.onBeforeUpdate.forEach((M)=>M(C,this)),this.registry.onUpdate.forEach((M)=>M(C,this)),this.registry.onAfterUpdate.forEach((M)=>M(C,this)),this.registry.onDraw.forEach((M)=>M(C,this))}async doStart(C=0){this.loading("setting launch parameters"),this.clear();try{for(let M of this.registry.onStart)await M(C,this)}catch(M){if(this.loading('[panic] <span style="color: red">failed to start noeidelon</span>'),this.telemetry)this.loading(`<span style="color: purple">${M}</span>`);return}this.ready()}async oneShot(C=0){await this.doStart(C),this.doUpdate(C)}async start(){await this.doStart();const C=(M)=>{this.doUpdate(M),requestAnimationFrame(C)};requestAnimationFrame(C)}}class i{C;static VERTEX=35633;static FRAGMENT=35632;constructor(C){this.config=C}vertexCode="";fragmentCode="";_app;program=null;mappings={};textures={};materialValues={};prerenderHooks=[];get gl(){const C=this._app?.gl;if(!C)throw new Error("GL context not defined at shader compile time.");return C}app(C){return this._app=C,this.program=C.gl.createProgram(),this}vertex(C){return this.vertexCode=C,this}fragment(C){return this.fragmentCode=C,this}prerenderHook(C){return this.prerenderHooks.push(C),this}attrib(C){return this.gl.getAttribLocation(this.program,C)}uniform(C){return this.gl.getUniformLocation(this.program,C)}generateMappings(C){return{attributes:{normal:this.attrib(C.attributes.normal),uv0:this.attrib(C.attributes.uv0),vertex:this.attrib(C.attributes.vertex),vertexColor:this.attrib(C.attributes.vertexColor)},uniforms:{albedo:this.uniform(C.uniforms.albedo),light0:this.uniform(C.uniforms.light0),light0Color:this.uniform(C.uniforms.light0Color),objectToWorld:this.uniform(C.uniforms.objectToWorld),objectToWorldInv:this.uniform(C.uniforms.objectToWorldInv),projection:this.uniform(C.uniforms.projection),texture0:this.uniform(C.uniforms.texture0),texture1:this.uniform(C.uniforms.texture1),texture2:this.uniform(C.uniforms.texture2),time:this.uniform(C.uniforms.time),view:this.uniform(C.uniforms.view)}}}attach(C,M){const I=this.gl,N=I.createShader(C);if(!N)throw new Error(`failed to init ${aM(C)} shader`);I.shaderSource(N,M),I.compileShader(N),I.attachShader(this.program,N)}addTexture(C,M){return this.textures[C]=M,this}compile(){const C=this.gl;this.attach(C.FRAGMENT_SHADER,this.fragmentCode),this.attach(C.VERTEX_SHADER,this.vertexCode)}link(){if(this.gl.linkProgram(this.program),!this.gl.getProgramParameter(this.program,this.gl.LINK_STATUS))throw new Error("Unable to initialize the shader program: "+this.gl.getProgramInfoLog(this.program));this.mappings=this.generateMappings(this.config)}bindAttrib(C,M){this.gl.bindAttribLocation(this.program,C,M)}use(){this._app?.gl.useProgram(this.program)}onPrerender(C,M){for(let I of this.prerenderHooks)I(C,this,M)}}var aM=(C)=>{switch(C){case i.FRAGMENT:return"fragment";case i.VERTEX:return"vertex";default:return"some unknown type of"}};var s0=`#version 300 es
|
|
precision highp float;uniform sampler2D u_texture_0;uniform sampler2D u_texture_1;in vec2 uv0;in vec3 normal;in vec3 light_pos;out vec4 fragColor;void main(){vec4 normalTex=texture(u_texture_1,uv0);vec3 normal=normalize(normal*normalTex.xyz);float light=dot(normal,light_pos);fragColor=vec4(1.0);fragColor.rgb=texture(u_texture_0,uv0).rgb;fragColor.rgb*=max(light,0.1);fragColor.a=1.0;}`;var b=`#version 300 es
|
|
uniform mat4 u_view;uniform mat4 u_projection;uniform mat4 u_object_to_world;uniform mat4 u_object_to_world_inv;uniform vec3 u_light_0;in vec4 a_vertex;in vec2 a_uv0;in vec3 a_normal;in vec4 a_vertex_color;out vec2 uv0;out vec3 normal;out vec4 vertex_color;out vec3 light_pos;void main(){mat4 worldInv=inverse(u_view);mat4 MVW=u_projection*u_view*u_object_to_world;gl_Position=MVW*a_vertex;uv0=a_uv0;normal=normalize(mat3(worldInv)*a_normal);vertex_color=a_vertex_color;light_pos=normalize(mat3(u_object_to_world_inv)*u_light_0);}`;var V0={attributes:{vertex:"a_vertex",uv0:"a_uv0",normal:"a_normal",vertexColor:"a_vertex_color"},uniforms:{view:"u_view",projection:"u_projection",objectToWorld:"u_object_to_world",objectToWorldInv:"u_object_to_world_inv",light0:"u_light_0",light0Color:"u_light_0_color",time:"u_time",albedo:"u_albedo",texture0:"u_texture_0",texture1:"u_texture_1",texture2:"u_texture_2"}},nI=(C)=>new i(V0).vertex(b).fragment(s0).app(C);var m0=`#version 300 es
|
|
precision highp float;in vec4 vertex_color;out vec4 fragColor;void main(){fragColor=vertex_color;}`;class Q0{C;constructor(C){this.config=C}get name(){return this.config.name}}var e0=new Q0({colors:new Uint8Array([0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,0,254,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,254,0,0,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255,0,0,254,255]),faces:new Uint8Array([0,1,2,3,4,1,5,6,4,7,8,6,4,9,10,11,7,5,0,3,1,3,5,4,5,7,6,7,12,8,4,6,9,11,13,7,14,15,16,17,18,15,19,20,18,21,22,20,18,23,24,25,21,19,14,17,15,17,19,18,19,21,20,21,26,22,18,20,23,25,27,21,28,29,30,31,32,29,33,34,32,35,36,34,32,37,38,39,35,33,28,31,29,31,33,32,33,35,34,35,40,36,32,34,37,39,41,35]),name:"src/meshes/gizmo.ply",normals:new Float32Array([-0.057735033,0.5773503,-0.5773503,0.057735033,-0.5773503,-0.5773503,-0.057735033,-0.5773503,-0.5773503,0.057735033,0.5773503,-0.5773503,0.057735033,-0.5773503,0.5773503,0.057735033,0.5773503,0.5773503,-0.057735033,-0.5773503,0.5773503,-0.057735033,0.5773503,0.5773503,-0.057735033,-0.5773503,-0.5773503,-0.057735033,-0.5773503,-0.5773503,0.057735033,-0.5773503,-0.5773503,0.057735033,0.5773503,-0.5773503,-0.057735033,0.5773503,-0.5773503,-0.057735033,0.5773503,-0.5773503,-0.5773503,0.5773503,-0.057735033,0.5773503,-0.5773503,-0.057735033,-0.5773503,-0.5773503,-0.057735033,0.5773503,0.5773503,-0.057735033,0.5773503,-0.5773503,0.057735033,0.5773503,0.5773503,0.057735033,-0.5773503,-0.5773503,0.057735033,-0.5773503,0.5773503,0.057735033,-0.5773503,-0.5773503,-0.057735033,-0.5773503,-0.5773503,-0.057735033,0.5773503,-0.5773503,-0.057735033,0.5773503,0.5773503,-0.057735033,-0.5773503,0.5773503,-0.057735033,-0.5773503,0.5773503,-0.057735033,-0.5773503,0.057735033,-0.5773503,0.5773503,-0.057735033,-0.5773503,-0.5773503,-0.057735033,-0.5773503,0.5773503,0.057735033,-0.5773503,0.5773503,-0.057735033,0.5773503,0.5773503,0.057735033,0.5773503,-0.5773503,-0.057735033,0.5773503,-0.5773503,0.057735033,0.5773503,-0.5773503,-0.057735033,-0.5773503,-0.5773503,-0.057735033,-0.5773503,0.5773503,-0.057735033,-0.5773503,0.5773503,0.057735033,-0.5773503,-0.5773503,0.057735033,-0.5773503,-0.5773503,0.057735033,-0.5773503]),positions:new Float32Array([0,0.05,-0.05,1,-0.05,-0.05,0,-0.05,-0.05,1,0.05,-0.05,1,-0.05,0.05,1,0.05,0.05,0,-0.05,0.05,0,0.05,0.05,0,-0.05,-0.05,0,-0.05,-0.05,1,-0.05,-0.05,1,0.05,-0.05,0,0.05,-0.05,0,0.05,-0.05,-0.05,0.05,0,0.05,-0.05,0,-0.05,-0.05,0,0.05,0.05,0,0.05,-0.05,1,0.05,0.05,1,-0.05,-0.05,1,-0.05,0.05,1,-0.05,-0.05,0,-0.05,-0.05,0,0.05,-0.05,0,0.05,0.05,0,-0.05,0.05,0,-0.05,0.05,0,-0.05,1,-0.05,0.05,0,-0.05,-0.05,0,-0.05,0.05,1,-0.05,0.05,0,0.05,0.05,1,0.05,-0.05,0,0.05,-0.05,1,0.05,-0.05,0,-0.05,-0.05,0,-0.05,0.05,0,-0.05,0.05,1,-0.05,-0.05,1,-0.05,-0.05,1,-0.05]),uvs:new Float32Array([0.625,0,0.375,0.25,0.375,0,0.625,0.25,0.375,0.5,0.625,0.5,0.375,0.75,0.625,0.75,0.375,1,0.125,0.75,0.125,0.5,0.875,0.5,0.625,1,0.875,0.75,0.625,0,0.375,0.25,0.375,0,0.625,0.25,0.375,0.5,0.625,0.5,0.375,0.75,0.625,0.75,0.375,1,0.125,0.75,0.125,0.5,0.875,0.5,0.625,1,0.875,0.75,0.625,0,0.375,0.25,0.375,0,0.625,0.25,0.375,0.5,0.625,0.5,0.375,0.75,0.625,0.75,0.375,1,0.125,0.75,0.125,0.5,0.875,0.5,0.625,1,0.875,0.75]),vertexCount:42});var NI=(C)=>new i(V0).vertex(b).fragment(m0).app(C),b0=(C,M,I)=>{const N=new l(I?.position,I?.rotation),V=new M0(C,e0,NI(C),M).configure({});new W0(C,N,V)};class W0 extends g{C;M;I;constructor(C,M,I,N=!1){super(C);this.app=C;this.transform=M;this.renderer=I;if(N)b0(C,I.camera,M)}onDraw(C){this.renderer.onRenderableUpdate(C,this.transform)}}class VI{C;M;I;texture=null;width=0;height=0;constructor(C,M,I={}){this.app=C;this.url=M;this.config=I}setImage(C,M,I){return this.texture=C,this.width=M,this.height=I,this}async loadImage(){if(this.url==="manual"){if(this.texture===null)throw new Error("manual specified, but texture was not ready...");return}if(this.texture!==null)return;this.app.telemetry?.addTextures(-1),this.app.loading("Fetching textures...");const C=new Image;return new Promise((M,I)=>{C.onload=async()=>{this.texture=await createImageBitmap(C,{imageOrientation:"flipY"}),this.width=this.texture.width,this.height=this.texture.height,this.app.telemetry?.addTextures(2),M(void 0)},C.onerror=(N)=>{this.app.telemetry?.addTextures(1),I(new Error(`texture load of ${this.url} failed: ${N.toString()}`))},C.src=this.url})}}var NN=`#version 300 es
|
|
uniform mat4 u_view;uniform mat4 u_projection;uniform mat4 u_object_to_world;uniform mat4 u_object_to_world_inv;uniform vec3 u_light_0;in vec4 a_vertex;in vec2 a_uv0;in vec3 a_normal;in vec4 a_vertex_color;out vec2 uv0;out vec3 normal;out vec4 vertex_color;out vec3 light_pos;
|
|
#define ROUNDING_FACTOR 230.0f
|
|
void main(){mat4 worldInv=inverse(u_view);mat4 MVW=u_projection*u_view*u_object_to_world;vec4 realPosition=MVW*a_vertex;realPosition.xyz=round(vec3(realPosition.xyz*ROUNDING_FACTOR))/ROUNDING_FACTOR;gl_Position=realPosition;uv0=a_uv0;normal=normalize(mat3(worldInv)*a_normal);vertex_color=a_vertex_color;light_pos=normalize(mat3(u_object_to_world_inv)*u_light_0);}`;
|
|
export{f as a,l as b,ZI as c,$I as d,M0 as e,tM as f,i as g,s0 as h,nI as i,Q0 as j,W0 as k,VI as l,NN as m};
|