diff --git a/html/003-scene/main.js b/html/003-scene/main.js index 48d754f..7d4c7ec 100644 --- a/html/003-scene/main.js +++ b/html/003-scene/main.js @@ -1,3 +1,3 @@ var b0=Object.defineProperty;var u=(C,V)=>{for(var M in V)b0(C,M,{get:V[M],enumerable:!0,configurable:!0,set:(Q)=>V[M]=()=>Q})};var L=0.000001,k=typeof Float32Array!=="undefined"?Float32Array:Array,f=Math.random,OM=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var C=0,V=arguments.length;while(V--)C+=arguments[V]*arguments[V];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 g={};u(g,{transpose:()=>{{return MC}},translate:()=>{{return YC}},targetTo:()=>{{return qC}},subtract:()=>{{return A0}},sub:()=>{{return cC}},str:()=>{{return pC}},set:()=>{{return VC}},scale:()=>{{return OC}},rotateZ:()=>{{return GC}},rotateY:()=>{{return BC}},rotateX:()=>{{return ZC}},rotate:()=>{{return XC}},perspectiveZO:()=>{{return TC}},perspectiveNO:()=>{{return $0}},perspectiveFromFieldOfView:()=>{{return _C}},perspective:()=>{{return kC}},orthoZO:()=>{{return jC}},orthoNO:()=>{{return W0}},ortho:()=>{{return SC}},multiplyScalarAndAdd:()=>{{return vC}},multiplyScalar:()=>{{return fC}},multiply:()=>{{return B0}},mul:()=>{{return dC}},lookAt:()=>{{return hC}},invert:()=>{{return QC}},identity:()=>{{return Z0}},getTranslation:()=>{{return PC}},getScaling:()=>{{return K0}},getRotation:()=>{{return DC}},frustum:()=>{{return RC}},fromZRotation:()=>{{return HC}},fromYRotation:()=>{{return EC}},fromXRotation:()=>{{return AC}},fromValues:()=>{{return CC}},fromTranslation:()=>{{return KC}},fromScaling:()=>{{return $C}},fromRotationTranslationScaleOrigin:()=>{{return LC}},fromRotationTranslationScale:()=>{{return FC}},fromRotationTranslation:()=>{{return G0}},fromRotation:()=>{{return WC}},fromQuat2:()=>{{return JC}},fromQuat:()=>{{return UC}},frob:()=>{{return gC}},exactEquals:()=>{{return wC}},equals:()=>{{return iC}},determinant:()=>{{return NC}},create:()=>{{return o0}},copy:()=>{{return a0}},clone:()=>{{return t0}},adjoint:()=>{{return IC}},add:()=>{{return nC}}});function o0(){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 t0(C){var V=new k(16);return V[0]=C[0],V[1]=C[1],V[2]=C[2],V[3]=C[3],V[4]=C[4],V[5]=C[5],V[6]=C[6],V[7]=C[7],V[8]=C[8],V[9]=C[9],V[10]=C[10],V[11]=C[11],V[12]=C[12],V[13]=C[13],V[14]=C[14],V[15]=C[15],V}function a0(C,V){return C[0]=V[0],C[1]=V[1],C[2]=V[2],C[3]=V[3],C[4]=V[4],C[5]=V[5],C[6]=V[6],C[7]=V[7],C[8]=V[8],C[9]=V[9],C[10]=V[10],C[11]=V[11],C[12]=V[12],C[13]=V[13],C[14]=V[14],C[15]=V[15],C}function CC(C,V,M,Q,I,N,Y,O,X,Z,B,K,W,$,E,A){var G=new k(16);return G[0]=C,G[1]=V,G[2]=M,G[3]=Q,G[4]=I,G[5]=N,G[6]=Y,G[7]=O,G[8]=X,G[9]=Z,G[10]=B,G[11]=K,G[12]=W,G[13]=$,G[14]=E,G[15]=A,G}function VC(C,V,M,Q,I,N,Y,O,X,Z,B,K,W,$,E,A,G){return C[0]=V,C[1]=M,C[2]=Q,C[3]=I,C[4]=N,C[5]=Y,C[6]=O,C[7]=X,C[8]=Z,C[9]=B,C[10]=K,C[11]=W,C[12]=$,C[13]=E,C[14]=A,C[15]=G,C}function Z0(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 MC(C,V){if(C===V){var M=V[1],Q=V[2],I=V[3],N=V[6],Y=V[7],O=V[11];C[1]=V[4],C[2]=V[8],C[3]=V[12],C[4]=M,C[6]=V[9],C[7]=V[13],C[8]=Q,C[9]=N,C[11]=V[14],C[12]=I,C[13]=Y,C[14]=O}else C[0]=V[0],C[1]=V[4],C[2]=V[8],C[3]=V[12],C[4]=V[1],C[5]=V[5],C[6]=V[9],C[7]=V[13],C[8]=V[2],C[9]=V[6],C[10]=V[10],C[11]=V[14],C[12]=V[3],C[13]=V[7],C[14]=V[11],C[15]=V[15];return C}function QC(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=V[4],O=V[5],X=V[6],Z=V[7],B=V[8],K=V[9],W=V[10],$=V[11],E=V[12],A=V[13],G=V[14],H=V[15],U=M*O-Q*Y,F=M*X-I*Y,D=M*Z-N*Y,J=Q*X-I*O,P=Q*Z-N*O,j=I*Z-N*X,T=B*A-K*E,_=B*G-W*E,S=B*H-$*E,h=K*G-W*A,q=K*H-$*A,p=W*H-$*G,R=U*p-F*q+D*h+J*S-P*_+j*T;if(!R)return null;return R=1/R,C[0]=(O*p-X*q+Z*h)*R,C[1]=(I*q-Q*p-N*h)*R,C[2]=(A*j-G*P+H*J)*R,C[3]=(W*P-K*j-$*J)*R,C[4]=(X*S-Y*p-Z*_)*R,C[5]=(M*p-I*S+N*_)*R,C[6]=(G*D-E*j-H*F)*R,C[7]=(B*j-W*D+$*F)*R,C[8]=(Y*q-O*S+Z*T)*R,C[9]=(Q*S-M*q-N*T)*R,C[10]=(E*P-A*D+H*U)*R,C[11]=(K*D-B*P-$*U)*R,C[12]=(O*_-Y*h-X*T)*R,C[13]=(M*h-Q*_+I*T)*R,C[14]=(A*F-E*J-G*U)*R,C[15]=(B*J-K*F+W*U)*R,C}function IC(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=V[4],O=V[5],X=V[6],Z=V[7],B=V[8],K=V[9],W=V[10],$=V[11],E=V[12],A=V[13],G=V[14],H=V[15];return C[0]=O*(W*H-$*G)-K*(X*H-Z*G)+A*(X*$-Z*W),C[1]=-(Q*(W*H-$*G)-K*(I*H-N*G)+A*(I*$-N*W)),C[2]=Q*(X*H-Z*G)-O*(I*H-N*G)+A*(I*Z-N*X),C[3]=-(Q*(X*$-Z*W)-O*(I*$-N*W)+K*(I*Z-N*X)),C[4]=-(Y*(W*H-$*G)-B*(X*H-Z*G)+E*(X*$-Z*W)),C[5]=M*(W*H-$*G)-B*(I*H-N*G)+E*(I*$-N*W),C[6]=-(M*(X*H-Z*G)-Y*(I*H-N*G)+E*(I*Z-N*X)),C[7]=M*(X*$-Z*W)-Y*(I*$-N*W)+B*(I*Z-N*X),C[8]=Y*(K*H-$*A)-B*(O*H-Z*A)+E*(O*$-Z*K),C[9]=-(M*(K*H-$*A)-B*(Q*H-N*A)+E*(Q*$-N*K)),C[10]=M*(O*H-Z*A)-Y*(Q*H-N*A)+E*(Q*Z-N*O),C[11]=-(M*(O*$-Z*K)-Y*(Q*$-N*K)+B*(Q*Z-N*O)),C[12]=-(Y*(K*G-W*A)-B*(O*G-X*A)+E*(O*W-X*K)),C[13]=M*(K*G-W*A)-B*(Q*G-I*A)+E*(Q*W-I*K),C[14]=-(M*(O*G-X*A)-Y*(Q*G-I*A)+E*(Q*X-I*O)),C[15]=M*(O*W-X*K)-Y*(Q*W-I*K)+B*(Q*X-I*O),C}function NC(C){var V=C[0],M=C[1],Q=C[2],I=C[3],N=C[4],Y=C[5],O=C[6],X=C[7],Z=C[8],B=C[9],K=C[10],W=C[11],$=C[12],E=C[13],A=C[14],G=C[15],H=V*Y-M*N,U=V*O-Q*N,F=V*X-I*N,D=M*O-Q*Y,J=M*X-I*Y,P=Q*X-I*O,j=Z*E-B*$,T=Z*A-K*$,_=Z*G-W*$,S=B*A-K*E,h=B*G-W*E,q=K*G-W*A;return H*q-U*h+F*S+D*_-J*T+P*j}function B0(C,V,M){var Q=V[0],I=V[1],N=V[2],Y=V[3],O=V[4],X=V[5],Z=V[6],B=V[7],K=V[8],W=V[9],$=V[10],E=V[11],A=V[12],G=V[13],H=V[14],U=V[15],F=M[0],D=M[1],J=M[2],P=M[3];return C[0]=F*Q+D*O+J*K+P*A,C[1]=F*I+D*X+J*W+P*G,C[2]=F*N+D*Z+J*$+P*H,C[3]=F*Y+D*B+J*E+P*U,F=M[4],D=M[5],J=M[6],P=M[7],C[4]=F*Q+D*O+J*K+P*A,C[5]=F*I+D*X+J*W+P*G,C[6]=F*N+D*Z+J*$+P*H,C[7]=F*Y+D*B+J*E+P*U,F=M[8],D=M[9],J=M[10],P=M[11],C[8]=F*Q+D*O+J*K+P*A,C[9]=F*I+D*X+J*W+P*G,C[10]=F*N+D*Z+J*$+P*H,C[11]=F*Y+D*B+J*E+P*U,F=M[12],D=M[13],J=M[14],P=M[15],C[12]=F*Q+D*O+J*K+P*A,C[13]=F*I+D*X+J*W+P*G,C[14]=F*N+D*Z+J*$+P*H,C[15]=F*Y+D*B+J*E+P*U,C}function YC(C,V,M){var Q=M[0],I=M[1],N=M[2],Y,O,X,Z,B,K,W,$,E,A,G,H;if(V===C)C[12]=V[0]*Q+V[4]*I+V[8]*N+V[12],C[13]=V[1]*Q+V[5]*I+V[9]*N+V[13],C[14]=V[2]*Q+V[6]*I+V[10]*N+V[14],C[15]=V[3]*Q+V[7]*I+V[11]*N+V[15];else Y=V[0],O=V[1],X=V[2],Z=V[3],B=V[4],K=V[5],W=V[6],$=V[7],E=V[8],A=V[9],G=V[10],H=V[11],C[0]=Y,C[1]=O,C[2]=X,C[3]=Z,C[4]=B,C[5]=K,C[6]=W,C[7]=$,C[8]=E,C[9]=A,C[10]=G,C[11]=H,C[12]=Y*Q+B*I+E*N+V[12],C[13]=O*Q+K*I+A*N+V[13],C[14]=X*Q+W*I+G*N+V[14],C[15]=Z*Q+$*I+H*N+V[15];return C}function OC(C,V,M){var Q=M[0],I=M[1],N=M[2];return C[0]=V[0]*Q,C[1]=V[1]*Q,C[2]=V[2]*Q,C[3]=V[3]*Q,C[4]=V[4]*I,C[5]=V[5]*I,C[6]=V[6]*I,C[7]=V[7]*I,C[8]=V[8]*N,C[9]=V[9]*N,C[10]=V[10]*N,C[11]=V[11]*N,C[12]=V[12],C[13]=V[13],C[14]=V[14],C[15]=V[15],C}function XC(C,V,M,Q){var I=Q[0],N=Q[1],Y=Q[2],O=Math.hypot(I,N,Y),X,Z,B,K,W,$,E,A,G,H,U,F,D,J,P,j,T,_,S,h,q,p,R,n;if(O0)M[0]=(O*Y+B*Q+X*N-Z*I)*2/K,M[1]=(X*Y+B*I+Z*Q-O*N)*2/K,M[2]=(Z*Y+B*N+O*I-X*Q)*2/K;else M[0]=(O*Y+B*Q+X*N-Z*I)*2,M[1]=(X*Y+B*I+Z*Q-O*N)*2,M[2]=(Z*Y+B*N+O*I-X*Q)*2;return G0(C,V,M),C}function PC(C,V){return C[0]=V[12],C[1]=V[13],C[2]=V[14],C}function K0(C,V){var M=V[0],Q=V[1],I=V[2],N=V[4],Y=V[5],O=V[6],X=V[8],Z=V[9],B=V[10];return C[0]=Math.hypot(M,Q,I),C[1]=Math.hypot(N,Y,O),C[2]=Math.hypot(X,Z,B),C}function DC(C,V){var M=new k(3);K0(M,V);var Q=1/M[0],I=1/M[1],N=1/M[2],Y=V[0]*Q,O=V[1]*I,X=V[2]*N,Z=V[4]*Q,B=V[5]*I,K=V[6]*N,W=V[8]*Q,$=V[9]*I,E=V[10]*N,A=Y+B+E,G=0;if(A>0)G=Math.sqrt(A+1)*2,C[3]=0.25*G,C[0]=(K-$)/G,C[1]=(W-X)/G,C[2]=(O-Z)/G;else if(Y>B&&Y>E)G=Math.sqrt(1+Y-B-E)*2,C[3]=(K-$)/G,C[0]=0.25*G,C[1]=(O+Z)/G,C[2]=(W+X)/G;else if(B>E)G=Math.sqrt(1+B-Y-E)*2,C[3]=(W-X)/G,C[0]=(O+Z)/G,C[1]=0.25*G,C[2]=(K+$)/G;else G=Math.sqrt(1+E-Y-B)*2,C[3]=(O-Z)/G,C[0]=(W+X)/G,C[1]=(K+$)/G,C[2]=0.25*G;return C}function FC(C,V,M,Q){var I=V[0],N=V[1],Y=V[2],O=V[3],X=I+I,Z=N+N,B=Y+Y,K=I*X,W=I*Z,$=I*B,E=N*Z,A=N*B,G=Y*B,H=O*X,U=O*Z,F=O*B,D=Q[0],J=Q[1],P=Q[2];return C[0]=(1-(E+G))*D,C[1]=(W+F)*D,C[2]=($-U)*D,C[3]=0,C[4]=(W-F)*J,C[5]=(1-(K+G))*J,C[6]=(A+H)*J,C[7]=0,C[8]=($+U)*P,C[9]=(A-H)*P,C[10]=(1-(K+E))*P,C[11]=0,C[12]=M[0],C[13]=M[1],C[14]=M[2],C[15]=1,C}function LC(C,V,M,Q,I){var N=V[0],Y=V[1],O=V[2],X=V[3],Z=N+N,B=Y+Y,K=O+O,W=N*Z,$=N*B,E=N*K,A=Y*B,G=Y*K,H=O*K,U=X*Z,F=X*B,D=X*K,J=Q[0],P=Q[1],j=Q[2],T=I[0],_=I[1],S=I[2],h=(1-(A+H))*J,q=($+D)*J,p=(E-F)*J,R=($-D)*P,n=(1-(W+H))*P,d=(G+U)*P,c=(E+F)*j,Y0=(G-U)*j,O0=(1-(W+A))*j;return C[0]=h,C[1]=q,C[2]=p,C[3]=0,C[4]=R,C[5]=n,C[6]=d,C[7]=0,C[8]=c,C[9]=Y0,C[10]=O0,C[11]=0,C[12]=M[0]+T-(h*T+R*_+c*S),C[13]=M[1]+_-(q*T+n*_+Y0*S),C[14]=M[2]+S-(p*T+d*_+O0*S),C[15]=1,C}function UC(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=M+M,O=Q+Q,X=I+I,Z=M*Y,B=Q*Y,K=Q*O,W=I*Y,$=I*O,E=I*X,A=N*Y,G=N*O,H=N*X;return C[0]=1-K-E,C[1]=B+H,C[2]=W-G,C[3]=0,C[4]=B-H,C[5]=1-Z-E,C[6]=$+A,C[7]=0,C[8]=W+G,C[9]=$-A,C[10]=1-Z-K,C[11]=0,C[12]=0,C[13]=0,C[14]=0,C[15]=1,C}function RC(C,V,M,Q,I,N,Y){var O=1/(M-V),X=1/(I-Q),Z=1/(N-Y);return C[0]=N*2*O,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=N*2*X,C[6]=0,C[7]=0,C[8]=(M+V)*O,C[9]=(I+Q)*X,C[10]=(Y+N)*Z,C[11]=-1,C[12]=0,C[13]=0,C[14]=Y*N*2*Z,C[15]=0,C}function $0(C,V,M,Q,I){var N=1/Math.tan(V/2),Y;if(C[0]=N/M,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=N,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[11]=-1,C[12]=0,C[13]=0,C[15]=0,I!=null&&I!==Infinity)Y=1/(Q-I),C[10]=(I+Q)*Y,C[14]=2*I*Q*Y;else C[10]=-1,C[14]=-2*Q;return C}function TC(C,V,M,Q,I){var N=1/Math.tan(V/2),Y;if(C[0]=N/M,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=N,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[11]=-1,C[12]=0,C[13]=0,C[15]=0,I!=null&&I!==Infinity)Y=1/(Q-I),C[10]=I*Y,C[14]=I*Q*Y;else C[10]=-1,C[14]=-Q;return C}function _C(C,V,M,Q){var I=Math.tan(V.upDegrees*Math.PI/180),N=Math.tan(V.downDegrees*Math.PI/180),Y=Math.tan(V.leftDegrees*Math.PI/180),O=Math.tan(V.rightDegrees*Math.PI/180),X=2/(Y+O),Z=2/(I+N);return C[0]=X,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=Z,C[6]=0,C[7]=0,C[8]=-((Y-O)*X*0.5),C[9]=(I-N)*Z*0.5,C[10]=Q/(M-Q),C[11]=-1,C[12]=0,C[13]=0,C[14]=Q*M/(M-Q),C[15]=0,C}function W0(C,V,M,Q,I,N,Y){var O=1/(V-M),X=1/(Q-I),Z=1/(N-Y);return C[0]=-2*O,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=-2*X,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=2*Z,C[11]=0,C[12]=(V+M)*O,C[13]=(I+Q)*X,C[14]=(Y+N)*Z,C[15]=1,C}function jC(C,V,M,Q,I,N,Y){var O=1/(V-M),X=1/(Q-I),Z=1/(N-Y);return C[0]=-2*O,C[1]=0,C[2]=0,C[3]=0,C[4]=0,C[5]=-2*X,C[6]=0,C[7]=0,C[8]=0,C[9]=0,C[10]=Z,C[11]=0,C[12]=(V+M)*O,C[13]=(I+Q)*X,C[14]=N*Z,C[15]=1,C}function hC(C,V,M,Q){var I,N,Y,O,X,Z,B,K,W,$,E=V[0],A=V[1],G=V[2],H=Q[0],U=Q[1],F=Q[2],D=M[0],J=M[1],P=M[2];if(Math.abs(E-D)0)$=1/Math.sqrt($),B*=$,K*=$,W*=$;var E=X*W-Z*K,A=Z*B-O*W,G=O*K-X*B;if($=E*E+A*A+G*G,$>0)$=1/Math.sqrt($),E*=$,A*=$,G*=$;return C[0]=E,C[1]=A,C[2]=G,C[3]=0,C[4]=K*G-W*A,C[5]=W*E-B*G,C[6]=B*A-K*E,C[7]=0,C[8]=B,C[9]=K,C[10]=W,C[11]=0,C[12]=I,C[13]=N,C[14]=Y,C[15]=1,C}function pC(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 gC(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 nC(C,V,M){return C[0]=V[0]+M[0],C[1]=V[1]+M[1],C[2]=V[2]+M[2],C[3]=V[3]+M[3],C[4]=V[4]+M[4],C[5]=V[5]+M[5],C[6]=V[6]+M[6],C[7]=V[7]+M[7],C[8]=V[8]+M[8],C[9]=V[9]+M[9],C[10]=V[10]+M[10],C[11]=V[11]+M[11],C[12]=V[12]+M[12],C[13]=V[13]+M[13],C[14]=V[14]+M[14],C[15]=V[15]+M[15],C}function A0(C,V,M){return C[0]=V[0]-M[0],C[1]=V[1]-M[1],C[2]=V[2]-M[2],C[3]=V[3]-M[3],C[4]=V[4]-M[4],C[5]=V[5]-M[5],C[6]=V[6]-M[6],C[7]=V[7]-M[7],C[8]=V[8]-M[8],C[9]=V[9]-M[9],C[10]=V[10]-M[10],C[11]=V[11]-M[11],C[12]=V[12]-M[12],C[13]=V[13]-M[13],C[14]=V[14]-M[14],C[15]=V[15]-M[15],C}function fC(C,V,M){return C[0]=V[0]*M,C[1]=V[1]*M,C[2]=V[2]*M,C[3]=V[3]*M,C[4]=V[4]*M,C[5]=V[5]*M,C[6]=V[6]*M,C[7]=V[7]*M,C[8]=V[8]*M,C[9]=V[9]*M,C[10]=V[10]*M,C[11]=V[11]*M,C[12]=V[12]*M,C[13]=V[13]*M,C[14]=V[14]*M,C[15]=V[15]*M,C}function vC(C,V,M,Q){return C[0]=V[0]+M[0]*Q,C[1]=V[1]+M[1]*Q,C[2]=V[2]+M[2]*Q,C[3]=V[3]+M[3]*Q,C[4]=V[4]+M[4]*Q,C[5]=V[5]+M[5]*Q,C[6]=V[6]+M[6]*Q,C[7]=V[7]+M[7]*Q,C[8]=V[8]+M[8]*Q,C[9]=V[9]+M[9]*Q,C[10]=V[10]+M[10]*Q,C[11]=V[11]+M[11]*Q,C[12]=V[12]+M[12]*Q,C[13]=V[13]+M[13]*Q,C[14]=V[14]+M[14]*Q,C[15]=V[15]+M[15]*Q,C}function wC(C,V){return C[0]===V[0]&&C[1]===V[1]&&C[2]===V[2]&&C[3]===V[3]&&C[4]===V[4]&&C[5]===V[5]&&C[6]===V[6]&&C[7]===V[7]&&C[8]===V[8]&&C[9]===V[9]&&C[10]===V[10]&&C[11]===V[11]&&C[12]===V[12]&&C[13]===V[13]&&C[14]===V[14]&&C[15]===V[15]}function iC(C,V){var M=C[0],Q=C[1],I=C[2],N=C[3],Y=C[4],O=C[5],X=C[6],Z=C[7],B=C[8],K=C[9],W=C[10],$=C[11],E=C[12],A=C[13],G=C[14],H=C[15],U=V[0],F=V[1],D=V[2],J=V[3],P=V[4],j=V[5],T=V[6],_=V[7],S=V[8],h=V[9],q=V[10],p=V[11],R=V[12],n=V[13],d=V[14],c=V[15];return Math.abs(M-U)<=L*Math.max(1,Math.abs(M),Math.abs(U))&&Math.abs(Q-F)<=L*Math.max(1,Math.abs(Q),Math.abs(F))&&Math.abs(I-D)<=L*Math.max(1,Math.abs(I),Math.abs(D))&&Math.abs(N-J)<=L*Math.max(1,Math.abs(N),Math.abs(J))&&Math.abs(Y-P)<=L*Math.max(1,Math.abs(Y),Math.abs(P))&&Math.abs(O-j)<=L*Math.max(1,Math.abs(O),Math.abs(j))&&Math.abs(X-T)<=L*Math.max(1,Math.abs(X),Math.abs(T))&&Math.abs(Z-_)<=L*Math.max(1,Math.abs(Z),Math.abs(_))&&Math.abs(B-S)<=L*Math.max(1,Math.abs(B),Math.abs(S))&&Math.abs(K-h)<=L*Math.max(1,Math.abs(K),Math.abs(h))&&Math.abs(W-q)<=L*Math.max(1,Math.abs(W),Math.abs(q))&&Math.abs($-p)<=L*Math.max(1,Math.abs($),Math.abs(p))&&Math.abs(E-R)<=L*Math.max(1,Math.abs(E),Math.abs(R))&&Math.abs(A-n)<=L*Math.max(1,Math.abs(A),Math.abs(n))&&Math.abs(G-d)<=L*Math.max(1,Math.abs(G),Math.abs(d))&&Math.abs(H-c)<=L*Math.max(1,Math.abs(H),Math.abs(c))}var kC=$0,SC=W0,dC=B0,cC=A0;var z={};u(z,{str:()=>{{return vV}},squaredLength:()=>{{return y0}},sqrLen:()=>{{return xV}},sqlerp:()=>{{return bV}},slerp:()=>{{return e}},setAxisAngle:()=>{{return v0}},setAxes:()=>{{return uV}},set:()=>{{return cV}},scale:()=>{{return l0}},rotationTo:()=>{{return eV}},rotateZ:()=>{{return jV}},rotateY:()=>{{return SV}},rotateX:()=>{{return _V}},random:()=>{{return pV}},pow:()=>{{return qV}},normalize:()=>{{return C0}},multiply:()=>{{return w0}},mul:()=>{{return rV}},ln:()=>{{return d0}},lerp:()=>{{return zV}},length:()=>{{return z0}},len:()=>{{return yV}},invert:()=>{{return gV}},identity:()=>{{return RV}},getAxisAngle:()=>{{return kV}},getAngle:()=>{{return TV}},fromValues:()=>{{return iV}},fromMat3:()=>{{return c0}},fromEuler:()=>{{return fV}},exp:()=>{{return i0}},exactEquals:()=>{{return sV}},equals:()=>{{return mV}},dot:()=>{{return r0}},create:()=>{{return a}},copy:()=>{{return dV}},conjugate:()=>{{return nV}},clone:()=>{{return wV}},calculateW:()=>{{return hV}},add:()=>{{return lV}}});var w={};u(w,{zero:()=>{{return GV}},transformQuat:()=>{{return YV}},transformMat4:()=>{{return IV}},transformMat3:()=>{{return NV}},subtract:()=>{{return H0}},sub:()=>{{return AV}},str:()=>{{return KV}},squaredLength:()=>{{return L0}},squaredDistance:()=>{{return F0}},sqrLen:()=>{{return DV}},sqrDist:()=>{{return PV}},set:()=>{{return zC}},scaleAndAdd:()=>{{return oC}},scale:()=>{{return uC}},round:()=>{{return bC}},rotateZ:()=>{{return ZV}},rotateY:()=>{{return XV}},rotateX:()=>{{return OV}},random:()=>{{return QV}},normalize:()=>{{return o}},negate:()=>{{return tC}},multiply:()=>{{return J0}},mul:()=>{{return EV}},min:()=>{{return mC}},max:()=>{{return eC}},lerp:()=>{{return CV}},length:()=>{{return E0}},len:()=>{{return t}},inverse:()=>{{return aC}},hermite:()=>{{return VV}},fromValues:()=>{{return s}},forEach:()=>{{return FV}},floor:()=>{{return sC}},exactEquals:()=>{{return $V}},equals:()=>{{return WV}},dot:()=>{{return m}},divide:()=>{{return P0}},div:()=>{{return HV}},distance:()=>{{return D0}},dist:()=>{{return JV}},cross:()=>{{return r}},create:()=>{{return x}},copy:()=>{{return rC}},clone:()=>{{return lC}},ceil:()=>{{return xC}},bezier:()=>{{return MV}},angle:()=>{{return BV}},add:()=>{{return yC}}});function x(){var C=new k(3);if(k!=Float32Array)C[0]=0,C[1]=0,C[2]=0;return C}function lC(C){var V=new k(3);return V[0]=C[0],V[1]=C[1],V[2]=C[2],V}function E0(C){var V=C[0],M=C[1],Q=C[2];return Math.hypot(V,M,Q)}function s(C,V,M){var Q=new k(3);return Q[0]=C,Q[1]=V,Q[2]=M,Q}function rC(C,V){return C[0]=V[0],C[1]=V[1],C[2]=V[2],C}function zC(C,V,M,Q){return C[0]=V,C[1]=M,C[2]=Q,C}function yC(C,V,M){return C[0]=V[0]+M[0],C[1]=V[1]+M[1],C[2]=V[2]+M[2],C}function H0(C,V,M){return C[0]=V[0]-M[0],C[1]=V[1]-M[1],C[2]=V[2]-M[2],C}function J0(C,V,M){return C[0]=V[0]*M[0],C[1]=V[1]*M[1],C[2]=V[2]*M[2],C}function P0(C,V,M){return C[0]=V[0]/M[0],C[1]=V[1]/M[1],C[2]=V[2]/M[2],C}function xC(C,V){return C[0]=Math.ceil(V[0]),C[1]=Math.ceil(V[1]),C[2]=Math.ceil(V[2]),C}function sC(C,V){return C[0]=Math.floor(V[0]),C[1]=Math.floor(V[1]),C[2]=Math.floor(V[2]),C}function mC(C,V,M){return C[0]=Math.min(V[0],M[0]),C[1]=Math.min(V[1],M[1]),C[2]=Math.min(V[2],M[2]),C}function eC(C,V,M){return C[0]=Math.max(V[0],M[0]),C[1]=Math.max(V[1],M[1]),C[2]=Math.max(V[2],M[2]),C}function bC(C,V){return C[0]=Math.round(V[0]),C[1]=Math.round(V[1]),C[2]=Math.round(V[2]),C}function uC(C,V,M){return C[0]=V[0]*M,C[1]=V[1]*M,C[2]=V[2]*M,C}function oC(C,V,M,Q){return C[0]=V[0]+M[0]*Q,C[1]=V[1]+M[1]*Q,C[2]=V[2]+M[2]*Q,C}function D0(C,V){var M=V[0]-C[0],Q=V[1]-C[1],I=V[2]-C[2];return Math.hypot(M,Q,I)}function F0(C,V){var M=V[0]-C[0],Q=V[1]-C[1],I=V[2]-C[2];return M*M+Q*Q+I*I}function L0(C){var V=C[0],M=C[1],Q=C[2];return V*V+M*M+Q*Q}function tC(C,V){return C[0]=-V[0],C[1]=-V[1],C[2]=-V[2],C}function aC(C,V){return C[0]=1/V[0],C[1]=1/V[1],C[2]=1/V[2],C}function o(C,V){var M=V[0],Q=V[1],I=V[2],N=M*M+Q*Q+I*I;if(N>0)N=1/Math.sqrt(N);return C[0]=V[0]*N,C[1]=V[1]*N,C[2]=V[2]*N,C}function m(C,V){return C[0]*V[0]+C[1]*V[1]+C[2]*V[2]}function r(C,V,M){var Q=V[0],I=V[1],N=V[2],Y=M[0],O=M[1],X=M[2];return C[0]=I*X-N*O,C[1]=N*Y-Q*X,C[2]=Q*O-I*Y,C}function CV(C,V,M,Q){var I=V[0],N=V[1],Y=V[2];return C[0]=I+Q*(M[0]-I),C[1]=N+Q*(M[1]-N),C[2]=Y+Q*(M[2]-Y),C}function VV(C,V,M,Q,I,N){var Y=N*N,O=Y*(2*N-3)+1,X=Y*(N-2)+N,Z=Y*(N-1),B=Y*(3-2*N);return C[0]=V[0]*O+M[0]*X+Q[0]*Z+I[0]*B,C[1]=V[1]*O+M[1]*X+Q[1]*Z+I[1]*B,C[2]=V[2]*O+M[2]*X+Q[2]*Z+I[2]*B,C}function MV(C,V,M,Q,I,N){var Y=1-N,O=Y*Y,X=N*N,Z=O*Y,B=3*N*O,K=3*X*Y,W=X*N;return C[0]=V[0]*Z+M[0]*B+Q[0]*K+I[0]*W,C[1]=V[1]*Z+M[1]*B+Q[1]*K+I[1]*W,C[2]=V[2]*Z+M[2]*B+Q[2]*K+I[2]*W,C}function QV(C,V){V=V||1;var M=f()*2*Math.PI,Q=f()*2-1,I=Math.sqrt(1-Q*Q)*V;return C[0]=Math.cos(M)*I,C[1]=Math.sin(M)*I,C[2]=Q*V,C}function IV(C,V,M){var Q=V[0],I=V[1],N=V[2],Y=M[3]*Q+M[7]*I+M[11]*N+M[15];return Y=Y||1,C[0]=(M[0]*Q+M[4]*I+M[8]*N+M[12])/Y,C[1]=(M[1]*Q+M[5]*I+M[9]*N+M[13])/Y,C[2]=(M[2]*Q+M[6]*I+M[10]*N+M[14])/Y,C}function NV(C,V,M){var Q=V[0],I=V[1],N=V[2];return C[0]=Q*M[0]+I*M[3]+N*M[6],C[1]=Q*M[1]+I*M[4]+N*M[7],C[2]=Q*M[2]+I*M[5]+N*M[8],C}function YV(C,V,M){var Q=M[0],I=M[1],N=M[2],Y=M[3],O=V[0],X=V[1],Z=V[2],B=I*Z-N*X,K=N*O-Q*Z,W=Q*X-I*O,$=I*W-N*K,E=N*B-Q*W,A=Q*K-I*B,G=Y*2;return B*=G,K*=G,W*=G,$*=2,E*=2,A*=2,C[0]=O+B+$,C[1]=X+K+E,C[2]=Z+W+A,C}function OV(C,V,M,Q){var I=[],N=[];return I[0]=V[0]-M[0],I[1]=V[1]-M[1],I[2]=V[2]-M[2],N[0]=I[0],N[1]=I[1]*Math.cos(Q)-I[2]*Math.sin(Q),N[2]=I[1]*Math.sin(Q)+I[2]*Math.cos(Q),C[0]=N[0]+M[0],C[1]=N[1]+M[1],C[2]=N[2]+M[2],C}function XV(C,V,M,Q){var I=[],N=[];return I[0]=V[0]-M[0],I[1]=V[1]-M[1],I[2]=V[2]-M[2],N[0]=I[2]*Math.sin(Q)+I[0]*Math.cos(Q),N[1]=I[1],N[2]=I[2]*Math.cos(Q)-I[0]*Math.sin(Q),C[0]=N[0]+M[0],C[1]=N[1]+M[1],C[2]=N[2]+M[2],C}function ZV(C,V,M,Q){var I=[],N=[];return I[0]=V[0]-M[0],I[1]=V[1]-M[1],I[2]=V[2]-M[2],N[0]=I[0]*Math.cos(Q)-I[1]*Math.sin(Q),N[1]=I[0]*Math.sin(Q)+I[1]*Math.cos(Q),N[2]=I[2],C[0]=N[0]+M[0],C[1]=N[1]+M[1],C[2]=N[2]+M[2],C}function BV(C,V){var M=C[0],Q=C[1],I=C[2],N=V[0],Y=V[1],O=V[2],X=Math.sqrt(M*M+Q*Q+I*I),Z=Math.sqrt(N*N+Y*Y+O*O),B=X*Z,K=B&&m(C,V)/B;return Math.acos(Math.min(Math.max(K,-1),1))}function GV(C){return C[0]=0,C[1]=0,C[2]=0,C}function KV(C){return"vec3("+C[0]+", "+C[1]+", "+C[2]+")"}function $V(C,V){return C[0]===V[0]&&C[1]===V[1]&&C[2]===V[2]}function WV(C,V){var M=C[0],Q=C[1],I=C[2],N=V[0],Y=V[1],O=V[2];return Math.abs(M-N)<=L*Math.max(1,Math.abs(M),Math.abs(N))&&Math.abs(Q-Y)<=L*Math.max(1,Math.abs(Q),Math.abs(Y))&&Math.abs(I-O)<=L*Math.max(1,Math.abs(I),Math.abs(O))}var AV=H0,EV=J0,HV=P0,JV=D0,PV=F0,t=E0,DV=L0,FV=function(){var C=x();return function(V,M,Q,I,N,Y){var O,X;if(!M)M=3;if(!Q)Q=0;if(I)X=Math.min(I*M+Q,V.length);else X=V.length;for(O=Q;O0)Y=1/Math.sqrt(Y);return C[0]=M*Y,C[1]=Q*Y,C[2]=I*Y,C[3]=N*Y,C}function p0(C,V){return C[0]*V[0]+C[1]*V[1]+C[2]*V[2]+C[3]*V[3]}function g0(C,V,M,Q){var I=V[0],N=V[1],Y=V[2],O=V[3];return C[0]=I+Q*(M[0]-I),C[1]=N+Q*(M[1]-N),C[2]=Y+Q*(M[2]-Y),C[3]=O+Q*(M[3]-O),C}function n0(C,V){return C[0]===V[0]&&C[1]===V[1]&&C[2]===V[2]&&C[3]===V[3]}function f0(C,V){var M=C[0],Q=C[1],I=C[2],N=C[3],Y=V[0],O=V[1],X=V[2],Z=V[3];return Math.abs(M-Y)<=L*Math.max(1,Math.abs(M),Math.abs(Y))&&Math.abs(Q-O)<=L*Math.max(1,Math.abs(Q),Math.abs(O))&&Math.abs(I-X)<=L*Math.max(1,Math.abs(I),Math.abs(X))&&Math.abs(N-Z)<=L*Math.max(1,Math.abs(N),Math.abs(Z))}var XM=function(){var C=LV();return function(V,M,Q,I,N,Y){var O,X;if(!M)M=4;if(!Q)Q=0;if(I)X=Math.min(I*M+Q,V.length);else X=V.length;for(O=Q;OL)C[0]=V[0]/Q,C[1]=V[1]/Q,C[2]=V[2]/Q;else C[0]=1,C[1]=0,C[2]=0;return M}function TV(C,V){var M=r0(C,V);return Math.acos(2*M*M-1)}function w0(C,V,M){var Q=V[0],I=V[1],N=V[2],Y=V[3],O=M[0],X=M[1],Z=M[2],B=M[3];return C[0]=Q*B+Y*O+I*Z-N*X,C[1]=I*B+Y*X+N*O-Q*Z,C[2]=N*B+Y*Z+Q*X-I*O,C[3]=Y*B-Q*O-I*X-N*Z,C}function _V(C,V,M){M*=0.5;var Q=V[0],I=V[1],N=V[2],Y=V[3],O=Math.sin(M),X=Math.cos(M);return C[0]=Q*X+Y*O,C[1]=I*X+N*O,C[2]=N*X-I*O,C[3]=Y*X-Q*O,C}function SV(C,V,M){M*=0.5;var Q=V[0],I=V[1],N=V[2],Y=V[3],O=Math.sin(M),X=Math.cos(M);return C[0]=Q*X-N*O,C[1]=I*X+Y*O,C[2]=N*X+Q*O,C[3]=Y*X-I*O,C}function jV(C,V,M){M*=0.5;var Q=V[0],I=V[1],N=V[2],Y=V[3],O=Math.sin(M),X=Math.cos(M);return C[0]=Q*X+I*O,C[1]=I*X-Q*O,C[2]=N*X+Y*O,C[3]=Y*X-N*O,C}function hV(C,V){var M=V[0],Q=V[1],I=V[2];return C[0]=M,C[1]=Q,C[2]=I,C[3]=Math.sqrt(Math.abs(1-M*M-Q*Q-I*I)),C}function i0(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=Math.sqrt(M*M+Q*Q+I*I),O=Math.exp(N),X=Y>0?O*Math.sin(Y)/Y:0;return C[0]=M*X,C[1]=Q*X,C[2]=I*X,C[3]=O*Math.cos(Y),C}function d0(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=Math.sqrt(M*M+Q*Q+I*I),O=Y>0?Math.atan2(Y,N)/Y:0;return C[0]=M*O,C[1]=Q*O,C[2]=I*O,C[3]=0.5*Math.log(M*M+Q*Q+I*I+N*N),C}function qV(C,V,M){return d0(C,V),l0(C,C,M),i0(C,C),C}function e(C,V,M,Q){var I=V[0],N=V[1],Y=V[2],O=V[3],X=M[0],Z=M[1],B=M[2],K=M[3],W,$,E,A,G;if($=I*X+N*Z+Y*B+O*K,$<0)$=-$,X=-X,Z=-Z,B=-B,K=-K;if(1-$>L)W=Math.acos($),E=Math.sin(W),A=Math.sin((1-Q)*W)/E,G=Math.sin(Q*W)/E;else A=1-Q,G=Q;return C[0]=A*I+G*X,C[1]=A*N+G*Z,C[2]=A*Y+G*B,C[3]=A*O+G*K,C}function pV(C){var V=f(),M=f(),Q=f(),I=Math.sqrt(1-V),N=Math.sqrt(V);return C[0]=I*Math.sin(2*Math.PI*M),C[1]=I*Math.cos(2*Math.PI*M),C[2]=N*Math.sin(2*Math.PI*Q),C[3]=N*Math.cos(2*Math.PI*Q),C}function gV(C,V){var M=V[0],Q=V[1],I=V[2],N=V[3],Y=M*M+Q*Q+I*I+N*N,O=Y?1/Y:0;return C[0]=-M*O,C[1]=-Q*O,C[2]=-I*O,C[3]=N*O,C}function nV(C,V){return C[0]=-V[0],C[1]=-V[1],C[2]=-V[2],C[3]=V[3],C}function c0(C,V){var M=V[0]+V[4]+V[8],Q;if(M>0)Q=Math.sqrt(M+1),C[3]=0.5*Q,Q=0.5/Q,C[0]=(V[5]-V[7])*Q,C[1]=(V[6]-V[2])*Q,C[2]=(V[1]-V[3])*Q;else{var I=0;if(V[4]>V[0])I=1;if(V[8]>V[I*3+I])I=2;var N=(I+1)%3,Y=(I+2)%3;Q=Math.sqrt(V[I*3+I]-V[N*3+N]-V[Y*3+Y]+1),C[I]=0.5*Q,Q=0.5/Q,C[3]=(V[N*3+Y]-V[Y*3+N])*Q,C[N]=(V[N*3+I]+V[I*3+N])*Q,C[Y]=(V[Y*3+I]+V[I*3+Y])*Q}return C}function fV(C,V,M,Q){var I=0.5*Math.PI/180;V*=I,M*=I,Q*=I;var N=Math.sin(V),Y=Math.cos(V),O=Math.sin(M),X=Math.cos(M),Z=Math.sin(Q),B=Math.cos(Q);return C[0]=N*X*B-Y*O*Z,C[1]=Y*O*B+N*X*Z,C[2]=Y*X*Z-N*O*B,C[3]=Y*X*B+N*O*Z,C}function vV(C){return"quat("+C[0]+", "+C[1]+", "+C[2]+", "+C[3]+")"}var wV=U0,iV=R0,dV=k0,cV=T0,lV=_0,rV=w0,l0=S0,r0=p0,zV=g0,z0=j0,yV=z0,y0=h0,xV=y0,C0=q0,sV=n0,mV=f0,eV=function(){var C=x(),V=s(1,0,0),M=s(0,1,0);return function(Q,I,N){var Y=m(I,N);if(Y<-0.999999){if(r(C,V,I),t(C)<0.000001)r(C,M,I);return o(C,C),v0(Q,C,Math.PI),Q}else if(Y>0.999999)return Q[0]=0,Q[1]=0,Q[2]=0,Q[3]=1,Q;else return r(C,I,N),Q[0]=C[0],Q[1]=C[1],Q[2]=C[2],Q[3]=1+Y,C0(Q,Q)}}(),bV=function(){var C=a(),V=a();return function(M,Q,I,N,Y,O){return e(C,Q,Y,O),e(V,I,N,O),e(M,C,V,2*O*(1-O)),M}}(),uV=function(){var C=X0();return function(V,M,Q,I){return C[0]=Q[0],C[3]=Q[1],C[6]=Q[2],C[1]=I[0],C[4]=I[1],C[7]=I[2],C[2]=-M[0],C[5]=-M[1],C[8]=-M[2],C0(V,c0(V,C))}}();class v{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 i{C;V;M;constructor(C=w.create(),V=z.create(),M=w.fromValues(1,1,1)){this.position=C;this.rotation=V;this.scale=M}rotateEuler(C,V,M){return z.fromEuler(this.rotation,C,V,M),this}toMat4(){const C=g.create();return g.fromRotationTranslationScale(C,this.rotation,this.position,this.scale),C}}class V0 extends v{C;V;M;Q;I;modelMatrix=g.create();projectionMatrix=g.create();buffers={};constructor(C,V,M,Q=new i([0,0,-6]),I={}){super(C);this.app=C;this.mesh=V;this.shader=M;this.camera=Q;this.config=I}configure(C){return this.config=C,this}makeBuffer(C,V=34962){const M=this.app.gl,Q=M.createBuffer();if(!Q)throw new Error("failed to create a buffer");return M.bindBuffer(V,Q),M.bufferData(V,C,M.STATIC_DRAW),M.bindBuffer(V,null),Q}initializeBuffers(){if(this.buffers.faces=this.makeBuffer(this.mesh.config.faces,this.app.gl.ELEMENT_ARRAY_BUFFER),this.buffers.position=this.makeBuffer(this.mesh.config.positions),this.bindAttrib(this.buffers.position,0,3,this.app.gl.FLOAT),this.mesh.config.normals)this.buffers.normal=this.makeBuffer(this.mesh.config.normals),this.bindAttrib(this.buffers.normal,"aVertexNormals",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,"aVertexColors",4,this.app.gl.UNSIGNED_BYTE);if(this.mesh.config.uvs)this.buffers.uv=this.makeBuffer(this.mesh.config.uvs),this.bindAttrib(this.buffers.uv,1,2,this.app.gl.FLOAT)}bindAttrib(C,V,M,Q,I=!1){const N=this.app.gl;N.bindBuffer(N.ARRAY_BUFFER,C);const Y=Number.isSafeInteger(V)?V:this.shader.attrib(V);if(Y!==-1)N.vertexAttribPointer(Y,M,Q,I,0,0),N.enableVertexAttribArray(Y);N.bindBuffer(N.ARRAY_BUFFER,null)}onStart(){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.initializeBuffers(),this.shader.link()}onRenderableUpdate(C,V){const M=this.app.gl;M.bindBuffer(M.ELEMENT_ARRAY_BUFFER,this.buffers.faces||null),M.bindBuffer(M.ARRAY_BUFFER,this.buffers.position||null),this.shader.use(),this.shader.setupUniforms(C,this.projectionMatrix,V,this.camera),M.drawElements(this.config.drawMode??M.TRIANGLES,this.mesh.config.faces.length,M.UNSIGNED_INT,0);const Q=M.getError();if(Q!==0)throw console.log({err:Q}),new Error(`(MeshRenderer) webgl failure: ${Q}`)}}class M0 extends v{C;el;frameTimes=[];maxFrameTimes=100;lastFrameTime=0;constructor(C,V="#telemetry"){super(C);this.app=C;if(this.el=document.querySelector(V),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()}onStart(){this.lastFrameTime=0,this.frameTimes=[],setInterval(()=>{const C=this.frameTimes.reduce((M,Q)=>M+Q,0)/this.frameTimes.length,V=1000/C;this.el.innerHTML=`${V.toFixed(1)} FPS (${C.toFixed(3)} ms)
bU: ${this.app.registry.onBeforeUpdate.length} | U: ${this.app.registry.onUpdate.length} | aU: ${this.app.registry.onAfterUpdate.length}`},1001)}onAfterUpdate(C){const V=C-this.lastFrameTime;this.insertTime(V),this.lastFrameTime=C}}class Q0{C;canvas;telemetry;gl;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 V=this.canvas.getContext("webgl2");if(!V)throw new Error("Canvas was unable to get a webgl2 context");const M=this.gl=V;if(M.viewport(0,0,M.drawingBufferWidth,M.drawingBufferHeight),location.search.includes("telemetry"))this.telemetry=new M0(this)}catch(V){const M=document.querySelector("main");if(M)M.innerHTML="
your browser didn't let me set up webgl.
";throw new Error(`Unable to initialize WebGL. Your browser or machine may not support it.\n -> ${V}`)}}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)}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((V)=>V(C,this)),this.registry.onUpdate.forEach((V)=>V(C,this)),this.registry.onAfterUpdate.forEach((V)=>V(C,this)),this.registry.onDraw.forEach((V)=>V(C,this))}doStart(C=0){this.clear(),this.registry.onStart.forEach((V)=>V(C,this))}async oneShot(C=0){this.doStart(C),this.doUpdate(C)}async start(){this.doStart();const C=(V)=>{this.doUpdate(V),requestAnimationFrame(C)};requestAnimationFrame(C)}}class I0 extends v{C;V;M;constructor(C,V,M){super(C);this.app=C;this.transform=V;this.renderer=M}onDraw(C){this.renderer.onRenderableUpdate(C,this.transform)}}class y{C;static VERTEX=35633;static FRAGMENT=35632;constructor(C={}){this.config=C}vertexCode="";fragmentCode="";_app;_program=null;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}attrib(C){return this.gl.getAttribLocation(this._program,C)}uniform(C){return this.gl.getUniformLocation(this._program,C)}attach(C,V){const M=this.gl,Q=M.createShader(C);if(!Q)throw new Error(`failed to init ${oV(C)} shader`);M.shaderSource(Q,V),M.compileShader(Q),M.attachShader(this._program,Q)}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))}bindAttrib(C,V){this.gl.bindAttribLocation(this._program,C,V)}setupUniforms(C,V,M,Q){const I=Q.toMat4();g.invert(I,I);const{gl:N}=this._app;if(N.useProgram(this._program),N.uniformMatrix4fv(this.uniform("uProjectionMatrix"),!1,V),this.config.time)N.uniform1f(this.uniform("uTime"),C);const Y=g.clone(M.toMat4());g.fromQuat(Y,Q.rotation),g.translate(Y,Y,Q.position),N.uniformMatrix4fv(this.uniform("uModelViewMatrix"),!1,Y)}use(){this._app?.gl.useProgram(this._program)}}var oV=(C)=>{switch(C){case y.FRAGMENT:return"fragment";case y.VERTEX:return"vertex";default:return"some unknown type of"}};var x0=`#version 300 es -precision highp float;uniform float uTime;uniform float uSinTime;uniform float uCosTime;in vec2 vTextureCoord;out vec4 fragColor;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}void main(){float zComponent=uSinTime*0.001*0.5+0.5;vec3 hsv=rgb2hsv(vec3(vTextureCoord,zComponent));hsv.x+=uTime*0.0001;hsv.y=1.0;hsv.z=1.0;vec3 rgb=hsv2rgb(hsv);fragColor=vec4(rgb,1.0);fragColor=clamp(fragColor,0.0,1.0);}`;var s0=`#version 300 es +precision highp float;uniform float uTime;in vec2 vTextureCoord;out vec4 fragColor;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}void main(){float zComponent=sin(uTime)*0.001*0.5+0.5;vec3 hsv=rgb2hsv(vec3(vTextureCoord,zComponent));hsv.x+=uTime*0.0001;hsv.y=1.0;hsv.z=1.0;vec3 rgb=hsv2rgb(hsv);fragColor=vec4(rgb,1.0);fragColor=clamp(fragColor,0.0,1.0);}`;var s0=`#version 300 es layout(location=0)in vec4 aVertexPosition;layout(location=1)in vec2 aTextureCoord;uniform mat4 uModelViewMatrix;uniform mat4 uProjectionMatrix;out vec2 vTextureCoord;void main(){gl_Position=uProjectionMatrix*uModelViewMatrix*aVertexPosition;vTextureCoord=aTextureCoord;}`;var m0=(C)=>new y({time:!0}).vertex(s0).fragment(x0).app(C);class N0{C;constructor(C){this.config=C}get name(){return this.config.name}}var CM=new Float32Array([0,2.609,0,-0.368004,2.9959495,0.50652,-0.595448,2.9959495,-0.19346951,0,2.609,0,0.368004,2.9959495,0.50652,0,2.609,0,-0.595448,2.9959495,-0.19346951,0,2.9959495,-0.6260975,0,2.609,0,0.595448,2.9959495,-0.19346951,0,2.609,0,0,3.6220505,0.6260975,-0.595448,3.6220505,0.19346951,-0.368004,3.6220505,-0.50652,0.368004,3.6220505,-0.50652,0.595448,3.6220505,0.19346951,-0.368004,3.6220505,-0.50652,0,4.0090003,0,0,4.0090003,0,0,4.0090003,0,0,4.0090003,0,0,4.0090003,0,1,0,0,0,2.5,0,-0.000000043711392,0,1,-1,0,-0.000000087422784,-0.000000043711392,0,1,0.0000000119248815,0,-1,1,0,0,0.0000000119248815,0,-1,-1,0,-0.000000087422784]),VM=new Uint8Array([0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255,255]),MM=new Float32Array([0.00013659838,0.8180941,0.15755458,0.7272099,0.1575546,0.9089782,0.00013659043,0.6363257,0.15755458,0.54544157,0.0001365666,0.09102075,0.15755455,0.00013656964,0.15755457,0.18190491,0.00013657454,0.2727891,0.15755457,0.36367324,0.00013658249,0.45455742,0.31497157,0.6363257,0.31497157,0.8180941,0.31497154,0.09102073,0.31497154,0.27278906,0.31497154,0.45455742,0.31497157,0.9998634,0.47238955,0.72720987,0.47238958,0.9089782,0.47238955,0.1819049,0.47238955,0.36367324,0.47238955,0.54544157,0.8119813,0.33945516,0.642322,0.16979587,0.8119813,0.00013659486,0.47266275,0.00013660162,0.81198126,0.6790469,0.47266275,0.33972836,0.47266272,0.6790469,0.47266275,0.33945513,0.81198126,0.3397284]),QM=new Float32Array([0,-1,0.00000083803394,-0.5257306,-0.44721383,0.723607,-0.8506533,-0.44721213,-0.2763879,0,-1,0.00000083803394,0.5257306,-0.4472139,0.723607,0,-1,0.00000083803394,-0.8506533,-0.44721213,-0.2763879,0,-0.44721153,-0.89442825,0,-1,0.00000083803394,0.8506533,-0.4472122,-0.27638793,0,-1,0.00000083803394,0,0.44721153,0.89442825,-0.8506533,0.44721216,0.27638793,-0.5257306,0.4472139,-0.72360694,0.5257306,0.4472139,-0.72360694,0.85065323,0.4472122,0.2763879,-0.5257306,0.4472139,-0.72360694,0,1,-0.0000008165459,0,1,-0.0000008165459,0,1,-0.0000008165459,0,1,-0.0000008165459,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.8999471,-0.4359989,-0.00000024291313]),IM=new Uint32Array([0,1,2,1,3,4,5,6,7,8,7,9,10,9,4,1,4,11,2,1,12,7,6,13,9,7,14,4,9,15,1,11,12,2,12,16,7,13,14,9,14,15,4,15,11,12,11,17,16,12,18,14,13,19,15,14,20,11,15,21,22,23,24,24,23,25,26,27,28,25,23,29,29,23,22,26,30,27]),e0=new N0({colors:VM,faces:IM,name:"src/meshes/trianglething.ply",normals:QM,positions:CM,uvs:MM,vertexCount:31});var b=new Q0({fov:45}),NM=new i([0,-2,-6]);new I0(b,new i,new V0(b,e0,m0(b),NM).configure({}));b.start(); diff --git a/src/common-shaders/uv-rainbow.frag b/src/common-shaders/uv-rainbow.frag index 0d587e0..81ad4c4 100644 --- a/src/common-shaders/uv-rainbow.frag +++ b/src/common-shaders/uv-rainbow.frag @@ -2,8 +2,6 @@ precision highp float; uniform float uTime; -uniform float uSinTime; -uniform float uCosTime; in vec2 vTextureCoord; out vec4 fragColor; @@ -25,7 +23,7 @@ vec3 hsv2rgb(vec3 c) { } void main() { - float zComponent = uSinTime * 0.001 * 0.5 + 0.5; + float zComponent = sin(uTime) * 0.001 * 0.5 + 0.5; vec3 hsv = rgb2hsv(vec3(vTextureCoord, zComponent)); hsv.x += uTime * 0.0001; hsv.y = 1.0;