3d/html/003-scene/main.js

6 lines
45 KiB
JavaScript

var UJ=Object.defineProperty;var VB=(B,J)=>{for(var V in J)UJ(B,V,{get:J[V],enumerable:!0,configurable:!0,set:(I)=>J[V]=()=>I})};var P=0.000001,j=typeof Float32Array!=="undefined"?Float32Array:Array,n=Math.random,GV=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var B=0,J=arguments.length;while(J--)B+=arguments[J]*arguments[J];return Math.sqrt(B)};function QB(){var B=new j(9);if(j!=Float32Array)B[1]=0,B[2]=0,B[3]=0,B[5]=0,B[6]=0,B[7]=0;return B[0]=1,B[4]=1,B[8]=1,B}var g={};VB(g,{transpose:()=>{{return SJ}},translate:()=>{{return GJ}},targetTo:()=>{{return rJ}},subtract:()=>{{return DB}},sub:()=>{{return tJ}},str:()=>{{return zJ}},set:()=>{{return FJ}},scale:()=>{{return _J}},rotateZ:()=>{{return TJ}},rotateY:()=>{{return DJ}},rotateX:()=>{{return PJ}},rotate:()=>{{return HJ}},perspectiveZO:()=>{{return dJ}},perspectiveNO:()=>{{return HB}},perspectiveFromFieldOfView:()=>{{return lJ}},perspective:()=>{{return nJ}},orthoZO:()=>{{return iJ}},orthoNO:()=>{{return PB}},ortho:()=>{{return sJ}},multiplyScalarAndAdd:()=>{{return bJ}},multiplyScalar:()=>{{return eJ}},multiply:()=>{{return $B}},mul:()=>{{return aJ}},lookAt:()=>{{return yJ}},invert:()=>{{return QJ}},identity:()=>{{return KB}},getTranslation:()=>{{return hJ}},getScaling:()=>{{return _B}},getRotation:()=>{{return gJ}},frustum:()=>{{return cJ}},fromZRotation:()=>{{return AJ}},fromYRotation:()=>{{return CJ}},fromXRotation:()=>{{return pJ}},fromValues:()=>{{return EJ}},fromTranslation:()=>{{return jJ}},fromScaling:()=>{{return qJ}},fromRotationTranslationScaleOrigin:()=>{{return fJ}},fromRotationTranslationScale:()=>{{return wJ}},fromRotationTranslation:()=>{{return GB}},fromRotation:()=>{{return ZJ}},fromQuat2:()=>{{return OJ}},fromQuat:()=>{{return vJ}},frob:()=>{{return xJ}},exactEquals:()=>{{return uJ}},equals:()=>{{return oJ}},determinant:()=>{{return $J}},create:()=>{{return YJ}},copy:()=>{{return MJ}},clone:()=>{{return XJ}},adjoint:()=>{{return KJ}},add:()=>{{return mJ}}});function YJ(){var B=new j(16);if(j!=Float32Array)B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[11]=0,B[12]=0,B[13]=0,B[14]=0;return B[0]=1,B[5]=1,B[10]=1,B[15]=1,B}function XJ(B){var J=new j(16);return J[0]=B[0],J[1]=B[1],J[2]=B[2],J[3]=B[3],J[4]=B[4],J[5]=B[5],J[6]=B[6],J[7]=B[7],J[8]=B[8],J[9]=B[9],J[10]=B[10],J[11]=B[11],J[12]=B[12],J[13]=B[13],J[14]=B[14],J[15]=B[15],J}function MJ(B,J){return B[0]=J[0],B[1]=J[1],B[2]=J[2],B[3]=J[3],B[4]=J[4],B[5]=J[5],B[6]=J[6],B[7]=J[7],B[8]=J[8],B[9]=J[9],B[10]=J[10],B[11]=J[11],B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15],B}function EJ(B,J,V,I,L,N,R,W,U,k,Y,M,F,E,Q,S){var X=new j(16);return X[0]=B,X[1]=J,X[2]=V,X[3]=I,X[4]=L,X[5]=N,X[6]=R,X[7]=W,X[8]=U,X[9]=k,X[10]=Y,X[11]=M,X[12]=F,X[13]=E,X[14]=Q,X[15]=S,X}function FJ(B,J,V,I,L,N,R,W,U,k,Y,M,F,E,Q,S,X){return B[0]=J,B[1]=V,B[2]=I,B[3]=L,B[4]=N,B[5]=R,B[6]=W,B[7]=U,B[8]=k,B[9]=Y,B[10]=M,B[11]=F,B[12]=E,B[13]=Q,B[14]=S,B[15]=X,B}function KB(B){return B[0]=1,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=1,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=1,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function SJ(B,J){if(B===J){var V=J[1],I=J[2],L=J[3],N=J[6],R=J[7],W=J[11];B[1]=J[4],B[2]=J[8],B[3]=J[12],B[4]=V,B[6]=J[9],B[7]=J[13],B[8]=I,B[9]=N,B[11]=J[14],B[12]=L,B[13]=R,B[14]=W}else B[0]=J[0],B[1]=J[4],B[2]=J[8],B[3]=J[12],B[4]=J[1],B[5]=J[5],B[6]=J[9],B[7]=J[13],B[8]=J[2],B[9]=J[6],B[10]=J[10],B[11]=J[14],B[12]=J[3],B[13]=J[7],B[14]=J[11],B[15]=J[15];return B}function QJ(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=J[4],W=J[5],U=J[6],k=J[7],Y=J[8],M=J[9],F=J[10],E=J[11],Q=J[12],S=J[13],X=J[14],K=J[15],D=V*W-I*R,H=V*U-L*R,_=V*k-N*R,$=I*U-L*W,G=I*k-N*W,C=L*k-N*U,q=Y*S-M*Q,Z=Y*X-F*Q,p=Y*K-E*Q,A=M*X-F*S,O=M*K-E*S,h=F*K-E*X,T=D*h-H*O+_*A+$*p-G*Z+C*q;if(!T)return null;return T=1/T,B[0]=(W*h-U*O+k*A)*T,B[1]=(L*O-I*h-N*A)*T,B[2]=(S*C-X*G+K*$)*T,B[3]=(F*G-M*C-E*$)*T,B[4]=(U*p-R*h-k*Z)*T,B[5]=(V*h-L*p+N*Z)*T,B[6]=(X*_-Q*C-K*H)*T,B[7]=(Y*C-F*_+E*H)*T,B[8]=(R*O-W*p+k*q)*T,B[9]=(I*p-V*O-N*q)*T,B[10]=(Q*G-S*_+K*D)*T,B[11]=(M*_-Y*G-E*D)*T,B[12]=(W*Z-R*A-U*q)*T,B[13]=(V*A-I*Z+L*q)*T,B[14]=(S*H-Q*$-X*D)*T,B[15]=(Y*$-M*H+F*D)*T,B}function KJ(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=J[4],W=J[5],U=J[6],k=J[7],Y=J[8],M=J[9],F=J[10],E=J[11],Q=J[12],S=J[13],X=J[14],K=J[15];return B[0]=W*(F*K-E*X)-M*(U*K-k*X)+S*(U*E-k*F),B[1]=-(I*(F*K-E*X)-M*(L*K-N*X)+S*(L*E-N*F)),B[2]=I*(U*K-k*X)-W*(L*K-N*X)+S*(L*k-N*U),B[3]=-(I*(U*E-k*F)-W*(L*E-N*F)+M*(L*k-N*U)),B[4]=-(R*(F*K-E*X)-Y*(U*K-k*X)+Q*(U*E-k*F)),B[5]=V*(F*K-E*X)-Y*(L*K-N*X)+Q*(L*E-N*F),B[6]=-(V*(U*K-k*X)-R*(L*K-N*X)+Q*(L*k-N*U)),B[7]=V*(U*E-k*F)-R*(L*E-N*F)+Y*(L*k-N*U),B[8]=R*(M*K-E*S)-Y*(W*K-k*S)+Q*(W*E-k*M),B[9]=-(V*(M*K-E*S)-Y*(I*K-N*S)+Q*(I*E-N*M)),B[10]=V*(W*K-k*S)-R*(I*K-N*S)+Q*(I*k-N*W),B[11]=-(V*(W*E-k*M)-R*(I*E-N*M)+Y*(I*k-N*W)),B[12]=-(R*(M*X-F*S)-Y*(W*X-U*S)+Q*(W*F-U*M)),B[13]=V*(M*X-F*S)-Y*(I*X-L*S)+Q*(I*F-L*M),B[14]=-(V*(W*X-U*S)-R*(I*X-L*S)+Q*(I*U-L*W)),B[15]=V*(W*F-U*M)-R*(I*F-L*M)+Y*(I*U-L*W),B}function $J(B){var J=B[0],V=B[1],I=B[2],L=B[3],N=B[4],R=B[5],W=B[6],U=B[7],k=B[8],Y=B[9],M=B[10],F=B[11],E=B[12],Q=B[13],S=B[14],X=B[15],K=J*R-V*N,D=J*W-I*N,H=J*U-L*N,_=V*W-I*R,$=V*U-L*R,G=I*U-L*W,C=k*Q-Y*E,q=k*S-M*E,Z=k*X-F*E,p=Y*S-M*Q,A=Y*X-F*Q,O=M*X-F*S;return K*O-D*A+H*p+_*Z-$*q+G*C}function $B(B,J,V){var I=J[0],L=J[1],N=J[2],R=J[3],W=J[4],U=J[5],k=J[6],Y=J[7],M=J[8],F=J[9],E=J[10],Q=J[11],S=J[12],X=J[13],K=J[14],D=J[15],H=V[0],_=V[1],$=V[2],G=V[3];return B[0]=H*I+_*W+$*M+G*S,B[1]=H*L+_*U+$*F+G*X,B[2]=H*N+_*k+$*E+G*K,B[3]=H*R+_*Y+$*Q+G*D,H=V[4],_=V[5],$=V[6],G=V[7],B[4]=H*I+_*W+$*M+G*S,B[5]=H*L+_*U+$*F+G*X,B[6]=H*N+_*k+$*E+G*K,B[7]=H*R+_*Y+$*Q+G*D,H=V[8],_=V[9],$=V[10],G=V[11],B[8]=H*I+_*W+$*M+G*S,B[9]=H*L+_*U+$*F+G*X,B[10]=H*N+_*k+$*E+G*K,B[11]=H*R+_*Y+$*Q+G*D,H=V[12],_=V[13],$=V[14],G=V[15],B[12]=H*I+_*W+$*M+G*S,B[13]=H*L+_*U+$*F+G*X,B[14]=H*N+_*k+$*E+G*K,B[15]=H*R+_*Y+$*Q+G*D,B}function GJ(B,J,V){var I=V[0],L=V[1],N=V[2],R,W,U,k,Y,M,F,E,Q,S,X,K;if(J===B)B[12]=J[0]*I+J[4]*L+J[8]*N+J[12],B[13]=J[1]*I+J[5]*L+J[9]*N+J[13],B[14]=J[2]*I+J[6]*L+J[10]*N+J[14],B[15]=J[3]*I+J[7]*L+J[11]*N+J[15];else R=J[0],W=J[1],U=J[2],k=J[3],Y=J[4],M=J[5],F=J[6],E=J[7],Q=J[8],S=J[9],X=J[10],K=J[11],B[0]=R,B[1]=W,B[2]=U,B[3]=k,B[4]=Y,B[5]=M,B[6]=F,B[7]=E,B[8]=Q,B[9]=S,B[10]=X,B[11]=K,B[12]=R*I+Y*L+Q*N+J[12],B[13]=W*I+M*L+S*N+J[13],B[14]=U*I+F*L+X*N+J[14],B[15]=k*I+E*L+K*N+J[15];return B}function _J(B,J,V){var I=V[0],L=V[1],N=V[2];return B[0]=J[0]*I,B[1]=J[1]*I,B[2]=J[2]*I,B[3]=J[3]*I,B[4]=J[4]*L,B[5]=J[5]*L,B[6]=J[6]*L,B[7]=J[7]*L,B[8]=J[8]*N,B[9]=J[9]*N,B[10]=J[10]*N,B[11]=J[11]*N,B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15],B}function HJ(B,J,V,I){var L=I[0],N=I[1],R=I[2],W=Math.hypot(L,N,R),U,k,Y,M,F,E,Q,S,X,K,D,H,_,$,G,C,q,Z,p,A,O,h,T,w;if(W<P)return null;if(W=1/W,L*=W,N*=W,R*=W,U=Math.sin(V),k=Math.cos(V),Y=1-k,M=J[0],F=J[1],E=J[2],Q=J[3],S=J[4],X=J[5],K=J[6],D=J[7],H=J[8],_=J[9],$=J[10],G=J[11],C=L*L*Y+k,q=N*L*Y+R*U,Z=R*L*Y-N*U,p=L*N*Y-R*U,A=N*N*Y+k,O=R*N*Y+L*U,h=L*R*Y+N*U,T=N*R*Y-L*U,w=R*R*Y+k,B[0]=M*C+S*q+H*Z,B[1]=F*C+X*q+_*Z,B[2]=E*C+K*q+$*Z,B[3]=Q*C+D*q+G*Z,B[4]=M*p+S*A+H*O,B[5]=F*p+X*A+_*O,B[6]=E*p+K*A+$*O,B[7]=Q*p+D*A+G*O,B[8]=M*h+S*T+H*w,B[9]=F*h+X*T+_*w,B[10]=E*h+K*T+$*w,B[11]=Q*h+D*T+G*w,J!==B)B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15];return B}function PJ(B,J,V){var I=Math.sin(V),L=Math.cos(V),N=J[4],R=J[5],W=J[6],U=J[7],k=J[8],Y=J[9],M=J[10],F=J[11];if(J!==B)B[0]=J[0],B[1]=J[1],B[2]=J[2],B[3]=J[3],B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15];return B[4]=N*L+k*I,B[5]=R*L+Y*I,B[6]=W*L+M*I,B[7]=U*L+F*I,B[8]=k*L-N*I,B[9]=Y*L-R*I,B[10]=M*L-W*I,B[11]=F*L-U*I,B}function DJ(B,J,V){var I=Math.sin(V),L=Math.cos(V),N=J[0],R=J[1],W=J[2],U=J[3],k=J[8],Y=J[9],M=J[10],F=J[11];if(J!==B)B[4]=J[4],B[5]=J[5],B[6]=J[6],B[7]=J[7],B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15];return B[0]=N*L-k*I,B[1]=R*L-Y*I,B[2]=W*L-M*I,B[3]=U*L-F*I,B[8]=N*I+k*L,B[9]=R*I+Y*L,B[10]=W*I+M*L,B[11]=U*I+F*L,B}function TJ(B,J,V){var I=Math.sin(V),L=Math.cos(V),N=J[0],R=J[1],W=J[2],U=J[3],k=J[4],Y=J[5],M=J[6],F=J[7];if(J!==B)B[8]=J[8],B[9]=J[9],B[10]=J[10],B[11]=J[11],B[12]=J[12],B[13]=J[13],B[14]=J[14],B[15]=J[15];return B[0]=N*L+k*I,B[1]=R*L+Y*I,B[2]=W*L+M*I,B[3]=U*L+F*I,B[4]=k*L-N*I,B[5]=Y*L-R*I,B[6]=M*L-W*I,B[7]=F*L-U*I,B}function jJ(B,J){return B[0]=1,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=1,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=1,B[11]=0,B[12]=J[0],B[13]=J[1],B[14]=J[2],B[15]=1,B}function qJ(B,J){return B[0]=J[0],B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=J[1],B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=J[2],B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function ZJ(B,J,V){var I=V[0],L=V[1],N=V[2],R=Math.hypot(I,L,N),W,U,k;if(R<P)return null;return R=1/R,I*=R,L*=R,N*=R,W=Math.sin(J),U=Math.cos(J),k=1-U,B[0]=I*I*k+U,B[1]=L*I*k+N*W,B[2]=N*I*k-L*W,B[3]=0,B[4]=I*L*k-N*W,B[5]=L*L*k+U,B[6]=N*L*k+I*W,B[7]=0,B[8]=I*N*k+L*W,B[9]=L*N*k-I*W,B[10]=N*N*k+U,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function pJ(B,J){var V=Math.sin(J),I=Math.cos(J);return B[0]=1,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=I,B[6]=V,B[7]=0,B[8]=0,B[9]=-V,B[10]=I,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function CJ(B,J){var V=Math.sin(J),I=Math.cos(J);return B[0]=I,B[1]=0,B[2]=-V,B[3]=0,B[4]=0,B[5]=1,B[6]=0,B[7]=0,B[8]=V,B[9]=0,B[10]=I,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function AJ(B,J){var V=Math.sin(J),I=Math.cos(J);return B[0]=I,B[1]=V,B[2]=0,B[3]=0,B[4]=-V,B[5]=I,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=1,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function GB(B,J,V){var I=J[0],L=J[1],N=J[2],R=J[3],W=I+I,U=L+L,k=N+N,Y=I*W,M=I*U,F=I*k,E=L*U,Q=L*k,S=N*k,X=R*W,K=R*U,D=R*k;return B[0]=1-(E+S),B[1]=M+D,B[2]=F-K,B[3]=0,B[4]=M-D,B[5]=1-(Y+S),B[6]=Q+X,B[7]=0,B[8]=F+K,B[9]=Q-X,B[10]=1-(Y+E),B[11]=0,B[12]=V[0],B[13]=V[1],B[14]=V[2],B[15]=1,B}function OJ(B,J){var V=new j(3),I=-J[0],L=-J[1],N=-J[2],R=J[3],W=J[4],U=J[5],k=J[6],Y=J[7],M=I*I+L*L+N*N+R*R;if(M>0)V[0]=(W*R+Y*I+U*N-k*L)*2/M,V[1]=(U*R+Y*L+k*I-W*N)*2/M,V[2]=(k*R+Y*N+W*L-U*I)*2/M;else V[0]=(W*R+Y*I+U*N-k*L)*2,V[1]=(U*R+Y*L+k*I-W*N)*2,V[2]=(k*R+Y*N+W*L-U*I)*2;return GB(B,J,V),B}function hJ(B,J){return B[0]=J[12],B[1]=J[13],B[2]=J[14],B}function _B(B,J){var V=J[0],I=J[1],L=J[2],N=J[4],R=J[5],W=J[6],U=J[8],k=J[9],Y=J[10];return B[0]=Math.hypot(V,I,L),B[1]=Math.hypot(N,R,W),B[2]=Math.hypot(U,k,Y),B}function gJ(B,J){var V=new j(3);_B(V,J);var I=1/V[0],L=1/V[1],N=1/V[2],R=J[0]*I,W=J[1]*L,U=J[2]*N,k=J[4]*I,Y=J[5]*L,M=J[6]*N,F=J[8]*I,E=J[9]*L,Q=J[10]*N,S=R+Y+Q,X=0;if(S>0)X=Math.sqrt(S+1)*2,B[3]=0.25*X,B[0]=(M-E)/X,B[1]=(F-U)/X,B[2]=(W-k)/X;else if(R>Y&&R>Q)X=Math.sqrt(1+R-Y-Q)*2,B[3]=(M-E)/X,B[0]=0.25*X,B[1]=(W+k)/X,B[2]=(F+U)/X;else if(Y>Q)X=Math.sqrt(1+Y-R-Q)*2,B[3]=(F-U)/X,B[0]=(W+k)/X,B[1]=0.25*X,B[2]=(M+E)/X;else X=Math.sqrt(1+Q-R-Y)*2,B[3]=(W-k)/X,B[0]=(F+U)/X,B[1]=(M+E)/X,B[2]=0.25*X;return B}function wJ(B,J,V,I){var L=J[0],N=J[1],R=J[2],W=J[3],U=L+L,k=N+N,Y=R+R,M=L*U,F=L*k,E=L*Y,Q=N*k,S=N*Y,X=R*Y,K=W*U,D=W*k,H=W*Y,_=I[0],$=I[1],G=I[2];return B[0]=(1-(Q+X))*_,B[1]=(F+H)*_,B[2]=(E-D)*_,B[3]=0,B[4]=(F-H)*$,B[5]=(1-(M+X))*$,B[6]=(S+K)*$,B[7]=0,B[8]=(E+D)*G,B[9]=(S-K)*G,B[10]=(1-(M+Q))*G,B[11]=0,B[12]=V[0],B[13]=V[1],B[14]=V[2],B[15]=1,B}function fJ(B,J,V,I,L){var N=J[0],R=J[1],W=J[2],U=J[3],k=N+N,Y=R+R,M=W+W,F=N*k,E=N*Y,Q=N*M,S=R*Y,X=R*M,K=W*M,D=U*k,H=U*Y,_=U*M,$=I[0],G=I[1],C=I[2],q=L[0],Z=L[1],p=L[2],A=(1-(S+K))*$,O=(E+_)*$,h=(Q-H)*$,T=(E-_)*G,w=(1-(F+K))*G,i=(X+D)*G,y=(Q+H)*C,FB=(X-D)*C,SB=(1-(F+S))*C;return B[0]=A,B[1]=O,B[2]=h,B[3]=0,B[4]=T,B[5]=w,B[6]=i,B[7]=0,B[8]=y,B[9]=FB,B[10]=SB,B[11]=0,B[12]=V[0]+q-(A*q+T*Z+y*p),B[13]=V[1]+Z-(O*q+w*Z+FB*p),B[14]=V[2]+p-(h*q+i*Z+SB*p),B[15]=1,B}function vJ(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=V+V,W=I+I,U=L+L,k=V*R,Y=I*R,M=I*W,F=L*R,E=L*W,Q=L*U,S=N*R,X=N*W,K=N*U;return B[0]=1-M-Q,B[1]=Y+K,B[2]=F-X,B[3]=0,B[4]=Y-K,B[5]=1-k-Q,B[6]=E+S,B[7]=0,B[8]=F+X,B[9]=E-S,B[10]=1-k-M,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function cJ(B,J,V,I,L,N,R){var W=1/(V-J),U=1/(L-I),k=1/(N-R);return B[0]=N*2*W,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=N*2*U,B[6]=0,B[7]=0,B[8]=(V+J)*W,B[9]=(L+I)*U,B[10]=(R+N)*k,B[11]=-1,B[12]=0,B[13]=0,B[14]=R*N*2*k,B[15]=0,B}function HB(B,J,V,I,L){var N=1/Math.tan(J/2),R;if(B[0]=N/V,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=N,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[11]=-1,B[12]=0,B[13]=0,B[15]=0,L!=null&&L!==Infinity)R=1/(I-L),B[10]=(L+I)*R,B[14]=2*L*I*R;else B[10]=-1,B[14]=-2*I;return B}function dJ(B,J,V,I,L){var N=1/Math.tan(J/2),R;if(B[0]=N/V,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=N,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[11]=-1,B[12]=0,B[13]=0,B[15]=0,L!=null&&L!==Infinity)R=1/(I-L),B[10]=L*R,B[14]=L*I*R;else B[10]=-1,B[14]=-I;return B}function lJ(B,J,V,I){var L=Math.tan(J.upDegrees*Math.PI/180),N=Math.tan(J.downDegrees*Math.PI/180),R=Math.tan(J.leftDegrees*Math.PI/180),W=Math.tan(J.rightDegrees*Math.PI/180),U=2/(R+W),k=2/(L+N);return B[0]=U,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=k,B[6]=0,B[7]=0,B[8]=-((R-W)*U*0.5),B[9]=(L-N)*k*0.5,B[10]=I/(V-I),B[11]=-1,B[12]=0,B[13]=0,B[14]=I*V/(V-I),B[15]=0,B}function PB(B,J,V,I,L,N,R){var W=1/(J-V),U=1/(I-L),k=1/(N-R);return B[0]=-2*W,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=-2*U,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=2*k,B[11]=0,B[12]=(J+V)*W,B[13]=(L+I)*U,B[14]=(R+N)*k,B[15]=1,B}function iJ(B,J,V,I,L,N,R){var W=1/(J-V),U=1/(I-L),k=1/(N-R);return B[0]=-2*W,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=-2*U,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=k,B[11]=0,B[12]=(J+V)*W,B[13]=(L+I)*U,B[14]=N*k,B[15]=1,B}function yJ(B,J,V,I){var L,N,R,W,U,k,Y,M,F,E,Q=J[0],S=J[1],X=J[2],K=I[0],D=I[1],H=I[2],_=V[0],$=V[1],G=V[2];if(Math.abs(Q-_)<P&&Math.abs(S-$)<P&&Math.abs(X-G)<P)return KB(B);if(Y=Q-_,M=S-$,F=X-G,E=1/Math.hypot(Y,M,F),Y*=E,M*=E,F*=E,L=D*F-H*M,N=H*Y-K*F,R=K*M-D*Y,E=Math.hypot(L,N,R),!E)L=0,N=0,R=0;else E=1/E,L*=E,N*=E,R*=E;if(W=M*R-F*N,U=F*L-Y*R,k=Y*N-M*L,E=Math.hypot(W,U,k),!E)W=0,U=0,k=0;else E=1/E,W*=E,U*=E,k*=E;return B[0]=L,B[1]=W,B[2]=Y,B[3]=0,B[4]=N,B[5]=U,B[6]=M,B[7]=0,B[8]=R,B[9]=k,B[10]=F,B[11]=0,B[12]=-(L*Q+N*S+R*X),B[13]=-(W*Q+U*S+k*X),B[14]=-(Y*Q+M*S+F*X),B[15]=1,B}function rJ(B,J,V,I){var L=J[0],N=J[1],R=J[2],W=I[0],U=I[1],k=I[2],Y=L-V[0],M=N-V[1],F=R-V[2],E=Y*Y+M*M+F*F;if(E>0)E=1/Math.sqrt(E),Y*=E,M*=E,F*=E;var Q=U*F-k*M,S=k*Y-W*F,X=W*M-U*Y;if(E=Q*Q+S*S+X*X,E>0)E=1/Math.sqrt(E),Q*=E,S*=E,X*=E;return B[0]=Q,B[1]=S,B[2]=X,B[3]=0,B[4]=M*X-F*S,B[5]=F*Q-Y*X,B[6]=Y*S-M*Q,B[7]=0,B[8]=Y,B[9]=M,B[10]=F,B[11]=0,B[12]=L,B[13]=N,B[14]=R,B[15]=1,B}function zJ(B){return"mat4("+B[0]+", "+B[1]+", "+B[2]+", "+B[3]+", "+B[4]+", "+B[5]+", "+B[6]+", "+B[7]+", "+B[8]+", "+B[9]+", "+B[10]+", "+B[11]+", "+B[12]+", "+B[13]+", "+B[14]+", "+B[15]+")"}function xJ(B){return Math.hypot(B[0],B[1],B[2],B[3],B[4],B[5],B[6],B[7],B[8],B[9],B[10],B[11],B[12],B[13],B[14],B[15])}function mJ(B,J,V){return B[0]=J[0]+V[0],B[1]=J[1]+V[1],B[2]=J[2]+V[2],B[3]=J[3]+V[3],B[4]=J[4]+V[4],B[5]=J[5]+V[5],B[6]=J[6]+V[6],B[7]=J[7]+V[7],B[8]=J[8]+V[8],B[9]=J[9]+V[9],B[10]=J[10]+V[10],B[11]=J[11]+V[11],B[12]=J[12]+V[12],B[13]=J[13]+V[13],B[14]=J[14]+V[14],B[15]=J[15]+V[15],B}function DB(B,J,V){return B[0]=J[0]-V[0],B[1]=J[1]-V[1],B[2]=J[2]-V[2],B[3]=J[3]-V[3],B[4]=J[4]-V[4],B[5]=J[5]-V[5],B[6]=J[6]-V[6],B[7]=J[7]-V[7],B[8]=J[8]-V[8],B[9]=J[9]-V[9],B[10]=J[10]-V[10],B[11]=J[11]-V[11],B[12]=J[12]-V[12],B[13]=J[13]-V[13],B[14]=J[14]-V[14],B[15]=J[15]-V[15],B}function eJ(B,J,V){return B[0]=J[0]*V,B[1]=J[1]*V,B[2]=J[2]*V,B[3]=J[3]*V,B[4]=J[4]*V,B[5]=J[5]*V,B[6]=J[6]*V,B[7]=J[7]*V,B[8]=J[8]*V,B[9]=J[9]*V,B[10]=J[10]*V,B[11]=J[11]*V,B[12]=J[12]*V,B[13]=J[13]*V,B[14]=J[14]*V,B[15]=J[15]*V,B}function bJ(B,J,V,I){return B[0]=J[0]+V[0]*I,B[1]=J[1]+V[1]*I,B[2]=J[2]+V[2]*I,B[3]=J[3]+V[3]*I,B[4]=J[4]+V[4]*I,B[5]=J[5]+V[5]*I,B[6]=J[6]+V[6]*I,B[7]=J[7]+V[7]*I,B[8]=J[8]+V[8]*I,B[9]=J[9]+V[9]*I,B[10]=J[10]+V[10]*I,B[11]=J[11]+V[11]*I,B[12]=J[12]+V[12]*I,B[13]=J[13]+V[13]*I,B[14]=J[14]+V[14]*I,B[15]=J[15]+V[15]*I,B}function uJ(B,J){return B[0]===J[0]&&B[1]===J[1]&&B[2]===J[2]&&B[3]===J[3]&&B[4]===J[4]&&B[5]===J[5]&&B[6]===J[6]&&B[7]===J[7]&&B[8]===J[8]&&B[9]===J[9]&&B[10]===J[10]&&B[11]===J[11]&&B[12]===J[12]&&B[13]===J[13]&&B[14]===J[14]&&B[15]===J[15]}function oJ(B,J){var V=B[0],I=B[1],L=B[2],N=B[3],R=B[4],W=B[5],U=B[6],k=B[7],Y=B[8],M=B[9],F=B[10],E=B[11],Q=B[12],S=B[13],X=B[14],K=B[15],D=J[0],H=J[1],_=J[2],$=J[3],G=J[4],C=J[5],q=J[6],Z=J[7],p=J[8],A=J[9],O=J[10],h=J[11],T=J[12],w=J[13],i=J[14],y=J[15];return Math.abs(V-D)<=P*Math.max(1,Math.abs(V),Math.abs(D))&&Math.abs(I-H)<=P*Math.max(1,Math.abs(I),Math.abs(H))&&Math.abs(L-_)<=P*Math.max(1,Math.abs(L),Math.abs(_))&&Math.abs(N-$)<=P*Math.max(1,Math.abs(N),Math.abs($))&&Math.abs(R-G)<=P*Math.max(1,Math.abs(R),Math.abs(G))&&Math.abs(W-C)<=P*Math.max(1,Math.abs(W),Math.abs(C))&&Math.abs(U-q)<=P*Math.max(1,Math.abs(U),Math.abs(q))&&Math.abs(k-Z)<=P*Math.max(1,Math.abs(k),Math.abs(Z))&&Math.abs(Y-p)<=P*Math.max(1,Math.abs(Y),Math.abs(p))&&Math.abs(M-A)<=P*Math.max(1,Math.abs(M),Math.abs(A))&&Math.abs(F-O)<=P*Math.max(1,Math.abs(F),Math.abs(O))&&Math.abs(E-h)<=P*Math.max(1,Math.abs(E),Math.abs(h))&&Math.abs(Q-T)<=P*Math.max(1,Math.abs(Q),Math.abs(T))&&Math.abs(S-w)<=P*Math.max(1,Math.abs(S),Math.abs(w))&&Math.abs(X-i)<=P*Math.max(1,Math.abs(X),Math.abs(i))&&Math.abs(K-y)<=P*Math.max(1,Math.abs(K),Math.abs(y))}var nJ=HB,sJ=PB,aJ=$B,tJ=DB;var f={};VB(f,{str:()=>{{return b0}},squaredLength:()=>{{return aB}},sqrLen:()=>{{return LV}},sqlerp:()=>{{return UV}},slerp:()=>{{return b}},setAxisAngle:()=>{{return rB}},setAxes:()=>{{return kV}},set:()=>{{return t0}},scale:()=>{{return bB}},rotationTo:()=>{{return WV}},rotateZ:()=>{{return i0}},rotateY:()=>{{return s0}},rotateX:()=>{{return l0}},random:()=>{{return z0}},pow:()=>{{return r0}},normalize:()=>{{return RB}},multiply:()=>{{return zB}},mul:()=>{{return JV}},ln:()=>{{return mB}},lerp:()=>{{return VV}},length:()=>{{return oB}},len:()=>{{return IV}},invert:()=>{{return x0}},identity:()=>{{return c0}},getAxisAngle:()=>{{return n0}},getAngle:()=>{{return d0}},fromValues:()=>{{return o0}},fromMat3:()=>{{return eB}},fromEuler:()=>{{return e0}},exp:()=>{{return xB}},exactEquals:()=>{{return NV}},equals:()=>{{return RV}},dot:()=>{{return uB}},create:()=>{{return NB}},copy:()=>{{return a0}},conjugate:()=>{{return m0}},clone:()=>{{return u0}},calculateW:()=>{{return y0}},add:()=>{{return BV}}});var s={};VB(s,{zero:()=>{{return T0}},transformQuat:()=>{{return G0}},transformMat4:()=>{{return K0}},transformMat3:()=>{{return $0}},subtract:()=>{{return jB}},sub:()=>{{return p0}},str:()=>{{return j0}},squaredLength:()=>{{return AB}},squaredDistance:()=>{{return CB}},sqrLen:()=>{{return g0}},sqrDist:()=>{{return h0}},set:()=>{{return V0}},scaleAndAdd:()=>{{return Y0}},scale:()=>{{return k0}},round:()=>{{return U0}},rotateZ:()=>{{return P0}},rotateY:()=>{{return H0}},rotateX:()=>{{return _0}},random:()=>{{return Q0}},normalize:()=>{{return IB}},negate:()=>{{return X0}},multiply:()=>{{return qB}},mul:()=>{{return C0}},min:()=>{{return R0}},max:()=>{{return W0}},lerp:()=>{{return E0}},length:()=>{{return TB}},len:()=>{{return LB}},inverse:()=>{{return M0}},hermite:()=>{{return F0}},fromValues:()=>{{return m}},forEach:()=>{{return w0}},floor:()=>{{return N0}},exactEquals:()=>{{return q0}},equals:()=>{{return Z0}},dot:()=>{{return e}},divide:()=>{{return ZB}},div:()=>{{return A0}},distance:()=>{{return pB}},dist:()=>{{return O0}},cross:()=>{{return z}},create:()=>{{return x}},copy:()=>{{return J0}},clone:()=>{{return B0}},ceil:()=>{{return L0}},bezier:()=>{{return S0}},angle:()=>{{return D0}},add:()=>{{return I0}}});function x(){var B=new j(3);if(j!=Float32Array)B[0]=0,B[1]=0,B[2]=0;return B}function B0(B){var J=new j(3);return J[0]=B[0],J[1]=B[1],J[2]=B[2],J}function TB(B){var J=B[0],V=B[1],I=B[2];return Math.hypot(J,V,I)}function m(B,J,V){var I=new j(3);return I[0]=B,I[1]=J,I[2]=V,I}function J0(B,J){return B[0]=J[0],B[1]=J[1],B[2]=J[2],B}function V0(B,J,V,I){return B[0]=J,B[1]=V,B[2]=I,B}function I0(B,J,V){return B[0]=J[0]+V[0],B[1]=J[1]+V[1],B[2]=J[2]+V[2],B}function jB(B,J,V){return B[0]=J[0]-V[0],B[1]=J[1]-V[1],B[2]=J[2]-V[2],B}function qB(B,J,V){return B[0]=J[0]*V[0],B[1]=J[1]*V[1],B[2]=J[2]*V[2],B}function ZB(B,J,V){return B[0]=J[0]/V[0],B[1]=J[1]/V[1],B[2]=J[2]/V[2],B}function L0(B,J){return B[0]=Math.ceil(J[0]),B[1]=Math.ceil(J[1]),B[2]=Math.ceil(J[2]),B}function N0(B,J){return B[0]=Math.floor(J[0]),B[1]=Math.floor(J[1]),B[2]=Math.floor(J[2]),B}function R0(B,J,V){return B[0]=Math.min(J[0],V[0]),B[1]=Math.min(J[1],V[1]),B[2]=Math.min(J[2],V[2]),B}function W0(B,J,V){return B[0]=Math.max(J[0],V[0]),B[1]=Math.max(J[1],V[1]),B[2]=Math.max(J[2],V[2]),B}function U0(B,J){return B[0]=Math.round(J[0]),B[1]=Math.round(J[1]),B[2]=Math.round(J[2]),B}function k0(B,J,V){return B[0]=J[0]*V,B[1]=J[1]*V,B[2]=J[2]*V,B}function Y0(B,J,V,I){return B[0]=J[0]+V[0]*I,B[1]=J[1]+V[1]*I,B[2]=J[2]+V[2]*I,B}function pB(B,J){var V=J[0]-B[0],I=J[1]-B[1],L=J[2]-B[2];return Math.hypot(V,I,L)}function CB(B,J){var V=J[0]-B[0],I=J[1]-B[1],L=J[2]-B[2];return V*V+I*I+L*L}function AB(B){var J=B[0],V=B[1],I=B[2];return J*J+V*V+I*I}function X0(B,J){return B[0]=-J[0],B[1]=-J[1],B[2]=-J[2],B}function M0(B,J){return B[0]=1/J[0],B[1]=1/J[1],B[2]=1/J[2],B}function IB(B,J){var V=J[0],I=J[1],L=J[2],N=V*V+I*I+L*L;if(N>0)N=1/Math.sqrt(N);return B[0]=J[0]*N,B[1]=J[1]*N,B[2]=J[2]*N,B}function e(B,J){return B[0]*J[0]+B[1]*J[1]+B[2]*J[2]}function z(B,J,V){var I=J[0],L=J[1],N=J[2],R=V[0],W=V[1],U=V[2];return B[0]=L*U-N*W,B[1]=N*R-I*U,B[2]=I*W-L*R,B}function E0(B,J,V,I){var L=J[0],N=J[1],R=J[2];return B[0]=L+I*(V[0]-L),B[1]=N+I*(V[1]-N),B[2]=R+I*(V[2]-R),B}function F0(B,J,V,I,L,N){var R=N*N,W=R*(2*N-3)+1,U=R*(N-2)+N,k=R*(N-1),Y=R*(3-2*N);return B[0]=J[0]*W+V[0]*U+I[0]*k+L[0]*Y,B[1]=J[1]*W+V[1]*U+I[1]*k+L[1]*Y,B[2]=J[2]*W+V[2]*U+I[2]*k+L[2]*Y,B}function S0(B,J,V,I,L,N){var R=1-N,W=R*R,U=N*N,k=W*R,Y=3*N*W,M=3*U*R,F=U*N;return B[0]=J[0]*k+V[0]*Y+I[0]*M+L[0]*F,B[1]=J[1]*k+V[1]*Y+I[1]*M+L[1]*F,B[2]=J[2]*k+V[2]*Y+I[2]*M+L[2]*F,B}function Q0(B,J){J=J||1;var V=n()*2*Math.PI,I=n()*2-1,L=Math.sqrt(1-I*I)*J;return B[0]=Math.cos(V)*L,B[1]=Math.sin(V)*L,B[2]=I*J,B}function K0(B,J,V){var I=J[0],L=J[1],N=J[2],R=V[3]*I+V[7]*L+V[11]*N+V[15];return R=R||1,B[0]=(V[0]*I+V[4]*L+V[8]*N+V[12])/R,B[1]=(V[1]*I+V[5]*L+V[9]*N+V[13])/R,B[2]=(V[2]*I+V[6]*L+V[10]*N+V[14])/R,B}function $0(B,J,V){var I=J[0],L=J[1],N=J[2];return B[0]=I*V[0]+L*V[3]+N*V[6],B[1]=I*V[1]+L*V[4]+N*V[7],B[2]=I*V[2]+L*V[5]+N*V[8],B}function G0(B,J,V){var I=V[0],L=V[1],N=V[2],R=V[3],W=J[0],U=J[1],k=J[2],Y=L*k-N*U,M=N*W-I*k,F=I*U-L*W,E=L*F-N*M,Q=N*Y-I*F,S=I*M-L*Y,X=R*2;return Y*=X,M*=X,F*=X,E*=2,Q*=2,S*=2,B[0]=W+Y+E,B[1]=U+M+Q,B[2]=k+F+S,B}function _0(B,J,V,I){var L=[],N=[];return L[0]=J[0]-V[0],L[1]=J[1]-V[1],L[2]=J[2]-V[2],N[0]=L[0],N[1]=L[1]*Math.cos(I)-L[2]*Math.sin(I),N[2]=L[1]*Math.sin(I)+L[2]*Math.cos(I),B[0]=N[0]+V[0],B[1]=N[1]+V[1],B[2]=N[2]+V[2],B}function H0(B,J,V,I){var L=[],N=[];return L[0]=J[0]-V[0],L[1]=J[1]-V[1],L[2]=J[2]-V[2],N[0]=L[2]*Math.sin(I)+L[0]*Math.cos(I),N[1]=L[1],N[2]=L[2]*Math.cos(I)-L[0]*Math.sin(I),B[0]=N[0]+V[0],B[1]=N[1]+V[1],B[2]=N[2]+V[2],B}function P0(B,J,V,I){var L=[],N=[];return L[0]=J[0]-V[0],L[1]=J[1]-V[1],L[2]=J[2]-V[2],N[0]=L[0]*Math.cos(I)-L[1]*Math.sin(I),N[1]=L[0]*Math.sin(I)+L[1]*Math.cos(I),N[2]=L[2],B[0]=N[0]+V[0],B[1]=N[1]+V[1],B[2]=N[2]+V[2],B}function D0(B,J){var V=B[0],I=B[1],L=B[2],N=J[0],R=J[1],W=J[2],U=Math.sqrt(V*V+I*I+L*L),k=Math.sqrt(N*N+R*R+W*W),Y=U*k,M=Y&&e(B,J)/Y;return Math.acos(Math.min(Math.max(M,-1),1))}function T0(B){return B[0]=0,B[1]=0,B[2]=0,B}function j0(B){return"vec3("+B[0]+", "+B[1]+", "+B[2]+")"}function q0(B,J){return B[0]===J[0]&&B[1]===J[1]&&B[2]===J[2]}function Z0(B,J){var V=B[0],I=B[1],L=B[2],N=J[0],R=J[1],W=J[2];return Math.abs(V-N)<=P*Math.max(1,Math.abs(V),Math.abs(N))&&Math.abs(I-R)<=P*Math.max(1,Math.abs(I),Math.abs(R))&&Math.abs(L-W)<=P*Math.max(1,Math.abs(L),Math.abs(W))}var p0=jB,C0=qB,A0=ZB,O0=pB,h0=CB,LB=TB,g0=AB,w0=function(){var B=x();return function(J,V,I,L,N,R){var W,U;if(!V)V=3;if(!I)I=0;if(L)U=Math.min(L*V+I,J.length);else U=J.length;for(W=I;W<U;W+=V)B[0]=J[W],B[1]=J[W+1],B[2]=J[W+2],N(B,B,R),J[W]=B[0],J[W+1]=B[1],J[W+2]=B[2];return J}}();function f0(){var B=new j(4);if(j!=Float32Array)B[0]=0,B[1]=0,B[2]=0,B[3]=0;return B}function OB(B){var J=new j(4);return J[0]=B[0],J[1]=B[1],J[2]=B[2],J[3]=B[3],J}function hB(B,J,V,I){var L=new j(4);return L[0]=B,L[1]=J,L[2]=V,L[3]=I,L}function gB(B,J){return B[0]=J[0],B[1]=J[1],B[2]=J[2],B[3]=J[3],B}function wB(B,J,V,I,L){return B[0]=J,B[1]=V,B[2]=I,B[3]=L,B}function fB(B,J,V){return B[0]=J[0]+V[0],B[1]=J[1]+V[1],B[2]=J[2]+V[2],B[3]=J[3]+V[3],B}function vB(B,J,V){return B[0]=J[0]*V,B[1]=J[1]*V,B[2]=J[2]*V,B[3]=J[3]*V,B}function cB(B){var J=B[0],V=B[1],I=B[2],L=B[3];return Math.hypot(J,V,I,L)}function nB(B){var J=B[0],V=B[1],I=B[2],L=B[3];return J*J+V*V+I*I+L*L}function dB(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=V*V+I*I+L*L+N*N;if(R>0)R=1/Math.sqrt(R);return B[0]=V*R,B[1]=I*R,B[2]=L*R,B[3]=N*R,B}function lB(B,J){return B[0]*J[0]+B[1]*J[1]+B[2]*J[2]+B[3]*J[3]}function sB(B,J,V,I){var L=J[0],N=J[1],R=J[2],W=J[3];return B[0]=L+I*(V[0]-L),B[1]=N+I*(V[1]-N),B[2]=R+I*(V[2]-R),B[3]=W+I*(V[3]-W),B}function iB(B,J){return B[0]===J[0]&&B[1]===J[1]&&B[2]===J[2]&&B[3]===J[3]}function yB(B,J){var V=B[0],I=B[1],L=B[2],N=B[3],R=J[0],W=J[1],U=J[2],k=J[3];return Math.abs(V-R)<=P*Math.max(1,Math.abs(V),Math.abs(R))&&Math.abs(I-W)<=P*Math.max(1,Math.abs(I),Math.abs(W))&&Math.abs(L-U)<=P*Math.max(1,Math.abs(L),Math.abs(U))&&Math.abs(N-k)<=P*Math.max(1,Math.abs(N),Math.abs(k))}var _V=function(){var B=f0();return function(J,V,I,L,N,R){var W,U;if(!V)V=4;if(!I)I=0;if(L)U=Math.min(L*V+I,J.length);else U=J.length;for(W=I;W<U;W+=V)B[0]=J[W],B[1]=J[W+1],B[2]=J[W+2],B[3]=J[W+3],N(B,B,R),J[W]=B[0],J[W+1]=B[1],J[W+2]=B[2],J[W+3]=B[3];return J}}();function NB(){var B=new j(4);if(j!=Float32Array)B[0]=0,B[1]=0,B[2]=0;return B[3]=1,B}function c0(B){return B[0]=0,B[1]=0,B[2]=0,B[3]=1,B}function rB(B,J,V){V=V*0.5;var I=Math.sin(V);return B[0]=I*J[0],B[1]=I*J[1],B[2]=I*J[2],B[3]=Math.cos(V),B}function n0(B,J){var V=Math.acos(J[3])*2,I=Math.sin(V/2);if(I>P)B[0]=J[0]/I,B[1]=J[1]/I,B[2]=J[2]/I;else B[0]=1,B[1]=0,B[2]=0;return V}function d0(B,J){var V=uB(B,J);return Math.acos(2*V*V-1)}function zB(B,J,V){var I=J[0],L=J[1],N=J[2],R=J[3],W=V[0],U=V[1],k=V[2],Y=V[3];return B[0]=I*Y+R*W+L*k-N*U,B[1]=L*Y+R*U+N*W-I*k,B[2]=N*Y+R*k+I*U-L*W,B[3]=R*Y-I*W-L*U-N*k,B}function l0(B,J,V){V*=0.5;var I=J[0],L=J[1],N=J[2],R=J[3],W=Math.sin(V),U=Math.cos(V);return B[0]=I*U+R*W,B[1]=L*U+N*W,B[2]=N*U-L*W,B[3]=R*U-I*W,B}function s0(B,J,V){V*=0.5;var I=J[0],L=J[1],N=J[2],R=J[3],W=Math.sin(V),U=Math.cos(V);return B[0]=I*U-N*W,B[1]=L*U+R*W,B[2]=N*U+I*W,B[3]=R*U-L*W,B}function i0(B,J,V){V*=0.5;var I=J[0],L=J[1],N=J[2],R=J[3],W=Math.sin(V),U=Math.cos(V);return B[0]=I*U+L*W,B[1]=L*U-I*W,B[2]=N*U+R*W,B[3]=R*U-N*W,B}function y0(B,J){var V=J[0],I=J[1],L=J[2];return B[0]=V,B[1]=I,B[2]=L,B[3]=Math.sqrt(Math.abs(1-V*V-I*I-L*L)),B}function xB(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=Math.sqrt(V*V+I*I+L*L),W=Math.exp(N),U=R>0?W*Math.sin(R)/R:0;return B[0]=V*U,B[1]=I*U,B[2]=L*U,B[3]=W*Math.cos(R),B}function mB(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=Math.sqrt(V*V+I*I+L*L),W=R>0?Math.atan2(R,N)/R:0;return B[0]=V*W,B[1]=I*W,B[2]=L*W,B[3]=0.5*Math.log(V*V+I*I+L*L+N*N),B}function r0(B,J,V){return mB(B,J),bB(B,B,V),xB(B,B),B}function b(B,J,V,I){var L=J[0],N=J[1],R=J[2],W=J[3],U=V[0],k=V[1],Y=V[2],M=V[3],F,E,Q,S,X;if(E=L*U+N*k+R*Y+W*M,E<0)E=-E,U=-U,k=-k,Y=-Y,M=-M;if(1-E>P)F=Math.acos(E),Q=Math.sin(F),S=Math.sin((1-I)*F)/Q,X=Math.sin(I*F)/Q;else S=1-I,X=I;return B[0]=S*L+X*U,B[1]=S*N+X*k,B[2]=S*R+X*Y,B[3]=S*W+X*M,B}function z0(B){var J=n(),V=n(),I=n(),L=Math.sqrt(1-J),N=Math.sqrt(J);return B[0]=L*Math.sin(2*Math.PI*V),B[1]=L*Math.cos(2*Math.PI*V),B[2]=N*Math.sin(2*Math.PI*I),B[3]=N*Math.cos(2*Math.PI*I),B}function x0(B,J){var V=J[0],I=J[1],L=J[2],N=J[3],R=V*V+I*I+L*L+N*N,W=R?1/R:0;return B[0]=-V*W,B[1]=-I*W,B[2]=-L*W,B[3]=N*W,B}function m0(B,J){return B[0]=-J[0],B[1]=-J[1],B[2]=-J[2],B[3]=J[3],B}function eB(B,J){var V=J[0]+J[4]+J[8],I;if(V>0)I=Math.sqrt(V+1),B[3]=0.5*I,I=0.5/I,B[0]=(J[5]-J[7])*I,B[1]=(J[6]-J[2])*I,B[2]=(J[1]-J[3])*I;else{var L=0;if(J[4]>J[0])L=1;if(J[8]>J[L*3+L])L=2;var N=(L+1)%3,R=(L+2)%3;I=Math.sqrt(J[L*3+L]-J[N*3+N]-J[R*3+R]+1),B[L]=0.5*I,I=0.5/I,B[3]=(J[N*3+R]-J[R*3+N])*I,B[N]=(J[N*3+L]+J[L*3+N])*I,B[R]=(J[R*3+L]+J[L*3+R])*I}return B}function e0(B,J,V,I){var L=0.5*Math.PI/180;J*=L,V*=L,I*=L;var N=Math.sin(J),R=Math.cos(J),W=Math.sin(V),U=Math.cos(V),k=Math.sin(I),Y=Math.cos(I);return B[0]=N*U*Y-R*W*k,B[1]=R*W*Y+N*U*k,B[2]=R*U*k-N*W*Y,B[3]=R*U*Y+N*W*k,B}function b0(B){return"quat("+B[0]+", "+B[1]+", "+B[2]+", "+B[3]+")"}var u0=OB,o0=hB,a0=gB,t0=wB,BV=fB,JV=zB,bB=vB,uB=lB,VV=sB,oB=cB,IV=oB,aB=nB,LV=aB,RB=dB,NV=iB,RV=yB,WV=function(){var B=x(),J=m(1,0,0),V=m(0,1,0);return function(I,L,N){var R=e(L,N);if(R<-0.999999){if(z(B,J,L),LB(B)<0.000001)z(B,V,L);return IB(B,B),rB(I,B,Math.PI),I}else if(R>0.999999)return I[0]=0,I[1]=0,I[2]=0,I[3]=1,I;else return z(B,L,N),I[0]=B[0],I[1]=B[1],I[2]=B[2],I[3]=1+R,RB(I,I)}}(),UV=function(){var B=NB(),J=NB();return function(V,I,L,N,R,W){return b(B,I,R,W),b(J,L,N,W),b(V,B,J,2*W*(1-W)),V}}(),kV=function(){var B=QB();return function(J,V,I,L){return B[0]=I[0],B[3]=I[1],B[6]=I[2],B[1]=L[0],B[4]=L[1],B[7]=L[2],B[2]=-V[0],B[5]=-V[1],B[8]=-V[2],RB(J,eB(J,B))}}();class d{B;constructor(B){this.app=B;this.onStart&&B.onStart(this.onStart.bind(this)),this.onUpdate&&B.onUpdate(this.onUpdate.bind(this)),this.onAfterUpdate&&B.onAfterUpdate(this.onAfterUpdate.bind(this)),this.onBeforeUpdate&&B.onBeforeUpdate(this.onBeforeUpdate.bind(this)),this.onDraw&&B.onDraw(this.onDraw.bind(this))}}class c{B;J;V;constructor(B=s.create(),J=f.create(),V=s.fromValues(1,1,1)){this.position=B;this.rotation=J;this.scale=V}rotateEuler(B,J,V){return f.fromEuler(this.rotation,B,J,V),this}toMat4(){const B=g.create();return g.fromRotationTranslationScale(B,this.rotation,this.position,this.scale),B}}var u=(B)=>f.fromEuler(f.create(),B[0],B[1],B[2]),tB=(B)=>[B,B,B];class o extends d{B;J;V;I;L;N;projectionMatrix=g.create();buffers={textures:{}};faceDataType;colorDataType;constructor(B,J,V,I=new c([0,0,-6]),L=new c([100,100,0]),N={}){super(B);this.app=B;this.mesh=J;this.shader=V;this.camera=I;this.light=L;this.config=N;this.faceDataType=this.getDataType(J.config.faces),this.colorDataType=J.config.colors?this.getDataType(J.config.colors):null}getDataType(B){switch(B.BYTES_PER_ELEMENT){case 1:return 5121;case 2:return 5123;case 4:return 5125;default:return 5126}}configure(B){return this.config=B,this}makeBuffer(B,J=34962){const V=this.app.gl,I=V.createBuffer();if(!I)throw new Error("failed to create a buffer");return V.bindBuffer(J,I),V.bufferData(J,B,V.STATIC_DRAW),V.bindBuffer(J,null),I}initializeBuffers(){const B=this.app.gl.createVertexArray();if(!B)throw new Error("VAO creation failed");this.buffers.vao=B,this.app.gl.bindVertexArray(B),this.buffers.faces=this.makeBuffer(this.mesh.config.faces,this.app.gl.ELEMENT_ARRAY_BUFFER);const J=this.shader.mappings;if(this.buffers.position=this.makeBuffer(this.mesh.config.positions),this.bindAttrib(this.buffers.position,J.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,J.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,J.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,J.attributes.uv0,2,this.app.gl.FLOAT);this.app.gl.bindVertexArray(null)}async initializeTextures(){const{gl:B}=this.app;for(let[J,V]of Object.entries(this.shader.textures)){await V.loadImage();const I=B.createTexture();if(!I)throw new Error("failed to allocate texture");const L=V.texture;B.bindTexture(B.TEXTURE_2D,I),B.texImage2D(B.TEXTURE_2D,0,B.RGBA,V.width,V.height,0,B.RGBA,B.UNSIGNED_BYTE,L),B.texParameteri(B.TEXTURE_2D,B.TEXTURE_WRAP_S,B.REPEAT),B.texParameteri(B.TEXTURE_2D,B.TEXTURE_WRAP_T,B.REPEAT),B.texParameteri(B.TEXTURE_2D,B.TEXTURE_MAG_FILTER,B.NEAREST),B.texParameteri(B.TEXTURE_2D,B.TEXTURE_MIN_FILTER,B.NEAREST),this.buffers.textures[J]=I}}bindTextures(){const{gl:B}=this.app,J=this.app.gl.TEXTURE0,V=Object.entries(this.buffers.textures),I=[];return V.forEach(([L,N],R)=>{const W=this.shader.mappings.uniforms[L];if(!W)return console.warn("had no uniform to set for",{textures:V,key:L,tex:N,uniform:W,index:R}),!1;B.activeTexture(J+R),B.bindTexture(B.TEXTURE_2D,N),B.uniform1i(W,R),I.push(()=>{B.activeTexture(J+R),B.bindTexture(B.TEXTURE_2D,null)})}),I}bindAttrib(B,J,V,I,L=!1){const N=this.app.gl;N.bindBuffer(N.ARRAY_BUFFER,B);const R=Number.isSafeInteger(J)?J:this.shader.attrib(J);if(R!==-1)N.vertexAttribPointer(R,V,I,L,0,0),N.enableVertexAttribArray(R);N.bindBuffer(N.ARRAY_BUFFER,null)}initializeShader(B,J){const V=g.invert(g.create(),this.camera.toMat4()),I=this.app.gl,{uniforms:L}=this.shader.mappings;this.shader.use(),I.uniform1f(L.time,B),I.uniform4fv(L.light0Color,[1,1,1,1]),I.uniformMatrix4fv(L.view,!1,V),I.uniformMatrix4fv(L.projection,!1,this.projectionMatrix),I.uniform3fv(L.light0,this.light.position),I.uniformMatrix4fv(L.objectToWorld,!1,J.toMat4()),I.uniformMatrix4fv(L.objectToWorldInv,!1,g.invert(g.create(),J.toMat4()))}async onStart(B,J){J.loading("baking vectors"),J.telemetry?.addRenderers(1),J.telemetry?.addTriangles(this.mesh.config.faces.length),J.telemetry?.addVertexes(this.mesh.config.vertexCount),g.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(B,J){const V=this.app.gl;V.bindVertexArray(this.buffers.vao||null),V.bindBuffer(V.ELEMENT_ARRAY_BUFFER,this.buffers.faces||null),V.bindBuffer(V.ARRAY_BUFFER,this.buffers.position||null),this.initializeShader(B,J);const I=this.bindTextures();V.drawElements(this.config.drawMode??V.TRIANGLES,this.mesh.config.faces.length,this.faceDataType,0);const L=V.getError();if(L!==0)throw console.log({err:L}),new Error(`(MeshRenderer<Mesh#${this.mesh.name}>) webgl failure: ${L}`);V.bindVertexArray(null),V.bindBuffer(V.ELEMENT_ARRAY_BUFFER,null),V.bindBuffer(V.ARRAY_BUFFER,null),I.forEach((N)=>N())}}class WB extends d{B;el;frameTimes=[];maxFrameTimes=100;lastFrameTime=0;activeTriangles=0;activeVertexes=0;activeRenderers=0;activeTextures=0;constructor(B,J="#telemetry"){super(B);this.app=B;if(this.el=document.querySelector(J),this.el&&location.search.includes("telemetry"))this.el.style.display="block"}insertTime(B){if(this.frameTimes.push(B),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 B=this.frameTimes.reduce((V,I)=>V+I,0)/this.frameTimes.length,J=1000/B;this.el.innerHTML=`${J.toFixed(1)} FPS (${B.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(B){const J=B-this.lastFrameTime;this.insertTime(J),this.lastFrameTime=B}addTriangles(B){this.activeTriangles+=B}addVertexes(B){this.activeVertexes+=B}addRenderers(B){this.activeRenderers+=B}addTextures(B){this.activeTextures+=B}}class UB{B;canvas;telemetry;gl;loadingMessages=new Set(["[noeidelon] [stage 2]"]);registry={onBeforeUpdate:[],onAfterUpdate:[],onUpdate:[],onStart:[],onDraw:[]};constructor(B={}){this.config=B;try{this.canvas=document.querySelector("canvas"),this.canvas.width=window.innerWidth,this.canvas.height=window.innerHeight;const J=this.canvas.getContext("webgl2");if(!J)throw new Error("Canvas was unable to get a webgl2 context");const V=this.gl=J;if(V.viewport(0,0,V.drawingBufferWidth,V.drawingBufferHeight),this.gl.getExtension("EXT_texture_filter_anisotropic"),location.search.includes("telemetry"))this.telemetry=new WB(this)}catch(J){const V=document.querySelector("main");if(V)V.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 -> ${J}`)}}get aspect(){return this.canvas.clientWidth/this.canvas.clientHeight}clear(){const B=this.gl;B.clearColor(0,0,0,1),B.clearDepth(1),B.enable(B.DEPTH_TEST),B.depthFunc(B.LEQUAL),B.clear(B.COLOR_BUFFER_BIT|B.DEPTH_BUFFER_BIT)}loading(B){this.loadingMessages.add(B.toLowerCase()),document.querySelector("#loading-text").innerHTML=[...this.loadingMessages].join("<br />")}ready(){document.querySelector("#loading")?.classList.remove("loading-active")}onBeforeUpdate(B){this.registry.onBeforeUpdate.push(B)}onAfterUpdate(B){this.registry.onAfterUpdate.push(B)}onUpdate(B){this.registry.onUpdate.push(B)}onStart(B){this.registry.onStart.push(B)}onDraw(B){this.registry.onDraw.push(B)}doUpdate(B){this.registry.onBeforeUpdate.forEach((J)=>J(B,this)),this.registry.onUpdate.forEach((J)=>J(B,this)),this.registry.onAfterUpdate.forEach((J)=>J(B,this)),this.registry.onDraw.forEach((J)=>J(B,this))}async doStart(B=0){this.loading("setting launch parameters"),this.clear();try{for(let J of this.registry.onStart)await J(B,this)}catch(J){if(this.loading('[panic] <span style="color: red">failed to start noeidelon</span>'),this.telemetry)this.loading(`<span style="color: purple">${J}</span>`);return}this.ready()}async oneShot(B=0){await this.doStart(B),this.doUpdate(B)}async start(){await this.doStart();const B=(J)=>{this.doUpdate(J),requestAnimationFrame(B)};requestAnimationFrame(B)}}class a extends d{B;J;V;constructor(B,J,V){super(B);this.app=B;this.transform=J;this.renderer=V}onDraw(B){this.renderer.onRenderableUpdate(B,this.transform)}}class kB{B;constructor(B){this.config=B}get name(){return this.config.name}}var t=new kB({colors:null,faces:new Uint8Array([0,1,2,1,0,3,0,2,4,0,4,5,0,5,3,1,3,6,2,1,7,4,2,8,9,10,11,12,9,13,1,6,7,2,7,8,10,8,11,9,11,13,12,13,6,7,6,14,8,7,14,11,8,14,13,11,14,6,13,14,15,16,17,17,16,18,19,20,21,18,16,22,22,16,15,23,24,25]),name:"src/meshes/trianglething/trianglething.ply",normals:new Float32Array([0,-1,0.00000083803394,-0.5257306,-0.44721383,0.723607,-0.8506533,-0.44721213,-0.2763879,0.5257306,-0.4472139,0.723607,0,-0.44721153,-0.89442825,0.8506533,-0.4472122,-0.27638793,0,0.44721153,0.89442825,-0.8506533,0.44721216,0.27638793,-0.5257306,0.4472139,-0.72360694,0.8506533,-0.4472122,-0.27638793,0,-0.44721153,-0.89442825,0.5257306,0.4472139,-0.72360694,0.5257306,-0.4472139,0.723607,0.85065323,0.4472122,0.2763879,0,1,-0.0000008165459,0.8999471,-0.43599886,0.00000024163015,-0.00000005150958,1,0,-0.000000030203772,-0.4359989,0.8999472,-0.8999471,-0.4359989,-0.00000024291313,-0.000000030203772,-0.4359989,0.8999472,0,-0.43599886,-0.8999471,0.8999471,-0.43599886,0.00000024163015,0,-0.43599886,-0.8999471,-0.000000030203772,-0.4359989,0.8999472,-0.8999471,-0.4359989,-0.00000024291313,0,-0.43599886,-0.8999471]),positions:new Float32Array([0,2.6090002,0,-0.36800402,2.9959497,0.50652003,-0.5954481,2.9959497,-0.19346952,0.36800402,2.9959497,0.50652003,0,2.9959497,-0.62609756,0.5954481,2.9959497,-0.19346952,0,3.6220508,0.62609756,-0.5954481,3.6220508,0.19346952,-0.36800402,3.6220508,-0.50652003,0.5954481,2.9959497,-0.19346952,0,2.9959497,-0.62609756,0.36800402,3.6220508,-0.50652003,0.36800402,2.9959497,0.50652003,0.5954481,3.6220508,0.19346952,0,4.0090003,0,1.0000001,0,0,0,2.5000002,0,-0.000000043711395,0,1.0000001,-1.0000001,0,-0.00000008742279,-0.000000043711395,0,1.0000001,0.000000011924882,0,-1.0000001,1.0000001,0,0,0.000000011924882,0,-1.0000001,-0.000000043711395,0,1.0000001,-1.0000001,0,-0.00000008742279,0.000000011924882,0,-1.0000001]),uvs:new Float32Array([0.7660872,0.5526656,0.6449925,0.52286637,0.8418907,0.33128682,0.60803074,0.79587877,0.96344936,0.40123126,0.8416727,0.64077806,0.50600564,0.49428308,0.704352,0.31297976,0.79145527,0.046412975,0.35179207,0.26814616,0.47356877,0.028599411,0.5382167,0.15491244,0.118150145,0.42324704,0.40614995,0.39580685,0.5992601,0.26365823,0.4984935,0.5027367,0.24900003,0.7522302,-0.00049349666,0.50273675,-0.00049346685,1.0017238,0.7633698,0.99398905,0.99752307,0.7598357,0.9975231,0.99398893,0.49849355,1.0017238,0.99646366,0.7612665,0.99646366,0.9954198,0.7623104,0.9954198]),vertexCount:26});var YB="../texture0-577d5216cdab32bc.png";var XB="../texture1-e472a46c91711e86.png";class l{B;static VERTEX=35633;static FRAGMENT=35632;constructor(B){this.config=B}vertexCode="";fragmentCode="";_app;program=null;mappings={};textures={};get gl(){const B=this._app?.gl;if(!B)throw new Error("GL context not defined at shader compile time.");return B}app(B){return this._app=B,this.program=B.gl.createProgram(),this}vertex(B){return this.vertexCode=B,this}fragment(B){return this.fragmentCode=B,this}attrib(B){return this.gl.getAttribLocation(this.program,B)}uniform(B){return this.gl.getUniformLocation(this.program,B)}generateMappings(B){return{attributes:{normal:this.attrib(B.attributes.normal),uv0:this.attrib(B.attributes.uv0),vertex:this.attrib(B.attributes.vertex),vertexColor:this.attrib(B.attributes.vertexColor)},uniforms:{albedo:this.uniform(B.uniforms.albedo),light0:this.uniform(B.uniforms.light0),light0Color:this.uniform(B.uniforms.light0Color),objectToWorld:this.uniform(B.uniforms.objectToWorld),objectToWorldInv:this.uniform(B.uniforms.objectToWorldInv),projection:this.uniform(B.uniforms.projection),texture0:this.uniform(B.uniforms.texture0),texture1:this.uniform(B.uniforms.texture1),time:this.uniform(B.uniforms.time),view:this.uniform(B.uniforms.view)}}}attach(B,J){const V=this.gl,I=V.createShader(B);if(!I)throw new Error(`failed to init ${MV(B)} shader`);V.shaderSource(I,J),V.compileShader(I),V.attachShader(this.program,I)}addTexture(B,J){return this.textures[B]=J,this}compile(){const B=this.gl;this.attach(B.FRAGMENT_SHADER,this.fragmentCode),this.attach(B.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(B,J){this.gl.bindAttribLocation(this.program,B,J)}use(){this._app?.gl.useProgram(this.program)}}var MV=(B)=>{switch(B){case l.FRAGMENT:return"fragment";case l.VERTEX:return"vertex";default:return"some unknown type of"}};var BB=`#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 BJ=`#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 SV={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"}},JJ=(B)=>new l(SV).vertex(BJ).fragment(BB).app(B);class JB{B;J;texture=null;width=0;height=0;constructor(B,J){this.app=B;this.url=J}setImage(B,J,V){return this.texture=B,this.width=J,this.height=V,this}async loadImage(){if(this.app.telemetry?.addTextures(-1),this.app.loading("Fetching textures..."),this.url==="manual"){if(this.texture===null)throw new Error("manual specified, but texture was not ready...");return}const B=new Image;return new Promise((J,V)=>{B.onload=async()=>{this.texture=await createImageBitmap(B,{imageOrientation:"flipY"}),this.width=this.texture.width,this.height=this.texture.height,this.app.telemetry?.addTextures(2),J(void 0)},B.onerror=(I)=>{this.app.telemetry?.addTextures(1),V(new Error(`texture load of ${this.url} failed: ${I.toString()}`))},B.src=this.url})}}var VJ=`#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);}`;var KV={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"}},IJ=(B)=>new l(KV).vertex(VJ).fragment(BB).app(B);var v=new UB({fov:45}),LJ=new c([3,3,5],u([-15,40,0])),NJ=new c([1,1,0]),MB=new c(tB(0),u([0,0,0])),EB=new c([-3,0,1],u([0,0,0])),RJ=new JB(v,YB),WJ=new JB(v,XB);v.onUpdate(()=>{f.rotateY(MB.rotation,MB.rotation,0.001),f.rotateY(EB.rotation,EB.rotation,0.001)});new a(v,MB,new o(v,t,IJ(v).addTexture("texture0",RJ).addTexture("texture1",WJ),LJ,NJ).configure({}));new a(v,EB,new o(v,t,JJ(v).addTexture("texture0",RJ).addTexture("texture1",WJ),LJ,NJ).configure({}));v.start();