@xeokit/xeokit-sdk
Version:
3D BIM IFC Viewer SDK for AEC engineering applications. Open Source JavaScript Toolkit based on pure WebGL for top performance, real-world coordinates and full double precision
7 lines (6 loc) • 1.59 MB
JavaScript
/**
* xeokit-sdk v2.6.107
* Commit: a1558d52a694d6b8435eb85661f0d13b0a1a6fea
* Built: 2026-03-12T09:09:01.366Z
*/
"undefined"!=typeof window&&(window.__XEOKIT__={version:"2.6.107",commit:"a1558d52a694d6b8435eb85661f0d13b0a1a6fea",built:"2026-03-12T09:09:01.366Z"}),Object.defineProperty(exports,"__esModule",{value:!0});class e{constructor(e,t){this.items=e||[],this._lastUniqueId=(t||0)+1}addItem(){let e;if(2===arguments.length){const t=arguments[0];if(e=arguments[1],this.items[t])throw"ID clash: '"+t+"'";return this.items[t]=e,t}for(e=arguments[0]||{};;){const t=this._lastUniqueId++;if(!this.items[t])return this.items[t]=e,t}}removeItem(e){const t=this.items[e];return delete this.items[e],t}}const t=new e;class s{constructor(e){this.id=e,this.parentItem=null,this.groups=[],this.menuElement=null,this.shown=!1,this.mouseOver=0}}class i{constructor(){this.items=[]}}class r{constructor(e,t,s,i,r){this.id=e,this.getTitle=t,this.doAction=s,this.getEnabled=i,this.getShown=r,this.itemElement=null,this.subMenu=null,this.enabled=!0}}function n(e,t,s=2){const i=t&&t.length,r=i?t[0]*s:e.length;let n=A(e,0,r,s,!0);const o=[];if(!n||n.next===n.prev)return o;let l,c,h;if(i&&(n=function(e,t,s,i){const r=[];for(let s=0,n=t.length;s<n;s++){const o=A(e,t[s]*i,s<n-1?t[s+1]*i:e.length,i,!1);o===o.next&&(o.steiner=!0),r.push(m(o))}r.sort(d);for(let e=0;e<r.length;e++)s=p(r[e],s);return s}(e,t,n,s)),e.length>80*s){l=1/0,c=1/0;let t=-1/0,i=-1/0;for(let n=s;n<r;n+=s){const s=e[n],r=e[n+1];s<l&&(l=s),r<c&&(c=r),s>t&&(t=s),r>i&&(i=r)}h=Math.max(t-l,i-c),h=0!==h?32767/h:0}return a(n,o,s,l,c,h,0),o}function A(e,t,s,i,r){let n;if(r===function(e,t,s,i){let r=0;for(let n=t,A=s-i;n<s;n+=i)r+=(e[A]-e[n])*(e[n+1]+e[A+1]),A=n;return r}(e,t,s,i)>0)for(let r=t;r<s;r+=i)n=x(r/i|0,e[r],e[r+1],n);else for(let r=s-i;r>=t;r-=i)n=x(r/i|0,e[r],e[r+1],n);return n&&w(n,n.next)&&(U(n),n=n.next),n}function o(e,t){if(!e)return e;t||(t=e);let s,i=e;do{if(s=!1,i.steiner||!w(i,i.next)&&0!==y(i.prev,i,i.next))i=i.next;else{if(U(i),i=t=i.prev,i===i.next)break;s=!0}}while(s||i!==t);return t}function a(e,t,s,i,r,n,A){if(!e)return;!A&&n&&function(e,t,s,i){let r=e;do{0===r.z&&(r.z=g(r.x,r.y,t,s,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){let t,s=1;do{let i,r=e;e=null;let n=null;for(t=0;r;){t++;let A=r,o=0;for(let e=0;e<s&&(o++,A=A.nextZ,A);e++);let a=s;for(;o>0||a>0&&A;)0!==o&&(0===a||!A||r.z<=A.z)?(i=r,r=r.nextZ,o--):(i=A,A=A.nextZ,a--),n?n.nextZ=i:e=i,i.prevZ=n,n=i;r=A}n.nextZ=null,s*=2}while(t>1)}(r)}(e,i,r,n);let d=e;for(;e.prev!==e.next;){const p=e.prev,f=e.next;if(n?c(e,i,r,n):l(e))t.push(p.i,e.i,f.i),U(e),e=f.next,d=f.next;else if((e=f)===d){A?1===A?a(e=h(o(e),t),t,s,i,r,n,2):2===A&&u(e,t,s,i,r,n):a(o(e),t,s,i,r,n,1);break}}}function l(e){const t=e.prev,s=e,i=e.next;if(y(t,s,i)>=0)return!1;const r=t.x,n=s.x,A=i.x,o=t.y,a=s.y,l=i.y,c=Math.min(r,n,A),h=Math.min(o,a,l),u=Math.max(r,n,A),d=Math.max(o,a,l);let p=i.next;for(;p!==t;){if(p.x>=c&&p.x<=u&&p.y>=h&&p.y<=d&&b(r,o,n,a,A,l,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function c(e,t,s,i){const r=e.prev,n=e,A=e.next;if(y(r,n,A)>=0)return!1;const o=r.x,a=n.x,l=A.x,c=r.y,h=n.y,u=A.y,d=Math.min(o,a,l),p=Math.min(c,h,u),f=Math.max(o,a,l),m=Math.max(c,h,u),_=g(d,p,t,s,i),B=g(f,m,t,s,i);let w=e.prevZ,v=e.nextZ;for(;w&&w.z>=_&&v&&v.z<=B;){if(w.x>=d&&w.x<=f&&w.y>=p&&w.y<=m&&w!==r&&w!==A&&b(o,c,a,h,l,u,w.x,w.y)&&y(w.prev,w,w.next)>=0)return!1;if(w=w.prevZ,v.x>=d&&v.x<=f&&v.y>=p&&v.y<=m&&v!==r&&v!==A&&b(o,c,a,h,l,u,v.x,v.y)&&y(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;w&&w.z>=_;){if(w.x>=d&&w.x<=f&&w.y>=p&&w.y<=m&&w!==r&&w!==A&&b(o,c,a,h,l,u,w.x,w.y)&&y(w.prev,w,w.next)>=0)return!1;w=w.prevZ}for(;v&&v.z<=B;){if(v.x>=d&&v.x<=f&&v.y>=p&&v.y<=m&&v!==r&&v!==A&&b(o,c,a,h,l,u,v.x,v.y)&&y(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function h(e,t){let s=e;do{const i=s.prev,r=s.next.next;!w(i,r)&&v(i,s,s.next,r)&&E(i,r)&&E(r,i)&&(t.push(i.i,s.i,r.i),U(s),U(s.next),s=e=r),s=s.next}while(s!==e);return o(s)}function u(e,t,s,i,r,n){let A=e;do{let e=A.next.next;for(;e!==A.prev;){if(A.i!==e.i&&B(A,e)){let l=F(A,e);return A=o(A,A.next),l=o(l,l.next),a(A,t,s,i,r,n,0),void a(l,t,s,i,r,n,0)}e=e.next}A=A.next}while(A!==e)}function d(e,t){let s=e.x-t.x;if(0===s&&(s=e.y-t.y,0===s)){s=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}return s}function p(e,t){const s=function(e,t){let s=t;const i=e.x,r=e.y;let n,A=-1/0;if(w(e,s))return s;do{if(w(e,s.next))return s.next;if(r<=s.y&&r>=s.next.y&&s.next.y!==s.y){const e=s.x+(r-s.y)*(s.next.x-s.x)/(s.next.y-s.y);if(e<=i&&e>A&&(A=e,n=s.x<s.next.x?s:s.next,e===i))return n}s=s.next}while(s!==t);if(!n)return null;const o=n,a=n.x,l=n.y;let c=1/0;s=n;do{if(i>=s.x&&s.x>=a&&i!==s.x&&_(r<l?i:A,r,a,l,r<l?A:i,r,s.x,s.y)){const t=Math.abs(r-s.y)/(i-s.x);E(s,e)&&(t<c||t===c&&(s.x>n.x||s.x===n.x&&f(n,s)))&&(n=s,c=t)}s=s.next}while(s!==o);return n}(e,t);if(!s)return t;const i=F(s,e);return o(i,i.next),o(s,s.next)}function f(e,t){return y(e.prev,e,t.prev)<0&&y(t.next,e,e.next)<0}function g(e,t,s,i,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-s)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function m(e){let t=e,s=e;do{(t.x<s.x||t.x===s.x&&t.y<s.y)&&(s=t),t=t.next}while(t!==e);return s}function _(e,t,s,i,r,n,A,o){return(r-A)*(t-o)>=(e-A)*(n-o)&&(e-A)*(i-o)>=(s-A)*(t-o)&&(s-A)*(n-o)>=(r-A)*(i-o)}function b(e,t,s,i,r,n,A,o){return!(e===A&&t===o)&&_(e,t,s,i,r,n,A,o)}function B(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){let s=e;do{if(s.i!==e.i&&s.next.i!==e.i&&s.i!==t.i&&s.next.i!==t.i&&v(s,s.next,e,t))return!0;s=s.next}while(s!==e);return!1}(e,t)&&(E(e,t)&&E(t,e)&&function(e,t){let s=e,i=!1;const r=(e.x+t.x)/2,n=(e.y+t.y)/2;do{s.y>n!=s.next.y>n&&s.next.y!==s.y&&r<(s.next.x-s.x)*(n-s.y)/(s.next.y-s.y)+s.x&&(i=!i),s=s.next}while(s!==e);return i}(e,t)&&(y(e.prev,e,t.prev)||y(e,t.prev,t))||w(e,t)&&y(e.prev,e,e.next)>0&&y(t.prev,t,t.next)>0)}function y(e,t,s){return(t.y-e.y)*(s.x-t.x)-(t.x-e.x)*(s.y-t.y)}function w(e,t){return e.x===t.x&&e.y===t.y}function v(e,t,s,i){const r=M(y(e,t,s)),n=M(y(e,t,i)),A=M(y(s,i,e)),o=M(y(s,i,t));return r!==n&&A!==o||(!(0!==r||!C(e,s,t))||(!(0!==n||!C(e,i,t))||(!(0!==A||!C(s,e,i))||!(0!==o||!C(s,t,i)))))}function C(e,t,s){return t.x<=Math.max(e.x,s.x)&&t.x>=Math.min(e.x,s.x)&&t.y<=Math.max(e.y,s.y)&&t.y>=Math.min(e.y,s.y)}function M(e){return e>0?1:e<0?-1:0}function E(e,t){return y(e.prev,e,e.next)<0?y(e,t,e.next)>=0&&y(e,e.prev,t)>=0:y(e,t,e.prev)<0||y(e,e.next,t)<0}function F(e,t){const s=I(e.i,e.x,e.y),i=I(t.i,t.x,t.y),r=e.next,n=t.prev;return e.next=t,t.prev=e,s.next=r,r.prev=s,i.next=s,s.prev=i,n.next=i,i.prev=n,i}function x(e,t,s,i){const r=I(e,t,s);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function U(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function I(e,t,s){return{i:e,x:t,y:s,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}let T=!0,P=T?Float64Array:Float32Array;const S=new P(3),D=new P(16),k=new P(16),Q=new P(4),R={setDoublePrecisionEnabled(e){T=e,P=T?Float64Array:Float32Array},getDoublePrecisionEnabled:()=>T,MIN_DOUBLE:-Number.MAX_SAFE_INTEGER,MAX_DOUBLE:Number.MAX_SAFE_INTEGER,MAX_INT:1e7,DEGTORAD:.0174532925,RADTODEG:57.295779513,unglobalizeObjectId(e,t){const s=t.indexOf("#");return s===e.length&&t.startsWith(e)?t.substring(s+1):t},globalizeObjectId:(e,t)=>e+"#"+t,safeInv(e){const t=1/e;return isNaN(t)||!isFinite(t)?1:t},vec2:e=>new P(e||2),vec3:e=>new P(e||3),vec4:e=>new P(e||4),mat3:e=>new P(e||9),mat3ToMat4:(e,t=new P(16))=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=0,t[4]=e[3],t[5]=e[4],t[6]=e[5],t[7]=0,t[8]=e[6],t[9]=e[7],t[10]=e[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t),mat4:e=>new P(e||16),mat4ToMat3:(e,t=new P(9))=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t),doublesToFloats(e,t,s){const i=new P(2);for(let r=0,n=e.length;r<n;r++)R.splitDouble(e[r],i),t[r]=i[0],s[r]=i[1]},splitDouble(e,t){const s=P.from([e])[0],i=e-s;t[0]=s,t[1]=i},createUUID:(()=>{const e=[];for(let t=0;t<256;t++)e[t]=(t<16?"0":"")+t.toString(16);return()=>{const t=4294967295*Math.random()|0,s=4294967295*Math.random()|0,i=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return`${e[255&t]+e[t>>8&255]+e[t>>16&255]+e[t>>24&255]}-${e[255&s]}${e[s>>8&255]}-${e[s>>16&15|64]}${e[s>>24&255]}-${e[63&i|128]}${e[i>>8&255]}-${e[i>>16&255]}${e[i>>24&255]}${e[255&r]}${e[r>>8&255]}${e[r>>16&255]}${e[r>>24&255]}`}})(),clamp:(e,t,s)=>Math.max(t,Math.min(s,e)),fmod(e,t){if(e<t)return console.error("math.fmod : Attempting to find modulus within negative range - would be infinite loop - ignoring"),e;for(;t<=e;)e-=t;return e},compareVec2:(e,t)=>e[0]===t[0]&&e[1]===t[1],compareVec3:(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2],compareVec4:(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3],negateVec3:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t),negateVec4:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t),addVec4:(e,t,s)=>(s||(s=e),s[0]=e[0]+t[0],s[1]=e[1]+t[1],s[2]=e[2]+t[2],s[3]=e[3]+t[3],s),addVec4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]+t,s[1]=e[1]+t,s[2]=e[2]+t,s[3]=e[3]+t,s),addVec2:(e,t,s)=>(s||(s=e),s[0]=e[0]+t[0],s[1]=e[1]+t[1],s),addVec3:(e,t,s)=>(s||(s=e),s[0]=e[0]+t[0],s[1]=e[1]+t[1],s[2]=e[2]+t[2],s),addVec3Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]+t,s[1]=e[1]+t,s[2]=e[2]+t,s),subVec4:(e,t,s)=>(s||(s=e),s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],s[3]=e[3]-t[3],s),subVec3:(e,t,s)=>(s||(s=e),s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],s),subVec2:(e,t,s)=>(s||(s=e),s[0]=e[0]-t[0],s[1]=e[1]-t[1],s),geometricMeanVec2(...e){const t=new P(e[0]);for(let s=1;s<e.length;s++)t[0]+=e[s][0],t[1]+=e[s][1];return t[0]/=e.length,t[1]/=e.length,t},subVec4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]-t,s[1]=e[1]-t,s[2]=e[2]-t,s[3]=e[3]-t,s),subScalarVec4:(e,t,s)=>(s||(s=e),s[0]=t-e[0],s[1]=t-e[1],s[2]=t-e[2],s[3]=t-e[3],s),mulVec2:(e,t,s)=>(s||(s=e),s[0]=e[0]*t[0],s[1]=e[1]*t[1],s),mulVec3:(e,t,s)=>(s||(s=e),s[0]=e[0]*t[0],s[1]=e[1]*t[1],s[2]=e[2]*t[2],s),mulVec4:(e,t,s)=>(s||(s=e),s[0]=e[0]*t[0],s[1]=e[1]*t[1],s[2]=e[2]*t[2],s[3]=e[3]*t[3],s),mulVec4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]*t,s[1]=e[1]*t,s[2]=e[2]*t,s[3]=e[3]*t,s),mulVec3Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]*t,s[1]=e[1]*t,s[2]=e[2]*t,s),mulVec2Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]*t,s[1]=e[1]*t,s),divVec3:(e,t,s)=>(s||(s=e),s[0]=e[0]/t[0],s[1]=e[1]/t[1],s[2]=e[2]/t[2],s),divVec4:(e,t,s)=>(s||(s=e),s[0]=e[0]/t[0],s[1]=e[1]/t[1],s[2]=e[2]/t[2],s[3]=e[3]/t[3],s),divScalarVec3:(e,t,s)=>(s||(s=t),s[0]=e/t[0],s[1]=e/t[1],s[2]=e/t[2],s),divVec3Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]/t,s[1]=e[1]/t,s[2]=e[2]/t,s),divVec4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]/t,s[1]=e[1]/t,s[2]=e[2]/t,s[3]=e[3]/t,s),divScalarVec4:(e,t,s)=>(s||(s=t),s[0]=e/t[0],s[1]=e/t[1],s[2]=e/t[2],s[3]=e/t[3],s),dotVec4:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],cross3Vec4(e,t){const s=e[0],i=e[1],r=e[2],n=t[0],A=t[1],o=t[2];return[i*o-r*A,r*n-s*o,s*A-i*n,0]},cross3Vec3(e,t,s){s||(s=e);const i=e[0],r=e[1],n=e[2],A=t[0],o=t[1],a=t[2];return s[0]=r*a-n*o,s[1]=n*A-i*a,s[2]=i*o-r*A,s},sqLenVec4:e=>R.dotVec4(e,e),lenVec4:e=>Math.sqrt(R.sqLenVec4(e)),dotVec3:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],dotVec2:(e,t)=>e[0]*t[0]+e[1]*t[1],sqLenVec3:e=>R.dotVec3(e,e),sqLenVec2:e=>R.dotVec2(e,e),lenVec3:e=>Math.sqrt(R.sqLenVec3(e)),distVec3:(()=>{const e=new P(3);return(t,s)=>R.lenVec3(R.subVec3(t,s,e))})(),lenVec2:e=>Math.sqrt(R.sqLenVec2(e)),distVec2:(()=>{const e=new P(2);return(t,s)=>R.lenVec2(R.subVec2(t,s,e))})(),rcpVec3:(e,t)=>R.divScalarVec3(1,e,t),normalizeVec4(e,t){const s=1/R.lenVec4(e);return R.mulVec4Scalar(e,s,t)},normalizeVec3(e,t){const s=1/R.lenVec3(e);return R.mulVec3Scalar(e,s,t)},normalizeVec2(e,t){const s=1/R.lenVec2(e);return R.mulVec2Scalar(e,s,t)},angleVec3(e,t){let s=R.dotVec3(e,t)/Math.sqrt(R.sqLenVec3(e)*R.sqLenVec3(t));return s=s<-1?-1:s>1?1:s,Math.acos(s)},vec3FromMat4Scale:(()=>{const e=new P(3);return(t,s)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],s[0]=R.lenVec3(e),e[0]=t[4],e[1]=t[5],e[2]=t[6],s[1]=R.lenVec3(e),e[0]=t[8],e[1]=t[9],e[2]=t[10],s[2]=R.lenVec3(e),s)})(),vecToArray:(()=>{function e(e){return Math.round(1e5*e)/1e5}return t=>{for(let s=0,i=(t=Array.prototype.slice.call(t)).length;s<i;s++)t[s]=e(t[s]);return t}})(),xyzArrayToObject:e=>({x:e[0],y:e[1],z:e[2]}),xyzObjectToArray:(e,t)=>((t=t||R.vec3())[0]=e.x,t[1]=e.y,t[2]=e.z,t),dupMat4:e=>e.slice(0,16),mat4To3:e=>[e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]],m4s:e=>[e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e],setMat4ToZeroes:()=>R.m4s(0),setMat4ToOnes:()=>R.m4s(1),diagonalMat4v:e=>new P([e[0],0,0,0,0,e[1],0,0,0,0,e[2],0,0,0,0,e[3]]),diagonalMat4c:(e,t,s,i)=>R.diagonalMat4v([e,t,s,i]),diagonalMat4s:e=>R.diagonalMat4c(e,e,e,e),identityMat4:(e=new P(16))=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e),identityMat3:(e=new P(9))=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e),isIdentityMat4:e=>1===e[0]&&0===e[1]&&0===e[2]&&0===e[3]&&0===e[4]&&1===e[5]&&0===e[6]&&0===e[7]&&0===e[8]&&0===e[9]&&1===e[10]&&0===e[11]&&0===e[12]&&0===e[13]&&0===e[14]&&1===e[15],negateMat4:(e,t)=>(t||(t=e),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t),addMat4:(e,t,s)=>(s||(s=e),s[0]=e[0]+t[0],s[1]=e[1]+t[1],s[2]=e[2]+t[2],s[3]=e[3]+t[3],s[4]=e[4]+t[4],s[5]=e[5]+t[5],s[6]=e[6]+t[6],s[7]=e[7]+t[7],s[8]=e[8]+t[8],s[9]=e[9]+t[9],s[10]=e[10]+t[10],s[11]=e[11]+t[11],s[12]=e[12]+t[12],s[13]=e[13]+t[13],s[14]=e[14]+t[14],s[15]=e[15]+t[15],s),addMat4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]+t,s[1]=e[1]+t,s[2]=e[2]+t,s[3]=e[3]+t,s[4]=e[4]+t,s[5]=e[5]+t,s[6]=e[6]+t,s[7]=e[7]+t,s[8]=e[8]+t,s[9]=e[9]+t,s[10]=e[10]+t,s[11]=e[11]+t,s[12]=e[12]+t,s[13]=e[13]+t,s[14]=e[14]+t,s[15]=e[15]+t,s),addScalarMat4:(e,t,s)=>R.addMat4Scalar(t,e,s),subMat4:(e,t,s)=>(s||(s=e),s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],s[3]=e[3]-t[3],s[4]=e[4]-t[4],s[5]=e[5]-t[5],s[6]=e[6]-t[6],s[7]=e[7]-t[7],s[8]=e[8]-t[8],s[9]=e[9]-t[9],s[10]=e[10]-t[10],s[11]=e[11]-t[11],s[12]=e[12]-t[12],s[13]=e[13]-t[13],s[14]=e[14]-t[14],s[15]=e[15]-t[15],s),subMat4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]-t,s[1]=e[1]-t,s[2]=e[2]-t,s[3]=e[3]-t,s[4]=e[4]-t,s[5]=e[5]-t,s[6]=e[6]-t,s[7]=e[7]-t,s[8]=e[8]-t,s[9]=e[9]-t,s[10]=e[10]-t,s[11]=e[11]-t,s[12]=e[12]-t,s[13]=e[13]-t,s[14]=e[14]-t,s[15]=e[15]-t,s),subScalarMat4:(e,t,s)=>(s||(s=t),s[0]=e-t[0],s[1]=e-t[1],s[2]=e-t[2],s[3]=e-t[3],s[4]=e-t[4],s[5]=e-t[5],s[6]=e-t[6],s[7]=e-t[7],s[8]=e-t[8],s[9]=e-t[9],s[10]=e-t[10],s[11]=e-t[11],s[12]=e-t[12],s[13]=e-t[13],s[14]=e-t[14],s[15]=e-t[15],s),mulMat4(e,t,s){s||(s=e);const i=e[0],r=e[1],n=e[2],A=e[3],o=e[4],a=e[5],l=e[6],c=e[7],h=e[8],u=e[9],d=e[10],p=e[11],f=e[12],g=e[13],m=e[14],_=e[15],b=t[0],B=t[1],y=t[2],w=t[3],v=t[4],C=t[5],M=t[6],E=t[7],F=t[8],x=t[9],U=t[10],I=t[11],T=t[12],P=t[13],S=t[14],D=t[15];return s[0]=b*i+B*o+y*h+w*f,s[1]=b*r+B*a+y*u+w*g,s[2]=b*n+B*l+y*d+w*m,s[3]=b*A+B*c+y*p+w*_,s[4]=v*i+C*o+M*h+E*f,s[5]=v*r+C*a+M*u+E*g,s[6]=v*n+C*l+M*d+E*m,s[7]=v*A+C*c+M*p+E*_,s[8]=F*i+x*o+U*h+I*f,s[9]=F*r+x*a+U*u+I*g,s[10]=F*n+x*l+U*d+I*m,s[11]=F*A+x*c+U*p+I*_,s[12]=T*i+P*o+S*h+D*f,s[13]=T*r+P*a+S*u+D*g,s[14]=T*n+P*l+S*d+D*m,s[15]=T*A+P*c+S*p+D*_,s},mulMat3(e,t,s){s||(s=new P(9));const i=e[0],r=e[3],n=e[6],A=e[1],o=e[4],a=e[7],l=e[2],c=e[5],h=e[8],u=t[0],d=t[3],p=t[6],f=t[1],g=t[4],m=t[7],_=t[2],b=t[5],B=t[8];return s[0]=i*u+r*f+n*_,s[3]=i*d+r*g+n*b,s[6]=i*p+r*m+n*B,s[1]=A*u+o*f+a*_,s[4]=A*d+o*g+a*b,s[7]=A*p+o*m+a*B,s[2]=l*u+c*f+h*_,s[5]=l*d+c*g+h*b,s[8]=l*p+c*m+h*B,s},mulMat4Scalar:(e,t,s)=>(s||(s=e),s[0]=e[0]*t,s[1]=e[1]*t,s[2]=e[2]*t,s[3]=e[3]*t,s[4]=e[4]*t,s[5]=e[5]*t,s[6]=e[6]*t,s[7]=e[7]*t,s[8]=e[8]*t,s[9]=e[9]*t,s[10]=e[10]*t,s[11]=e[11]*t,s[12]=e[12]*t,s[13]=e[13]*t,s[14]=e[14]*t,s[15]=e[15]*t,s),mulMat4v4(e,t,s=R.vec4()){const i=t[0],r=t[1],n=t[2],A=t[3];return s[0]=e[0]*i+e[4]*r+e[8]*n+e[12]*A,s[1]=e[1]*i+e[5]*r+e[9]*n+e[13]*A,s[2]=e[2]*i+e[6]*r+e[10]*n+e[14]*A,s[3]=e[3]*i+e[7]*r+e[11]*n+e[15]*A,s},transposeMat4(e,t){const s=e[4],i=e[14],r=e[8],n=e[13],A=e[12],o=e[9];if(!t||e===t){const t=e[1],a=e[2],l=e[3],c=e[6],h=e[7],u=e[11];return e[1]=s,e[2]=r,e[3]=A,e[4]=t,e[6]=o,e[7]=n,e[8]=a,e[9]=c,e[11]=i,e[12]=l,e[13]=h,e[14]=u,e}return t[0]=e[0],t[1]=s,t[2]=r,t[3]=A,t[4]=e[1],t[5]=e[5],t[6]=o,t[7]=n,t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=i,t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t},transposeMat3(e,t){if(t===e){const s=e[1],i=e[2],r=e[5];t[1]=e[3],t[2]=e[6],t[3]=s,t[5]=e[7],t[6]=i,t[7]=r}else t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8];return t},determinantMat4(e){const t=e[0],s=e[1],i=e[2],r=e[3],n=e[4],A=e[5],o=e[6],a=e[7],l=e[8],c=e[9],h=e[10],u=e[11],d=e[12],p=e[13],f=e[14],g=e[15];return d*c*o*r-l*p*o*r-d*A*h*r+n*p*h*r+l*A*f*r-n*c*f*r-d*c*i*a+l*p*i*a+d*s*h*a-t*p*h*a-l*s*f*a+t*c*f*a+d*A*i*u-n*p*i*u-d*s*o*u+t*p*o*u+n*s*f*u-t*A*f*u-l*A*i*g+n*c*i*g+l*s*o*g-t*c*o*g-n*s*h*g+t*A*h*g},inverseMat4(e,t){t||(t=e);const s=e[0],i=e[1],r=e[2],n=e[3],A=e[4],o=e[5],a=e[6],l=e[7],c=e[8],h=e[9],u=e[10],d=e[11],p=e[12],f=e[13],g=e[14],m=e[15],_=s*o-i*A,b=s*a-r*A,B=s*l-n*A,y=i*a-r*o,w=i*l-n*o,v=r*l-n*a,C=c*f-h*p,M=c*g-u*p,E=c*m-d*p,F=h*g-u*f,x=h*m-d*f,U=u*m-d*g,I=1/(_*U-b*x+B*F+y*E-w*M+v*C);return t[0]=(o*U-a*x+l*F)*I,t[1]=(-i*U+r*x-n*F)*I,t[2]=(f*v-g*w+m*y)*I,t[3]=(-h*v+u*w-d*y)*I,t[4]=(-A*U+a*E-l*M)*I,t[5]=(s*U-r*E+n*M)*I,t[6]=(-p*v+g*B-m*b)*I,t[7]=(c*v-u*B+d*b)*I,t[8]=(A*x-o*E+l*C)*I,t[9]=(-s*x+i*E-n*C)*I,t[10]=(p*w-f*B+m*_)*I,t[11]=(-c*w+h*B-d*_)*I,t[12]=(-A*F+o*M-a*C)*I,t[13]=(s*F-i*M+r*C)*I,t[14]=(-p*y+f*b-g*_)*I,t[15]=(c*y-h*b+u*_)*I,t},traceMat4:e=>e[0]+e[5]+e[10]+e[15],translationMat4v(e,t){const s=t||R.identityMat4();return s[12]=e[0],s[13]=e[1],s[14]=e[2],s},translationMat3v(e,t){const s=t||R.identityMat3();return s[6]=e[0],s[7]=e[1],s},translationMat4c:(()=>{const e=new P(3);return(t,s,i,r)=>(e[0]=t,e[1]=s,e[2]=i,R.translationMat4v(e,r))})(),translationMat4s:(e,t)=>R.translationMat4c(e,e,e,t),translateMat4v:(e,t)=>R.translateMat4c(e[0],e[1],e[2],t),translateMat4c(e,t,s,i){const r=i[3];i[0]+=r*e,i[1]+=r*t,i[2]+=r*s;const n=i[7];i[4]+=n*e,i[5]+=n*t,i[6]+=n*s;const A=i[11];i[8]+=A*e,i[9]+=A*t,i[10]+=A*s;const o=i[15];return i[12]+=o*e,i[13]+=o*t,i[14]+=o*s,i},setMat4Translation:(e,t,s)=>(s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],s[9]=e[9],s[10]=e[10],s[11]=e[11],s[12]=t[0],s[13]=t[1],s[14]=t[2],s[15]=e[15],s),rotationMat4v(e,t,s){const i=R.normalizeVec4([t[0],t[1],t[2],0],[]),r=Math.sin(e),n=Math.cos(e),A=1-n,o=i[0],a=i[1],l=i[2];let c,h,u,d,p,f;return c=o*a,h=a*l,u=l*o,d=o*r,p=a*r,f=l*r,(s=s||R.mat4())[0]=A*o*o+n,s[1]=A*c+f,s[2]=A*u-p,s[3]=0,s[4]=A*c-f,s[5]=A*a*a+n,s[6]=A*h+d,s[7]=0,s[8]=A*u+p,s[9]=A*h-d,s[10]=A*l*l+n,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,s},rotationMat4c:(e,t,s,i,r)=>R.rotationMat4v(e,[t,s,i],r),scalingMat4v:(e,t=R.identityMat4())=>(t[0]=e[0],t[5]=e[1],t[10]=e[2],t),scalingMat3v:(e,t=R.identityMat3())=>(t[0]=e[0],t[4]=e[1],t),scalingMat4c:(()=>{const e=new P(3);return(t,s,i,r)=>(e[0]=t,e[1]=s,e[2]=i,R.scalingMat4v(e,r))})(),scaleMat4c:(e,t,s,i)=>(i[0]*=e,i[4]*=t,i[8]*=s,i[1]*=e,i[5]*=t,i[9]*=s,i[2]*=e,i[6]*=t,i[10]*=s,i[3]*=e,i[7]*=t,i[11]*=s,i),scaleMat4v(e,t){const s=e[0],i=e[1],r=e[2];return t[0]*=s,t[4]*=i,t[8]*=r,t[1]*=s,t[5]*=i,t[9]*=r,t[2]*=s,t[6]*=i,t[10]*=r,t[3]*=s,t[7]*=i,t[11]*=r,t},scalingMat4s:e=>R.scalingMat4c(e,e,e),rotationTranslationMat4(e,t,s=R.mat4()){const i=e[0],r=e[1],n=e[2],A=e[3],o=i+i,a=r+r,l=n+n,c=i*o,h=i*a,u=i*l,d=r*a,p=r*l,f=n*l,g=A*o,m=A*a,_=A*l;return s[0]=1-(d+f),s[1]=h+_,s[2]=u-m,s[3]=0,s[4]=h-_,s[5]=1-(c+f),s[6]=p+g,s[7]=0,s[8]=u+m,s[9]=p-g,s[10]=1-(c+d),s[11]=0,s[12]=t[0],s[13]=t[1],s[14]=t[2],s[15]=1,s},mat4ToEuler(e,t,s=R.vec4()){const i=R.clamp,r=e[0],n=e[4],A=e[8],o=e[1],a=e[5],l=e[9],c=e[2],h=e[6],u=e[10];return"XYZ"===t?(s[1]=Math.asin(i(A,-1,1)),Math.abs(A)<.99999?(s[0]=Math.atan2(-l,u),s[2]=Math.atan2(-n,r)):(s[0]=Math.atan2(h,a),s[2]=0)):"YXZ"===t?(s[0]=Math.asin(-i(l,-1,1)),Math.abs(l)<.99999?(s[1]=Math.atan2(A,u),s[2]=Math.atan2(o,a)):(s[1]=Math.atan2(-c,r),s[2]=0)):"ZXY"===t?(s[0]=Math.asin(i(h,-1,1)),Math.abs(h)<.99999?(s[1]=Math.atan2(-c,u),s[2]=Math.atan2(-n,a)):(s[1]=0,s[2]=Math.atan2(o,r))):"ZYX"===t?(s[1]=Math.asin(-i(c,-1,1)),Math.abs(c)<.99999?(s[0]=Math.atan2(h,u),s[2]=Math.atan2(o,r)):(s[0]=0,s[2]=Math.atan2(-n,a))):"YZX"===t?(s[2]=Math.asin(i(o,-1,1)),Math.abs(o)<.99999?(s[0]=Math.atan2(-l,a),s[1]=Math.atan2(-c,r)):(s[0]=0,s[1]=Math.atan2(A,u))):"XZY"===t&&(s[2]=Math.asin(-i(n,-1,1)),Math.abs(n)<.99999?(s[0]=Math.atan2(h,a),s[1]=Math.atan2(A,r)):(s[0]=Math.atan2(-l,u),s[1]=0)),s[0]*=R.RADTODEG,s[1]*=R.RADTODEG,s[2]*=R.RADTODEG,s},composeMat4:(e,t,s,i=R.mat4())=>(R.quaternionToRotationMat4(t,i),R.scaleMat4v(s,i),R.translateMat4v(e,i),i),decomposeMat4:(()=>{const e=new P(3),t=new P(16);return function(s,i,r,n){e[0]=s[0],e[1]=s[1],e[2]=s[2];let A=R.lenVec3(e);e[0]=s[4],e[1]=s[5],e[2]=s[6];const o=R.lenVec3(e);e[0]=s[8],e[1]=s[9],e[2]=s[10];const a=R.lenVec3(e);R.determinantMat4(s)<0&&(A=-A),i[0]=s[12],i[1]=s[13],i[2]=s[14],t.set(s);const l=1/A,c=1/o,h=1/a;return t[0]*=l,t[1]*=l,t[2]*=l,t[4]*=c,t[5]*=c,t[6]*=c,t[8]*=h,t[9]*=h,t[10]*=h,R.mat4ToQuaternion(t,r),n[0]=A,n[1]=o,n[2]=a,this}})(),getColMat4(e,t){const s=4*t;return[e[s],e[s+1],e[s+2],e[s+3]]},setRowMat4(e,t,s){e[t]=s[0],e[t+4]=s[1],e[t+8]=s[2],e[t+12]=s[3]},lookAtMat4v(e,t,s,i){i||(i=R.mat4());const r=e[0],n=e[1],A=e[2],o=s[0],a=s[1],l=s[2],c=t[0],h=t[1],u=t[2];if(r===c&&n===h&&A===u)return R.identityMat4();let d,p,f,g,m,_,b,B,y,w;return d=r-c,p=n-h,f=A-u,w=1/Math.sqrt(d*d+p*p+f*f),d*=w,p*=w,f*=w,g=a*f-l*p,m=l*d-o*f,_=o*p-a*d,w=Math.sqrt(g*g+m*m+_*_),w?(w=1/w,g*=w,m*=w,_*=w):(g=0,m=0,_=0),b=p*_-f*m,B=f*g-d*_,y=d*m-p*g,w=Math.sqrt(b*b+B*B+y*y),w?(w=1/w,b*=w,B*=w,y*=w):(b=0,B=0,y=0),i[0]=g,i[1]=b,i[2]=d,i[3]=0,i[4]=m,i[5]=B,i[6]=p,i[7]=0,i[8]=_,i[9]=y,i[10]=f,i[11]=0,i[12]=-(g*r+m*n+_*A),i[13]=-(b*r+B*n+y*A),i[14]=-(d*r+p*n+f*A),i[15]=1,i},lookAtMat4c:(e,t,s,i,r,n,A,o,a)=>R.lookAtMat4v([e,t,s],[i,r,n],[A,o,a],[]),orthoMat4c(e,t,s,i,r,n,A){A||(A=R.mat4());const o=t-e,a=i-s,l=n-r;return A[0]=2/o,A[1]=0,A[2]=0,A[3]=0,A[4]=0,A[5]=2/a,A[6]=0,A[7]=0,A[8]=0,A[9]=0,A[10]=-2/l,A[11]=0,A[12]=-(e+t)/o,A[13]=-(i+s)/a,A[14]=-(n+r)/l,A[15]=1,A},frustumMat4v(e,t,s){s||(s=R.mat4());const i=[e[0],e[1],e[2],0],r=[t[0],t[1],t[2],0];R.addVec4(r,i,D),R.subVec4(r,i,k);const n=2*i[2],A=k[0],o=k[1],a=k[2];return s[0]=n/A,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=n/o,s[6]=0,s[7]=0,s[8]=D[0]/A,s[9]=D[1]/o,s[10]=-D[2]/a,s[11]=-1,s[12]=0,s[13]=0,s[14]=-n*r[2]/a,s[15]=0,s},frustumMat4(e,t,s,i,r,n,A){A||(A=R.mat4());const o=t-e,a=i-s,l=n-r;return A[0]=2*r/o,A[1]=0,A[2]=0,A[3]=0,A[4]=0,A[5]=2*r/a,A[6]=0,A[7]=0,A[8]=(t+e)/o,A[9]=(i+s)/a,A[10]=-(n+r)/l,A[11]=-1,A[12]=0,A[13]=0,A[14]=-n*r*2/l,A[15]=0,A},perspectiveMat4(e,t,s,i,r){const n=[],A=[];return n[2]=s,A[2]=i,A[1]=n[2]*Math.tan(e/2),n[1]=-A[1],A[0]=A[1]*t,n[0]=-A[0],R.frustumMat4v(n,A,r)},compareMat4:(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15],transformPoint3(e,t,s=R.vec3()){const i=t[0],r=t[1],n=t[2];return s[0]=e[0]*i+e[4]*r+e[8]*n+e[12],s[1]=e[1]*i+e[5]*r+e[9]*n+e[13],s[2]=e[2]*i+e[6]*r+e[10]*n+e[14],s},transformPoint4:(e,t,s=R.vec4())=>(s[0]=e[0]*t[0]+e[4]*t[1]+e[8]*t[2]+e[12]*t[3],s[1]=e[1]*t[0]+e[5]*t[1]+e[9]*t[2]+e[13]*t[3],s[2]=e[2]*t[0]+e[6]*t[1]+e[10]*t[2]+e[14]*t[3],s[3]=e[3]*t[0]+e[7]*t[1]+e[11]*t[2]+e[15]*t[3],s),transformPoints3(e,t,s){const i=s||[],r=t.length;let n,A,o,a;const l=e[0],c=e[1],h=e[2],u=e[3],d=e[4],p=e[5],f=e[6],g=e[7],m=e[8],_=e[9],b=e[10],B=e[11],y=e[12],w=e[13],v=e[14],C=e[15];let M;for(let e=0;e<r;++e)a=t[e],n=a[0],A=a[1],o=a[2],M=i[e]||(i[e]=[0,0,0]),M[0]=l*n+d*A+m*o+y,M[1]=c*n+p*A+_*o+w,M[2]=h*n+f*A+b*o+v,M[3]=u*n+g*A+B*o+C;return i.length=r,i},transformPositions3(e,t,s=t){let i;const r=t.length;let n,A,o;const a=e[0],l=e[1],c=e[2];e[3];const h=e[4],u=e[5],d=e[6];e[7];const p=e[8],f=e[9],g=e[10];e[11];const m=e[12],_=e[13],b=e[14];for(e[15],i=0;i<r;i+=3)n=t[i+0],A=t[i+1],o=t[i+2],s[i+0]=a*n+h*A+p*o+m,s[i+1]=l*n+u*A+f*o+_,s[i+2]=c*n+d*A+g*o+b;return s},transformPositions4(e,t,s=t){let i;const r=t.length;let n,A,o;const a=e[0],l=e[1],c=e[2],h=e[3],u=e[4],d=e[5],p=e[6],f=e[7],g=e[8],m=e[9],_=e[10],b=e[11],B=e[12],y=e[13],w=e[14],v=e[15];for(i=0;i<r;i+=4)n=t[i+0],A=t[i+1],o=t[i+2],s[i+0]=a*n+u*A+g*o+B,s[i+1]=l*n+d*A+m*o+y,s[i+2]=c*n+p*A+_*o+w,s[i+3]=h*n+f*A+b*o+v;return s},transformVec3(e,t,s){const i=t[0],r=t[1],n=t[2];return(s=s||this.vec3())[0]=e[0]*i+e[4]*r+e[8]*n,s[1]=e[1]*i+e[5]*r+e[9]*n,s[2]=e[2]*i+e[6]*r+e[10]*n,s},transformVec4(e,t,s){const i=t[0],r=t[1],n=t[2],A=t[3];return(s=s||R.vec4())[0]=e[0]*i+e[4]*r+e[8]*n+e[12]*A,s[1]=e[1]*i+e[5]*r+e[9]*n+e[13]*A,s[2]=e[2]*i+e[6]*r+e[10]*n+e[14]*A,s[3]=e[3]*i+e[7]*r+e[11]*n+e[15]*A,s},rotateVec2(e,t,s,i=e){const r=Math.cos(s),n=Math.sin(s),A=e[0]-t[0],o=e[1]-t[1];return i[0]=A*r-o*n+t[0],i[1]=A*n+o*r+t[1],e},rotateVec3X(e,t,s,i){const r=[],n=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],n[0]=r[0],n[1]=r[1]*Math.cos(s)-r[2]*Math.sin(s),n[2]=r[1]*Math.sin(s)+r[2]*Math.cos(s),i[0]=n[0]+t[0],i[1]=n[1]+t[1],i[2]=n[2]+t[2],i},rotateVec3Y(e,t,s,i){const r=[],n=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],n[0]=r[2]*Math.sin(s)+r[0]*Math.cos(s),n[1]=r[1],n[2]=r[2]*Math.cos(s)-r[0]*Math.sin(s),i[0]=n[0]+t[0],i[1]=n[1]+t[1],i[2]=n[2]+t[2],i},rotateVec3Z(e,t,s,i){const r=[],n=[];return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],n[0]=r[0]*Math.cos(s)-r[1]*Math.sin(s),n[1]=r[0]*Math.sin(s)+r[1]*Math.cos(s),n[2]=r[2],i[0]=n[0]+t[0],i[1]=n[1]+t[1],i[2]=n[2]+t[2],i},projectVec4(e,t){const s=1/e[3];return(t=t||R.vec2())[0]=e[0]*s,t[1]=e[1]*s,t},unprojectVec3:(()=>{const e=new P(16),t=new P(16),s=new P(16);return function(i,r,n,A){return this.transformVec3(this.mulMat4(this.inverseMat4(r,e),this.inverseMat4(n,t),s),i,A)}})(),lerpVec3(e,t,s,i,r,n){const A=n||R.vec3(),o=(e-t)/(s-t);return A[0]=i[0]+o*(r[0]-i[0]),A[1]=i[1]+o*(r[1]-i[1]),A[2]=i[2]+o*(r[2]-i[2]),A},lerpMat4(e,t,s,i,r,n){const A=n||R.mat4(),o=(e-t)/(s-t);return A[0]=i[0]+o*(r[0]-i[0]),A[1]=i[1]+o*(r[1]-i[1]),A[2]=i[2]+o*(r[2]-i[2]),A[3]=i[3]+o*(r[3]-i[3]),A[4]=i[4]+o*(r[4]-i[4]),A[5]=i[5]+o*(r[5]-i[5]),A[6]=i[6]+o*(r[6]-i[6]),A[7]=i[7]+o*(r[7]-i[7]),A[8]=i[8]+o*(r[8]-i[8]),A[9]=i[9]+o*(r[9]-i[9]),A[10]=i[10]+o*(r[10]-i[10]),A[11]=i[11]+o*(r[11]-i[11]),A[12]=i[12]+o*(r[12]-i[12]),A[13]=i[13]+o*(r[13]-i[13]),A[14]=i[14]+o*(r[14]-i[14]),A[15]=i[15]+o*(r[15]-i[15]),A},flatten(e){const t=[];let s,i,r,n,A;for(s=0,i=e.length;s<i;s++)for(A=e[s],r=0,n=A.length;r<n;r++)t.push(A[r]);return t},identityQuaternion:(e=R.vec4())=>(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e),eulerToQuaternion(e,t,s=R.vec4()){const i=e[0]*R.DEGTORAD/2,r=e[1]*R.DEGTORAD/2,n=e[2]*R.DEGTORAD/2,A=Math.cos(i),o=Math.cos(r),a=Math.cos(n),l=Math.sin(i),c=Math.sin(r),h=Math.sin(n);return"XYZ"===t?(s[0]=l*o*a+A*c*h,s[1]=A*c*a-l*o*h,s[2]=A*o*h+l*c*a,s[3]=A*o*a-l*c*h):"YXZ"===t?(s[0]=l*o*a+A*c*h,s[1]=A*c*a-l*o*h,s[2]=A*o*h-l*c*a,s[3]=A*o*a+l*c*h):"ZXY"===t?(s[0]=l*o*a-A*c*h,s[1]=A*c*a+l*o*h,s[2]=A*o*h+l*c*a,s[3]=A*o*a-l*c*h):"ZYX"===t?(s[0]=l*o*a-A*c*h,s[1]=A*c*a+l*o*h,s[2]=A*o*h-l*c*a,s[3]=A*o*a+l*c*h):"YZX"===t?(s[0]=l*o*a+A*c*h,s[1]=A*c*a+l*o*h,s[2]=A*o*h-l*c*a,s[3]=A*o*a-l*c*h):"XZY"===t&&(s[0]=l*o*a-A*c*h,s[1]=A*c*a-l*o*h,s[2]=A*o*h+l*c*a,s[3]=A*o*a+l*c*h),s},mat4ToQuaternion(e,t=R.vec4()){const s=e[0],i=e[4],r=e[8],n=e[1],A=e[5],o=e[9],a=e[2],l=e[6],c=e[10];let h;const u=s+A+c;return u>0?(h=.5/Math.sqrt(u+1),t[3]=.25/h,t[0]=(l-o)*h,t[1]=(r-a)*h,t[2]=(n-i)*h):s>A&&s>c?(h=2*Math.sqrt(1+s-A-c),t[3]=(l-o)/h,t[0]=.25*h,t[1]=(i+n)/h,t[2]=(r+a)/h):A>c?(h=2*Math.sqrt(1+A-s-c),t[3]=(r-a)/h,t[0]=(i+n)/h,t[1]=.25*h,t[2]=(o+l)/h):(h=2*Math.sqrt(1+c-s-A),t[3]=(n-i)/h,t[0]=(r+a)/h,t[1]=(o+l)/h,t[2]=.25*h),t},vec3PairToQuaternion(e,t,s=R.vec4()){const i=Math.sqrt(R.dotVec3(e,e)*R.dotVec3(t,t));let r=i+R.dotVec3(e,t);return r<1e-8*i?(r=0,Math.abs(e[0])>Math.abs(e[2])?(s[0]=-e[1],s[1]=e[0],s[2]=0):(s[0]=0,s[1]=-e[2],s[2]=e[1])):R.cross3Vec3(e,t,s),s[3]=r,R.normalizeQuaternion(s)},angleAxisToQuaternion(e,t=R.vec4()){const s=e[3]/2,i=Math.sin(s);return t[0]=i*e[0],t[1]=i*e[1],t[2]=i*e[2],t[3]=Math.cos(s),t},quaternionToEuler:(()=>{const e=new P(16);return(t,s,i)=>(i=i||R.vec3(),R.quaternionToRotationMat4(t,e),R.mat4ToEuler(e,s,i),i)})(),mulQuaternions(e,t,s=R.vec4()){const i=e[0],r=e[1],n=e[2],A=e[3],o=t[0],a=t[1],l=t[2],c=t[3];return s[0]=A*o+i*c+r*l-n*a,s[1]=A*a+r*c+n*o-i*l,s[2]=A*l+n*c+i*a-r*o,s[3]=A*c-i*o-r*a-n*l,s},vec3ApplyQuaternion(e,t,s=R.vec3()){const i=t[0],r=t[1],n=t[2],A=e[0],o=e[1],a=e[2],l=e[3],c=l*i+o*n-a*r,h=l*r+a*i-A*n,u=l*n+A*r-o*i,d=-A*i-o*r-a*n;return s[0]=c*l+d*-A+h*-a-u*-o,s[1]=h*l+d*-o+u*-A-c*-a,s[2]=u*l+d*-a+c*-o-h*-A,s},quaternionToMat4(e,t){t=R.identityMat4(t);const s=e[0],i=e[1],r=e[2],n=e[3],A=2*s,o=2*i,a=2*r,l=A*n,c=o*n,h=a*n,u=A*s,d=o*s,p=a*s,f=o*i,g=a*i,m=a*r;return t[0]=1-(f+m),t[1]=d+h,t[2]=p-c,t[4]=d-h,t[5]=1-(u+m),t[6]=g+l,t[8]=p+c,t[9]=g-l,t[10]=1-(u+f),t},quaternionToRotationMat4(e,t){const s=e[0],i=e[1],r=e[2],n=e[3],A=s+s,o=i+i,a=r+r,l=s*A,c=s*o,h=s*a,u=i*o,d=i*a,p=r*a,f=n*A,g=n*o,m=n*a;return t[0]=1-(u+p),t[4]=c-m,t[8]=h+g,t[1]=c+m,t[5]=1-(l+p),t[9]=d-f,t[2]=h-g,t[6]=d+f,t[10]=1-(l+u),t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},normalizeQuaternion(e,t=e){const s=R.lenVec4([e[0],e[1],e[2],e[3]]);return t[0]=e[0]/s,t[1]=e[1]/s,t[2]=e[2]/s,t[3]=e[3]/s,t},conjugateQuaternion:(e,t=e)=>(t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t),inverseQuaternion:(e,t)=>R.normalizeQuaternion(R.conjugateQuaternion(e,t)),quaternionToAngleAxis(e,t=R.vec4()){const s=(e=R.normalizeQuaternion(e,Q))[3],i=2*Math.acos(s),r=Math.sqrt(1-s*s);return r<.001?(t[0]=e[0],t[1]=e[1],t[2]=e[2]):(t[0]=e[0]/r,t[1]=e[1]/r,t[2]=e[2]/r),t[3]=i,t},AABB3:e=>new P(e||6),AABB2:e=>new P(e||4),OBB3:e=>new P(e||32),OBB2:e=>new P(e||16),Sphere3:(e,t,s,i)=>new P([e,t,s,i]),transformOBB3(e,t,s=t){let i;const r=t.length;let n,A,o;const a=e[0],l=e[1],c=e[2],h=e[3],u=e[4],d=e[5],p=e[6],f=e[7],g=e[8],m=e[9],_=e[10],b=e[11],B=e[12],y=e[13],w=e[14],v=e[15];for(i=0;i<r;i+=4)n=t[i+0],A=t[i+1],o=t[i+2],s[i+0]=a*n+u*A+g*o+B,s[i+1]=l*n+d*A+m*o+y,s[i+2]=c*n+p*A+_*o+w,s[i+3]=h*n+f*A+b*o+v;return s},containsAABB3:function(e,t){return e[0]<=t[0]&&t[3]<=e[3]&&e[1]<=t[1]&&t[4]<=e[4]&&e[2]<=t[2]&&t[5]<=e[5]},getAABB3Diag:(()=>{const e=new P(3),t=new P(3),s=new P(3);return i=>(e[0]=i[0],e[1]=i[1],e[2]=i[2],t[0]=i[3],t[1]=i[4],t[2]=i[5],R.subVec3(t,e,s),Math.abs(R.lenVec3(s)))})(),getAABB3DiagPoint:(()=>{const e=new P(3),t=new P(3),s=new P(3);return(i,r)=>{e[0]=i[0],e[1]=i[1],e[2]=i[2],t[0]=i[3],t[1]=i[4],t[2]=i[5];const n=R.subVec3(t,e,s),A=r[0]-i[0],o=i[3]-r[0],a=r[1]-i[1],l=i[4]-r[1],c=r[2]-i[2],h=i[5]-r[2];return n[0]+=A>o?A:o,n[1]+=a>l?a:l,n[2]+=c>h?c:h,Math.abs(R.lenVec3(n))}})(),getAABB3Area:e=>(e[3]-e[0])*(e[4]-e[1])*(e[5]-e[2]),getAABB3Center(e,t){const s=t||R.vec3();return s[0]=(e[0]+e[3])/2,s[1]=(e[1]+e[4])/2,s[2]=(e[2]+e[5])/2,s},getAABB2Center(e,t){const s=t||R.vec2();return s[0]=(e[2]+e[0])/2,s[1]=(e[3]+e[1])/2,s},collapseAABB3:(e=R.AABB3())=>(e[0]=R.MAX_DOUBLE,e[1]=R.MAX_DOUBLE,e[2]=R.MAX_DOUBLE,e[3]=R.MIN_DOUBLE,e[4]=R.MIN_DOUBLE,e[5]=R.MIN_DOUBLE,e),AABB3ToOBB3:(e,t=R.OBB3())=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t[4]=e[3],t[5]=e[1],t[6]=e[2],t[7]=1,t[8]=e[3],t[9]=e[4],t[10]=e[2],t[11]=1,t[12]=e[0],t[13]=e[4],t[14]=e[2],t[15]=1,t[16]=e[0],t[17]=e[1],t[18]=e[5],t[19]=1,t[20]=e[3],t[21]=e[1],t[22]=e[5],t[23]=1,t[24]=e[3],t[25]=e[4],t[26]=e[5],t[27]=1,t[28]=e[0],t[29]=e[4],t[30]=e[5],t[31]=1,t),positions3ToAABB3:(()=>{const e=new P(3);return(t,s,i)=>{s=s||R.AABB3();let r,n,A,o=R.MAX_DOUBLE,a=R.MAX_DOUBLE,l=R.MAX_DOUBLE,c=R.MIN_DOUBLE,h=R.MIN_DOUBLE,u=R.MIN_DOUBLE;for(let s=0,d=t.length;s<d;s+=3)i?(e[0]=t[s+0],e[1]=t[s+1],e[2]=t[s+2],R.decompressPosition(e,i,e),r=e[0],n=e[1],A=e[2]):(r=t[s+0],n=t[s+1],A=t[s+2]),r<o&&(o=r),n<a&&(a=n),A<l&&(l=A),r>c&&(c=r),n>h&&(h=n),A>u&&(u=A);return s[0]=o,s[1]=a,s[2]=l,s[3]=c,s[4]=h,s[5]=u,s}})(),OBB3ToAABB3(e,t=R.AABB3()){let s,i,r,n=R.MAX_DOUBLE,A=R.MAX_DOUBLE,o=R.MAX_DOUBLE,a=R.MIN_DOUBLE,l=R.MIN_DOUBLE,c=R.MIN_DOUBLE;for(let t=0,h=e.length;t<h;t+=4)s=e[t+0],i=e[t+1],r=e[t+2],s<n&&(n=s),i<A&&(A=i),r<o&&(o=r),s>a&&(a=s),i>l&&(l=i),r>c&&(c=r);return t[0]=n,t[1]=A,t[2]=o,t[3]=a,t[4]=l,t[5]=c,t},points3ToAABB3(e,t=R.AABB3()){let s,i,r,n=R.MAX_DOUBLE,A=R.MAX_DOUBLE,o=R.MAX_DOUBLE,a=R.MIN_DOUBLE,l=R.MIN_DOUBLE,c=R.MIN_DOUBLE;for(let t=0,h=e.length;t<h;t++)s=e[t][0],i=e[t][1],r=e[t][2],s<n&&(n=s),i<A&&(A=i),r<o&&(o=r),s>a&&(a=s),i>l&&(l=i),r>c&&(c=r);return t[0]=n,t[1]=A,t[2]=o,t[3]=a,t[4]=l,t[5]=c,t},points3ToSphere3:(()=>{const e=new P(3);return(t,s)=>{s=s||R.vec4();let i,r=0,n=0,A=0;const o=t.length;for(i=0;i<o;i++)r+=t[i][0],n+=t[i][1],A+=t[i][2];s[0]=r/o,s[1]=n/o,s[2]=A/o;let a,l=0;for(i=0;i<o;i++)a=Math.abs(R.lenVec3(R.subVec3(t[i],s,e))),a>l&&(l=a);return s[3]=l,s}})(),positions3ToSphere3:(()=>{const e=new P(3),t=new P(3);return(s,i)=>{i=i||R.vec4();let r,n=0,A=0,o=0;const a=s.length;let l=0;for(r=0;r<a;r+=3)n+=s[r],A+=s[r+1],o+=s[r+2];const c=a/3;let h;for(i[0]=n/c,i[1]=A/c,i[2]=o/c,r=0;r<a;r+=3)e[0]=s[r],e[1]=s[r+1],e[2]=s[r+2],h=Math.abs(R.lenVec3(R.subVec3(e,i,t))),h>l&&(l=h);return i[3]=l,i}})(),OBB3ToSphere3:(()=>{const e=new P(3),t=new P(3);return(s,i)=>{i=i||R.vec4();let r,n=0,A=0,o=0;const a=s.length,l=a/4;for(r=0;r<a;r+=4)n+=s[r+0],A+=s[r+1],o+=s[r+2];i[0]=n/l,i[1]=A/l,i[2]=o/l;let c,h=0;for(r=0;r<a;r+=4)e[0]=s[r+0],e[1]=s[r+1],e[2]=s[r+2],c=Math.abs(R.lenVec3(R.subVec3(e,i,t))),c>h&&(h=c);return i[3]=h,i}})(),getSphere3Center:(e,t=R.vec3())=>(t[0]=e[0],t[1]=e[1],t[2]=e[2],t),getPositionsCenter(e,t=R.vec3()){let s=0,i=0,r=0;for(var n=0,A=e.length;n<A;n+=3)s+=e[n+0],i+=e[n+1],r+=e[n+2];const o=e.length/3;return t[0]=s/o,t[1]=i/o,t[2]=r/o,t},expandAABB3:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]>t[2]&&(e[2]=t[2]),e[3]<t[3]&&(e[3]=t[3]),e[4]<t[4]&&(e[4]=t[4]),e[5]<t[5]&&(e[5]=t[5]),e),expandAABB3Point3:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]>t[2]&&(e[2]=t[2]),e[3]<t[0]&&(e[3]=t[0]),e[4]<t[1]&&(e[4]=t[1]),e[5]<t[2]&&(e[5]=t[2]),e),expandAABB3Points3(e,t){for(var s,i,r,n=0,A=t.length;n<A;n+=3)s=t[n],i=t[n+1],r=t[n+2],e[0]>s&&(e[0]=s),e[1]>i&&(e[1]=i),e[2]>r&&(e[2]=r),e[3]<s&&(e[3]=s),e[4]<i&&(e[4]=i),e[5]<r&&(e[5]=r);return e},collapseAABB2:(e=R.AABB2())=>(e[0]=R.MAX_DOUBLE,e[1]=R.MAX_DOUBLE,e[2]=R.MIN_DOUBLE,e[3]=R.MIN_DOUBLE,e),point3AABB3Intersect:(e,t)=>e[0]>t[0]||e[3]<t[0]||e[1]>t[1]||e[4]<t[1]||e[2]>t[2]||e[5]<t[2],point3AABB3AbsoluteIntersect:(e,t)=>e[0]<=t[0]&&e[3]>=t[0]&&e[1]<=t[1]&&e[4]>=t[1]&&e[2]<=t[2]&&e[5]>=t[2],planeAABB3Intersect(e,t,s){let i,r;e[0]>0?(i=e[0]*s[0],r=e[0]*s[3]):(i=e[0]*s[3],r=e[0]*s[0]),e[1]>0?(i+=e[1]*s[1],r+=e[1]*s[4]):(i+=e[1]*s[4],r+=e[1]*s[1]),e[2]>0?(i+=e[2]*s[2],r+=e[2]*s[5]):(i+=e[2]*s[5],r+=e[2]*s[2]);if(i<=-t&&r<=-t)return-1;return i>=-t&&r>=-t?1:0},OBB3ToAABB2(e,t=R.AABB2()){let s,i,r,n,A=R.MAX_DOUBLE,o=R.MAX_DOUBLE,a=R.MIN_DOUBLE,l=R.MIN_DOUBLE;for(let t=0,c=e.length;t<c;t+=4)s=e[t+0],i=e[t+1],r=e[t+3]||1,n=1/r,s*=n,i*=n,s<A&&(A=s),i<o&&(o=i),s>a&&(a=s),i>l&&(l=i);return t[0]=A,t[1]=o,t[2]=a,t[3]=l,t},expandAABB2:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[2]&&(e[2]=t[2]),e[3]<t[3]&&(e[3]=t[3]),e),expandAABB2Point2:(e,t)=>(e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1]),e),AABB2ToCanvas(e,t,s,i=e){const r=.5*(e[0]+1),n=.5*(e[1]+1),A=.5*(e[2]+1),o=.5*(e[3]+1);return i[0]=Math.floor(r*t),i[1]=s-Math.floor(o*s),i[2]=Math.floor(A*t),i[3]=s-Math.floor(n*s),i},tangentQuadraticBezier:(e,t,s,i)=>2*(1-e)*(s-t)+2*e*(i-s),tangentQuadraticBezier3:(e,t,s,i,r)=>-3*t*(1-e)*(1-e)+3*s*(1-e)*(1-e)-6*e*s*(1-e)+6*e*i*(1-e)-3*e*e*i+3*e*e*r,tangentSpline:e=>6*e*e-6*e+(3*e*e-4*e+1)+(-6*e*e+6*e)+(3*e*e-2*e),catmullRomInterpolate(e,t,s,i,r){const n=.5*(s-e),A=.5*(i-t),o=r*r;return(2*t-2*s+n+A)*(r*o)+(-3*t+3*s-2*n-A)*o+n*r+t},b2p0(e,t){const s=1-e;return s*s*t},b2p1:(e,t)=>2*(1-e)*e*t,b2p2:(e,t)=>e*e*t,b2(e,t,s,i){return this.b2p0(e,t)+this.b2p1(e,s)+this.b2p2(e,i)},b3p0(e,t){const s=1-e;return s*s*s*t},b3p1(e,t){const s=1-e;return 3*s*s*e*t},b3p2:(e,t)=>3*(1-e)*e*e*t,b3p3:(e,t)=>e*e*e*t,b3(e,t,s,i,r){return this.b3p0(e,t)+this.b3p1(e,s)+this.b3p2(e,i)+this.b3p3(e,r)},triangleNormal(e,t,s,i=R.vec3()){const r=t[0]-e[0],n=t[1]-e[1],A=t[2]-e[2],o=s[0]-e[0],a=s[1]-e[1],l=s[2]-e[2],c=n*l-A*a,h=A*o-r*l,u=r*a-n*o,d=Math.sqrt(c*c+h*h+u*u);return 0===d?(i[0]=0,i[1]=0,i[2]=0):(i[0]=c/d,i[1]=h/d,i[2]=u/d),i},rayTriangleIntersect:(()=>{const e=new P(3),t=new P(3),s=new P(3),i=new P(3),r=new P(3);return(n,A,o,a,l,c)=>{c=c||R.vec3();const h=R.subVec3(a,o,e),u=R.subVec3(l,o,t),d=R.cross3Vec3(A,u,s),p=R.dotVec3(h,d);if(p<1e-6)return null;const f=R.subVec3(n,o,i),g=R.dotVec3(f,d);if(g<0||g>p)return null;const m=R.cross3Vec3(f,h,r),_=R.dotVec3(A,m);if(_<0||g+_>p)return null;const b=R.dotVec3(u,m)/p;return c[0]=n[0]+b*A[0],c[1]=n[1]+b*A[1],c[2]=n[2]+b*A[2],c}})(),rayPlaneIntersect:(()=>{const e=new P(3),t=new P(3),s=new P(3),i=new P(3);return(r,n,A,o,a,l)=>{l=l||R.vec3(),n=R.normalizeVec3(n,e);const c=R.subVec3(o,A,t),h=R.subVec3(a,A,s),u=R.cross3Vec3(c,h,i);R.normalizeVec3(u,u);const d=-R.dotVec3(A,u),p=-(R.dotVec3(r,u)+d)/R.dotVec3(n,u);return l[0]=r[0]+p*n[0],l[1]=r[1]+p*n[1],l[2]=r[2]+p*n[2],l}})(),cartesianToBarycentric:(()=>{const e=new P(3),t=new P(3),s=new P(3);return(i,r,n,A,o)=>{const a=R.subVec3(A,r,e),l=R.subVec3(n,r,t),c=R.subVec3(i,r,s),h=R.dotVec3(a,a),u=R.dotVec3(a,l),d=R.dotVec3(a,c),p=R.dotVec3(l,l),f=R.dotVec3(l,c),g=h*p-u*u;if(0===g)return null;const m=1/g,_=(p*d-u*f)*m,b=(h*f-u*d)*m;return o[0]=1-_-b,o[1]=b,o[2]=_,o}})(),barycentricInsideTriangle(e){const t=e[1],s=e[2];return s>=0&&t>=0&&s+t<1},barycentricToCartesian(e,t,s,i,r=R.vec3()){const n=e[0],A=e[1],o=e[2];return r[0]=t[0]*n+s[0]*A+i[0]*o,r[1]=t[1]*n+s[1]*A+i[1]*o,r[2]=t[2]*n+s[2]*A+i[2]*o,r},mergeVertices(e,t,s,i){const r={},n=[],A=[],o=t?[]:null,a=s?[]:null,l=[];let c,h,u,d;const p=1e4;let f,g,m=0;for(f=0,g=e.length;f<g;f+=3)c=e[f],h=e[f+1],u=e[f+2],d=`${Math.round(c*p)}_${Math.round(h*p)}_${Math.round(u*p)}`,void 0===r[d]&&(r[d]=A.length/3,A.push(c),A.push(h),A.push(u),t&&(o.push(t[f]),o.push(t[f+1]),o.push(t[f+2])),s&&(a.push(s[m]),a.push(s[m+1]))),n[f/3]=r[d],m+=2;for(f=0,g=i.length;f<g;f++)l[f]=n[i[f]];const _={positions:A,indices:l};return o&&(_.normals=o),a&&(_.uv=a),_},buildNormals:(()=>{const e=new P(3),t=new P(3),s=new P(3),i=new P(3),r=new P(3),n=new P(3);return(A,o,a)=>{let l,c;const h=new Array(A.length/3);let u,d,p,f,g,m,_;for(l=0,c=o.length;l<c;l+=3){u=o[l],d=o[l+1],p=o[l+2],e[0]=A[3*u],e[1]=A[3*u+1],e[2]=A[3*u+2],t[0]=A[3*d],t[1]=A[3*d+1],t[2]=A[3*d+2],s[0]=A[3*p],s[1]=A[3*p+1],s[2]=A[3*p+2],R.subVec3(t,e,i),R.subVec3(s,e,r);const a=R.vec3();R.normalizeVec3(R.cross3Vec3(i,r,n),a),h[u]||(h[u]=[]),h[d]||(h[d]=[]),h[p]||(h[p]=[]),h[u].push(a),h[d].push(a),h[p].push(a)}for(a=a&&a.length===A.length?a:new Float32Array(A.length),l=0,c=h.length;l<c;l++){f=h[l].length,g=0,m=0,_=0;for(let e=0;e<f;e++)g+=h[l][e][0],m+=h[l][e][1],_+=h[l][e][2];a[3*l]=g/f,a[3*l+1]=m/f,a[3*l+2]=_/f}return a}})(),buildTangents:(()=>{const e=new P(3),t=new P(3),s=new P(3),i=new P(3),r=new P(3),n=new P(3),A=new P(3);return(o,a,l)=>{const c=new Float32Array(o.length);for(let h=0;h<a.length;h+=3){let u=a[h];const d=o.subarray(3*u,3*u+3),p=l.subarray(2*u,2*u+2);u=a[h+1];const f=o.subarray(3*u,3*u+3),g=l.subarray(2*u,2*u+2);u=a[h+2];const m=o.subarray(3*u,3*u+3),_=l.subarray(2*u,2*u+2),b=R.subVec3(f,d,e),B=R.subVec3(m,d,t),y=R.subVec2(g,p,s),w=R.subVec2(_,p,i),v=1/(y[0]*w[1]-y[1]*w[0]),C=R.mulVec3Scalar(R.subVec3(R.mulVec3Scalar(b,w[1],r),R.mulVec3Scalar(B,y[1],n),A),v,n);let M;for(let e=0;e<3;e++)M=3*a[h+e],c[M]+=C[0],c[M+1]+=C[1],c[M+2]+=C[2]}return c}})(),buildPickTriangles(e,t,s){const i=t.length,r=s?new Uint16Array(9*i):new Float32Array(9*i),n=new Uint8Array(12*i);let A,o,a,l,c,h,u=0,d=0,p=0;for(let s=0;s<i;s+=3)h=u>>24&255,c=u>>16&255,l=u>>8&255,a=255&u,o=t[s],A=3*o,r[d++]=e[A],r[d++]=e[A+1],r[d++]=e[A+2],n[p++]=a,n[p++]=l,n[p++]=c,n[p++]=h,o=t[s+1],A=3*o,r[d++]=e[A],r[d++]=e[A+1],r[d++]=e[A+2],n[p++]=a,n[p++]=l,n[p++]=c,n[p++]=h,o=t[s+2],A=3*o,r[d++]=e[A],r[d++]=e[A+1],r[d++]=e[A+2],n[p++]=a,n[p++]=l,n[p++]=c,n[p++]=h,u++;return{positions:r,colors:n}},faceToVertexNormals(e,t,s={}){const i=s.smoothNormalsAngleThreshold||20,r={},n=[],A={};let o,a,l,c,h;const u=1e4;let d,p,f,g,m,_;for(p=0,g=e.length;p<g;p+=3){d=p/3,a=e[p],l=e[p+1],c=e[p+2],h=`${Math.round(a*u)}_${Math.round(l*u)}_${Math.round(c*u)}`,void 0===r[h]?r[h]=[d]:r[h].push(d);const s=R.normalizeVec3([t[p],t[p+1],t[p+2]]);n[d]=s,o=R.vec4([s[0],s[1],s[2],1]),A[d]=o}for(h in r)if(r.hasOwnProperty(h)){const e=r[h],t=e.length;for(p=0;p<t;p++){const s=e[p];for(o=A[s],f=0;f<t;f++){if(p===f)continue;const t=e[f];m=n[s],_=n[t];Math.abs(R.angleVec3(m,_)/R.DEGTORAD)<i&&(o[0]+=_[0],o[1]+=_[1],o[2]+=_[2],o[3]+=1)}}}for(p=0,g=t.length;p<g;p+=3)o=A[p/3],t[p+0]=o[0]/o[3],t[p+1]=o[1]/o[3],t[p+2]=o[2]/o[3]},transformRay:(()=>{const e=new P(4),t=new P(4);return(s,i,r,n,A)=>{e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=1,R.transformVec4(s,e,t),n[0]=t[0],n[1]=t[1],n[2]=t[2],e[0]=r[0],e[1]=r[1],e[2]=r[2],R.transformVec3(s,e,t),R.normalizeVec3(t),A[0]=t[0],A[1]=t[1],A[2]=t[2]}})(),canvasPosToWorldRay:(()=>{const e=new P(16),t=new P(4),s=new P(4),i=(t,s,i,r,n)=>{n[0]=t,n[1]=s,n[2]=i,n[3]=1,R.transformVec4(e,n,n),r||R.mulVec4Scalar(n,1/n[3])};return(r,n,A,o,a,l,c)=>{const h="ortho"===o;R.mulMat4(A,n,e),R.inverseMat4(e,e);const u=2*a[0]/r.clientWidth-1,d=1-2*a[1]/r.clientHeight;i(u,d,-1,h,t),i(u,d,1,h,s),l[0]=t[0],l[1]=t[1],l[2]=t[2],R.subVec3(s,t,c),R.normalizeVec3(c)}})(),canvasPosToLocalRay:(()=>{const e=new P(3),t=new P(3);return(s,i,r,n,A,o,a,l)=>{R.canvasPosToWorldRay(s,i,r,n,o,e,t),R.worldRayToLocalRay(A,e,t,a,l)}})(),worldRayToLocalRay:(()=>{const e=new P(16),t=new P(4),s=new P(4);return(i,r,n,A,o)=>{const a=R.inverseMat4(i,e);t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=1,R.transformVec4(a,t,s),A[0]=s[0],A[1]=s[1],A[2]=s[2],R.transformVec3(a,n,o)}})(),buildKDTree:(()=>{const e=new Float32Array;function t(s,i,r,n){const A=new P(6),o={triangles:null,left:null,right:null,leaf:!1,splitDim:0,aabb:A};let a,l;for(A[0]=A[1]=A[2]=Number.POSITIVE_INFINITY,A[3]=A[4]=A[5]=Number.NEGATIVE_INFINITY,a=0,l=s.length;a<l;++a){var c=3*s[a];for(let e=0;e<3;++e){const t=3*i[c+e];r[t]<A[0]&&(A[0]=r[t]),r[t]>A[3]&&(A[3]=r[t]),r[t+1]<A[1]&&(A[1]=r[t+1]),r[t+1]>A[4]&&(A[4]=r[t+1]),r[t+2]<A[2]&&(A[2]=r[t+2]),r[t+2]>A[5]&&(A[5]=r[t+2])}}if(s.length<20||n>10)return o.triangles=s,o.leaf=!0,o;e[0]=A[3]-A[0],e[1]=A[4]-A[1],e[2]=A[5]-A[2];let h=0;e[1]>e[h]&&(h=1),e[2]>e[h]&&(h=2),o.splitDim=h;const u=(A[h]+A[h+3])/2,d=new Array(s.length);let p=0;const f=new Array(s.length);let g=0;for(a=0,l=s.length;a<l;++a){const e=i[c=3*s[a]],t=3*i[c+1],n=3*i[c+2];r[3*e+h]<=u||r[t+h]<=u||r[n+h]<=u?d[p++]=s[a]:f[g++]=s[a]}return d.length=p,f.length=g,o.left=t(d,i,r,n+1),o.right=t(f,i,r,n+1),o}return(e,s)=>{const i=e.length/3,r=new Array(i);for(let e=0;e<i;++e)r[e]=e;return t(r,e,s,0)}})(),decompressPosition(e,t,s){(s=s||e)[0]=e[0]*t[0]+t[12],s[1]=e[1]*t[5]+t[13],s[2]=e[2]*t[10]+t[14]},decompressPositions(e,t,s=new Float32Array(e.length)){for(let i=0,r=e.length;i<r;i+=3)s[i+0]=e[i+0]*t[0]+t[12],s[i+1]=e[i+1]*t[5]+t[13],s[i+2]=e[i+2]*t[10]+t[14];return s},decompressUV(e,t,s){s[0]=e[0]*t[0]+t[6],s[1]=e[1]*t[4]+t[7]},decompressUVs(e,t,s=new Float32Array(e.length)){for(let i=0,r=e.length;i<r;i+=3)s[i+0]=e[i+0]*t[0]+t[6],s[i+1]=e[i+1]*t[4]+t[7];return s},octDecodeVec2(e,t){let s=e[0],i=e[1];s=(2*s+1)/255,i=(2*i+1)/255;const r=1-Math.abs(s)-Math.abs(i);r<0&&(s=(1-Math.abs(i))*(s>=0?1:-1),i=(1-Math.abs(s))*(i>=0?1:-1));const n=Math.sqrt(s*s+i*i+r*r);return t[0]=s/n,t[1]=i/n,t[2]=r/n,t},octDecodeVec2s(e,t){for(let s=0,i=0,r=e.length;s<r;s+=2){let r=e[s+0],n=e[s+1];r=(2*r+1)/255,n=(2*n+1)/255;const A=1-Math.abs(r)-Math.abs(n);A<0&&(r=(1-Math.abs(n))*(r>=0?1:-1),n=(1-Math.abs(r))*(n>=0?1:-1));const o=Math.sqrt(r*r+n*n+A*A);t[i+0]=r/o,t[i+1]=n/o,t[i+2]=A/o,i+=3}return t}};R.buildEdgeIndices=function(){const e=[],t=[],s=[],i=[],r=[];let n=0;const A=new Uint16Array(3),o=new Uint16Array(3),a=new Uint16Array(3),l=R.vec3(),c=R.vec3(),h=R.vec3(),u=R.vec3(),d=R.vec3(),p=R.vec3(),f=R.vec3();return function(g,m,_,b){!function(r,n){const A={};let o,a,l,c;const h=Math.pow(10,4);let u,d,p=0;for(u=0,d=r.length;u<d;u+=3)o=r[u],a=r[u+1],l=r[u+2],c=Math.round(o*h)+"_"+Math.round(a*h)+"_"+Math.round(l*h),void 0===A[c]&&(A[c]=p/3,e[p++]=o,e[p++]=a,e[p++]=l),t[u/3]=A[c];for(u=0,d=n.length;u<d;u++)i[u]=t[n[u]],s[i[u]]=n[u]}(g,m),function(t,s){n=0;for(let g=0,m=t;g<m;g+=3){const t=3*i[g],m=3*i[g+1],_=3*i[g+2];s?(A[0]=e[t],A[1]=e[t+1],A[2]=e[t+2],o[0]=e[m],o[1]=e[m+1],o[2]=e[m+2],a[0]=e[_],a[1]=e[_+1],a[2]=e[_+2],R.decompressPosition(A,s,l),R.decompressPosition(o,s,c),R.decompressPosition(a,s,h)):(l[0]=e[t],l[1]=e[t+1],l[2]=e[t+2],c[0]=e[m],c[1]=e[m+1],c[2]=e[m+2],h[0]=e[_],h[1]=e[_+1],h[2]=e[_+2]),R.subVec3(h,c,u),R.subVec3(l,c,d),R.cross3Vec3(u,d,p),R.normalizeVec3(p,f);const b=r[n]||(r[n]={normal:R.vec3()});b.normal[0]=f[0],b.normal[1]=f[1],b.normal[2]=f[2],n++}}(m.length,_);const B=[],y=Math.cos(R.DEGTORAD*b),w={};let v,C,M,E,F,x,U,I,T,P,S,D=!1;for(let e=0,t=m.length;e<t;e+=3){const t=e/3;for(let s=0;s<3;s++)v=i[e+s],C=i[e+(s+1)%3],M=Math.min(v,C),E=Math.max(v,C),F=M+","+E,void 0===w[F]?w[F]={index1:M,index2:E,face1:t,face2:void 0}:w[F].face2=t}for(F in w)x=w[F],void 0!==x.face2&&(U=r[x.face1].normal,I=r[x.face2].normal,T=R.dotVec3(U,I),T>y)||(P=s[x.index1],S=s[x.index2],(!D&&P>65535||S>65535)&&(D=!0),B.push(P),B.push(S));return D?new Uint32Array(B):new Uint16Array(B)}}(),R.planeClipsPositions3=function(e,t,s,i=3){for(let r=0,n=s.length;r<n;r+=i){if(S[0]=s[r+0]-e[0],S[1]=s[r+1]-e[1],S[2]=s[r+2]-e[2],S[0]*t[0]+S[1]*t[1]+S[2]*t[2]<0)return!0}return!1},R.planeIntersectsAABB3=(e,t)=>{const s=[t[0],t[1],t[2]],i=[t[3],t[4],t[5]],r=[[s[0],s[1],s[2]],[i[0],s[1],s[2]],[s[0],i[1],s[2]],[i[0],i[1],s[2]],[s[0],s[1],i[2]],[i[0],s[1],i[2]],[s[0],i[1],i[2]],[i[0],i[1],i[2]]];let n=!1,A=!1;for(const t of r){const s=e.dist+R.dotVec3(e.dir,t);if(s>0&&(n=!0),s<0&&(A=!0),n&&A)return!0}return!1},R.makeSectionPlaneSlicer=function(){const e=R.vec2(),t=R.vec2(),s=R.vec2(),i=R.vec2(),r=R.vec3(),A=R.vec3(),o=R.vec3();R.vec3();const a=[R.vec3(),R.vec3(),R.vec3()],l=[null,null,null],c=[null,null,null],h=[null,null,null],u=[1,0,0],d=[0,1,0],p=[0,0,1],f=function(){const e=R.vec3();return(t,s)=>R.sqLenVec3(R.subVec3(t,s,e))}(),g=e=>{const t=[];for(let s=0;s<e;++s)t.push(s);return t},m=(e,t,s)=>(s[1]-e[1])*(t[0]-e[0])>(t[1]-e[1])*(s[0]-e[0]);return function(_){const b=R.vec3ApplyQuaternion(_.quaternion,u,R.vec3()),B=R.vec3ApplyQuaternion(_.quaternion,d,R.vec3()),y=R.vec3ApplyQuaternion(_.quaternion,p,R.vec3());return function(u,d={}){const p=R.subVec3(u.origin,_.pos,R.vec3()),w=R.dotVec3(y,p),v=[],C=[null],M=(e,t)=>{const s=C.length,i=new Float64Array(5);return i.set(e),t&&(R.addVec3(p,e,r),i[3]=-R.dotVec3(b,r),i[4]=R.dotVec3(B,r)),C.push(i),s},E=(e,t)=>{const s=C[e];return t[0]=s[3],t[1]=s[4],t},F=(r,n)=>{const A=r.boundingBox,o=n.boundingBox;if(A[0]<o[0]||A[1]<o[1]||A[2]>o[2]||A[3]>o[3])return!1;const a=r.endPoints,l=n.endPoints;for(let r=0,n=a.length-1;r<a.length;n=r++){const A=E(a[r],e),[o,c]=A,h=E(a[n],t);let u=!1;for(let e=0,t=l.length-1;e<l.length;t=e++){const r=E(l[e],s),n=E(l[t],i);if(m(A,r,n)!==m(h,r,n)&&m(A,h,r)!==m(A,h,n))return!1;const[a,d]=r,[p,f]=n,g=o-a,_=c-d,b=p-a,B=f-d,y=(0!==b||0!==B)&&Math.abs(b*_-B*g)<1e-10?g*b+_*B:-1;if(y>=0&&y<=Math.pow(b,2)+Math.pow(B,2))return!1;d>c!=f>c&&g<_*b/B&&(u=!u)}if(!u)return!1}return!0},x={indices:[],normals:[]},U=!d.onlyPosSliceWithUV&&{indices:[],normals:[]},I=(e,t,s)=>{if(e){const i=C[t[0]];s||=R.normalizeVec3(R.cross3Vec3(R.subVec3(C[t[1]],i,r),R.subVec3(C[t[2]],i,A),r),r);for(let i=0;i<3;++i)e.indices.push(t[i]),e.normals.push(s[0],s[1],s[2])}},T=(e,t)=>{const s=3*u.indices[e];return t[0]=u.positions[s+0],t[1]=u.positions[s+1],t[2]=u.positions[s+2],t};for(let e=0;e<u.indices.length;e+=3){const t=T(e+0,a[0]),s=T(e+1,a[1]),i=T(e+2,a[2]);if(R.compareVec3(t,s)||R.compareVec3(s,i)||R.compareVec3(i,t))continue;const n=w+R.dotVec3(y,t),A=w+R.dotVec3(y,s),o=w+R.dotVec3(y,i);if(0!==n||0!==A||0!==o){const e=n*A<=0&&M(R.lerpVec3(n/(n-A),0,1,t,s,r),!0),a=A*o<=0&&M(R.lerpVec3(A/(A-o),0,1,s,i,r),!0),u=o*n<=0&&M(R.lerpVec3(o/(o-n),0,1,i,t,r),!0),p=!d.onlyPosSliceWithUV&&c;if(p&&(p[0]=M(t),p[1]=M(s),p[2]=M(i)),e?a||u:a&&u){if(v.push(e?[e,a||u]:[a,u]),p)if(0===n&&0===A)I(o>0?x:U,p);else if(0===n&&0===o)I(A>0?x:U,p);else if(0===A&&0===o)I(n>0?x:U,p);else{const t=(e?n:A)>0,s=t?x:U,i=t?U:x,r=l;r[0]=e,r[1]=a,r[2]=u;const o=h;e?(o[0]=0,o[1]=1,o[2]=2):(o[0]=1,o[1]=2,o[2]=0),r[o[1]]?(I(s,[p[o[0]],r[o[0]],p[o[2]]]),I(s,[r[o[0]],r[o[1]],p[o[2]]]),I(i,[r[o[0]],p[o[1]],r[o[1]]])):(I(s,[p[o[0]],r[o[0]],r[o[2]]]),I(i,[r[o[0]],p[o[1]],p[o[2]]]),I(i,[r[o[0]],p[o[2]],r[o[2]]]))}}else p&&(n>=0&&A>=0&&o>=0?I(x,p):n<=0&&A<=0&&o<=0&&I(U,p))}}const P=[];for(;v.length>0;){P.push([v[0][0],v[0][1]]);const e=P[P.length-1];for(v.splice(0,1);v.length>0;){const t=C[e[e.length-1]],s={distSq:f(C[e[0]],t),idx:-1,side:-1};if(v.forEach(((e,i)=>{const r=f(C[e[0]],t),n=f(C[e[1]],t),A=Math.min(r,n);s.distSq>A&&(s.distSq=A,s.idx=i,s.side=n<r?1:0)})),!(s.distSq<1e-20)){P.pop();break}{const i=s.idx>=0&&v[s.idx];if(C[i?i[s.side]:e[0]]=t,!i)break;{v.splice(s.idx,1);const t=i[1-s.side];if(!(f(C[t],C[e[0]])>1e-20))break;e.push(t)}}}}const S=P.filter((e=>e.length>2)).map(((s,i)=>{let r=0;const n=R.collapseAABB2(R.AABB2());for(let i=0;i<s.length;i++)E(s[i],e),R.expandAABB