@luma.gl/gltf 9.3.0-alpha.4 → 9.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +397 -220
- package/dist/dist.min.js +98 -46
- package/dist/gltf/animations/animations.d.ts +16 -4
- package/dist/gltf/animations/animations.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.d.ts +4 -3
- package/dist/gltf/animations/interpolate.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.js +27 -36
- package/dist/gltf/animations/interpolate.js.map +1 -1
- package/dist/gltf/create-gltf-model.d.ts +6 -0
- package/dist/gltf/create-gltf-model.d.ts.map +1 -1
- package/dist/gltf/create-gltf-model.js +96 -44
- package/dist/gltf/create-gltf-model.js.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.d.ts +15 -1
- package/dist/gltf/create-scenegraph-from-gltf.d.ts.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.js +12 -6
- package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
- package/dist/gltf/gltf-animator.d.ts +26 -0
- package/dist/gltf/gltf-animator.d.ts.map +1 -1
- package/dist/gltf/gltf-animator.js +22 -19
- package/dist/gltf/gltf-animator.js.map +1 -1
- package/dist/index.cjs +378 -210
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/parse-gltf-animations.d.ts +1 -0
- package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-animations.js +46 -23
- package/dist/parsers/parse-gltf-animations.js.map +1 -1
- package/dist/parsers/parse-gltf-lights.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-lights.js +40 -12
- package/dist/parsers/parse-gltf-lights.js.map +1 -1
- package/dist/parsers/parse-gltf.d.ts +16 -1
- package/dist/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/parsers/parse-gltf.js +65 -57
- package/dist/parsers/parse-gltf.js.map +1 -1
- package/dist/parsers/parse-pbr-material.d.ts +46 -1
- package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
- package/dist/parsers/parse-pbr-material.js +137 -13
- package/dist/parsers/parse-pbr-material.js.map +1 -1
- package/dist/pbr/pbr-environment.d.ts +6 -0
- package/dist/pbr/pbr-environment.d.ts.map +1 -1
- package/dist/pbr/pbr-environment.js +1 -0
- package/dist/pbr/pbr-environment.js.map +1 -1
- package/dist/pbr/pbr-material.d.ts +5 -0
- package/dist/pbr/pbr-material.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts +12 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.js +3 -0
- package/dist/webgl-to-webgpu/convert-webgl-attribute.js.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts +6 -0
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js +4 -0
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts +2 -0
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.js +2 -0
- package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
- package/package.json +5 -5
- package/src/gltf/animations/animations.ts +17 -5
- package/src/gltf/animations/interpolate.ts +49 -68
- package/src/gltf/create-gltf-model.ts +101 -43
- package/src/gltf/create-scenegraph-from-gltf.ts +39 -11
- package/src/gltf/gltf-animator.ts +34 -25
- package/src/index.ts +1 -2
- package/src/parsers/parse-gltf-animations.ts +63 -26
- package/src/parsers/parse-gltf-lights.ts +51 -13
- package/src/parsers/parse-gltf.ts +90 -77
- package/src/parsers/parse-pbr-material.ts +204 -14
- package/src/pbr/pbr-environment.ts +10 -0
- package/src/pbr/pbr-material.ts +5 -0
- package/src/webgl-to-webgpu/convert-webgl-attribute.ts +12 -1
- package/src/webgl-to-webgpu/convert-webgl-sampler.ts +9 -0
- package/src/webgl-to-webgpu/convert-webgl-topology.ts +2 -0
- package/dist/utils/deep-copy.d.ts +0 -3
- package/dist/utils/deep-copy.d.ts.map +0 -1
- package/dist/utils/deep-copy.js +0 -21
- package/dist/utils/deep-copy.js.map +0 -1
- package/src/utils/deep-copy.ts +0 -22
package/dist/dist.min.js
CHANGED
|
@@ -4,52 +4,90 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['luma'] = factory();
|
|
6
6
|
else root['luma'] = factory();})(globalThis, function () {
|
|
7
|
-
"use strict";var __exports__=(()=>{var be=Object.create;var st=Object.defineProperty;var ze=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var qe=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var it=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),Ce=(n,t)=>{for(var e in t)st(n,e,{get:t[e],enumerable:!0})},rt=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Fe(t))!Be.call(n,s)&&s!==e&&st(n,s,{get:()=>t[s],enumerable:!(r=ze(t,s))||r.enumerable});return n},ot=(n,t,e)=>(rt(n,t,"default"),e&&rt(e,t,"default")),b=(n,t,e)=>(e=n!=null?be(qe(n)):{},rt(t||!n||!n.__esModule?st(e,"default",{value:n,enumerable:!0}):e,n)),Ve=n=>rt(st({},"__esModule",{value:!0}),n);var D=it((fs,Qt)=>{Qt.exports=globalThis.luma});var ct=it((hs,Kt)=>{Kt.exports=globalThis.luma});var zt=it((pi,Mn)=>{Mn.exports=globalThis.luma});var Ee=it((Lo,Ae)=>{Ae.exports=globalThis.luma});var et={};Ce(et,{GLTFAnimator:()=>H,createScenegraphsFromGLTF:()=>ke,loadPBREnvironment:()=>xn,parseGLTFLights:()=>wt,parsePBRMaterial:()=>xt});ot(et,b(D(),1));var bt=b(ct(),1);function V(n,t){if(!n)throw new Error(t||"loader assertion failed.")}var F={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Ue=F.self||F.window||F.global||{},De=F.window||F.self||F.global||{},Ye=F.global||F.self||F.window||{},$e=F.document||{};var Ot=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Zt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Ge=Zt&&parseFloat(Zt[1])||0;var We="",Jt={};function Rt(n){for(let t in Jt)if(n.startsWith(t)){let e=Jt[t];n=n.replace(t,e)}return!n.startsWith("http://")&&!n.startsWith("https://")&&(n=`${We}${n}`),n}var tn="4.3.2";var He=globalThis.loaders?.parseImageNode,Nt=typeof Image<"u",ut=typeof ImageBitmap<"u",Xe=Boolean(He),_t=Ot?!0:Xe;function nn(n){switch(n){case"auto":return ut||Nt||_t;case"imagebitmap":return ut;case"image":return Nt;case"data":return _t;default:throw new Error(`@loaders.gl/images: image ${n} not supported in this environment`)}}function en(){if(ut)return"imagebitmap";if(Nt)return"image";if(_t)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function rn(n){let t=je(n);if(!t)throw new Error("Not an image");return t}function Pt(n){return at(n)}function at(n){switch(rn(n)){case"data":return n;case"image":case"imagebitmap":let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)throw new Error("getImageData");return t.width=n.width,t.height=n.height,e.drawImage(n,0,0),e.getImageData(0,0,n.width,n.height);default:throw new Error("getImageData")}}function je(n){return typeof ImageBitmap<"u"&&n instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&n instanceof Image?"image":n&&typeof n=="object"&&n.data&&n.width&&n.height?"data":null}var Qe=/^data:image\/svg\+xml/,Ke=/\.svg((\?|#).*)?$/;function ft(n){return n&&(Qe.test(n)||Ke.test(n))}function sn(n,t){if(ft(t)){let r=new TextDecoder().decode(n);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return It(n,t)}function It(n,t){if(ft(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(n)])}async function ht(n,t,e){let r=sn(n,e),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await Ze(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function Ze(n,t){let e=new Image;return e.src=n,t.image&&t.image.decode&&e.decode?(await e.decode(),e):await new Promise((r,s)=>{try{e.onload=()=>r(e),e.onerror=i=>{let o=i instanceof Error?i.message:"error";s(new Error(o))}}catch(i){s(i)}})}var Je={},on=!0;async function cn(n,t,e){let r;ft(e)?r=await ht(n,t,e):r=It(n,e);let s=t&&t.imagebitmap;return await tr(r,s)}async function tr(n,t=null){if((nr(t)||!on)&&(t=null),t)try{return await createImageBitmap(n,t)}catch(e){console.warn(e),on=!1}return await createImageBitmap(n)}function nr(n){for(let t in n||Je)return!1;return!0}function an(n){return!ir(n,"ftyp",4)||!(n[8]&96)?null:er(n)}function er(n){switch(rr(n,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function rr(n,t,e){return String.fromCharCode(...n.slice(t,e))}function sr(n){return[...n].map(t=>t.charCodeAt(0))}function ir(n,t,e=0){let r=sr(t);for(let s=0;s<r.length;++s)if(r[s]!==n[s+e])return!1;return!0}var q=!1,j=!0;function lt(n){let t=Q(n);return cr(t)||hr(t)||ar(t)||fr(t)||or(t)}function or(n){let t=new Uint8Array(n instanceof DataView?n.buffer:n),e=an(t);return e?{mimeType:e.mimeType,width:0,height:0}:null}function cr(n){let t=Q(n);return t.byteLength>=24&&t.getUint32(0,q)===2303741511?{mimeType:"image/png",width:t.getUint32(16,q),height:t.getUint32(20,q)}:null}function ar(n){let t=Q(n);return t.byteLength>=10&&t.getUint32(0,q)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,j),height:t.getUint16(8,j)}:null}function fr(n){let t=Q(n);return t.byteLength>=14&&t.getUint16(0,q)===16973&&t.getUint32(2,j)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,j),height:t.getUint32(22,j)}:null}function hr(n){let t=Q(n);if(!(t.byteLength>=3&&t.getUint16(0,q)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=lr(),i=2;for(;i+9<t.byteLength;){let o=t.getUint16(i,q);if(s.has(o))return{mimeType:"image/jpeg",height:t.getUint16(i+5,q),width:t.getUint16(i+7,q)};if(!r.has(o))return null;i+=2,i+=t.getUint16(i,q)}return null}function lr(){let n=new Set([65499,65476,65484,65501,65534]);for(let e=65504;e<65520;++e)n.add(e);return{tableMarkers:n,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function Q(n){if(n instanceof DataView)return n;if(ArrayBuffer.isView(n))return new DataView(n.buffer);if(n instanceof ArrayBuffer)return new DataView(n);throw new Error("toDataView")}async function fn(n,t){let{mimeType:e}=lt(n)||{},r=globalThis.loaders?.parseImageNode;return V(r),await r(n,e)}async function hn(n,t,e){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=e||{},o=pr(s),c;switch(o){case"imagebitmap":c=await cn(n,t,i);break;case"image":c=await ht(n,t,i);break;case"data":c=await fn(n,t);break;default:V(!1)}return s==="data"&&(c=at(c)),c}function pr(n){switch(n){case"auto":case"data":return en();default:return nn(n),n}}var mr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],xr=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],Mr={image:{type:"auto",decode:!0}},pt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:tn,mimeTypes:xr,extensions:mr,parse:hn,tests:[n=>Boolean(lt(new DataView(n)))],options:Mr};function mt(n,t,e){let r=typeof n=="function"?n({...t,...e}):n,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Rt(r)}var dr=n=>n&&typeof n=="object";async function ln(n,t,e={}){return await vt(n,t,e)}async function vt(n,t,e){return Array.isArray(n)?await yr(n,t,e):dr(n)?await gr(n,t,e):await t(n,e)}async function gr(n,t,e){let r=[],s={};for(let i in n){let o=n[i],c=vt(o,t,e).then(a=>{s[i]=a});r.push(c)}return await Promise.all(r),s}async function yr(n,t,e={}){let r=n.map(s=>vt(s,t,e));return await Promise.all(r)}async function pn(n,t,e){return await ln(n,r=>kt(r,t,e))}async function kt(n,t,e){let s=await(await fetch(n,e.fetch)).arrayBuffer();return await t(s,e)}async function K(n,t={}){let e=await Tr(n,t);return await pn(e,pt.parse,t)}async function Tr(n,t,e={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await Ar(n,r,t,e):mt(n,t,e)}async function Ar(n,t,e,r){let s=[];if(t==="auto"){let i=mt(n,e,{...r,lod:0}),o=await kt(i,pt.parse,e),{width:c,height:a}=Pt(o);t=Er({width:c,height:a}),s.push(i)}V(t>0);for(let i=s.length;i<t;++i){let o=mt(n,e,{...r,lod:i});s.push(o)}return s}function Er(n){return 1+Math.floor(Math.log2(Math.max(n.width,n.height)))}function xn(n,t){let e=new bt.DynamicTexture(n,{id:"brdfLUT",sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"},data:K(t.brdfLutUrl)}),r=mn(n,{id:"DiffuseEnvSampler",getTextureForFace:i=>K(t.getTexUrl("diffuse",i,0)),sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}}),s=mn(n,{id:"SpecularEnvSampler",getTextureForFace:i=>{let o=[];for(let c=0;c<=t.specularMipLevels-1;c++)o.push(K(t.getTexUrl("specular",i,c)));return o},sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}});return{brdfLutTexture:e,diffuseEnvSampler:r,specularEnvSampler:s}}var wr=[0,1,2,3,4,5];function mn(n,{id:t,getTextureForFace:e,sampler:r}){let s={};return wr.forEach(i=>{s[String(i)]=e(i)}),new bt.DynamicTexture(n,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var di=b(zt(),1),yn=b(D(),1);var mi=b(zt(),1);function gn(n){return{addressModeU:dn(n.wrapS),addressModeV:dn(n.wrapT),magFilter:Sr(n.magFilter),...Lr(n.minFilter)}}function dn(n){switch(n){case 33071:return"clamp-to-edge";case 10497:return"repeat";case 33648:return"mirror-repeat";default:return}}function Sr(n){switch(n){case 9728:return"nearest";case 9729:return"linear";default:return}}function Lr(n){switch(n){case 9728:return{minFilter:"nearest"};case 9729:return{minFilter:"linear"};case 9984:return{minFilter:"nearest",mipmapFilter:"nearest"};case 9985:return{minFilter:"linear",mipmapFilter:"nearest"};case 9986:return{minFilter:"nearest",mipmapFilter:"linear"};case 9987:return{minFilter:"linear",mipmapFilter:"linear"};default:return{}}}function xt(n,t,e,r){let s={defines:{MANUAL_SRGB:!0,SRGB_FAST_APPROXIMATION:!0},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=!0;let{imageBasedLightingEnvironment:i}=r;return i&&(s.bindings.pbr_diffuseEnvSampler=i.diffuseEnvSampler.texture,s.bindings.pbr_specularEnvSampler=i.specularEnvSampler.texture,s.bindings.pbr_BrdfLUT=i.brdfLutTexture.texture,s.uniforms.scaleIBLAmbient=[1,1]),r?.pbrDebug&&(s.defines.PBR_DEBUG=!0,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),e.NORMAL&&(s.defines.HAS_NORMALS=!0),e.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=!0),e.TEXCOORD_0&&(s.defines.HAS_UV=!0),e.COLOR_0&&(s.defines.HAS_COLORS=!0),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=!0),r?.lights&&(s.defines.USE_LIGHTS=!0),t&&Or(n,t,s),s}function Or(n,t,e){if(e.uniforms.unlit=Boolean(t.unlit),t.pbrMetallicRoughness&&Rr(n,t.pbrMetallicRoughness,e),t.normalTexture){Z(n,t.normalTexture,"pbr_normalSampler","HAS_NORMALMAP",e);let{scale:r=1}=t.normalTexture;e.uniforms.normalScale=r}if(t.occlusionTexture){Z(n,t.occlusionTexture,"pbr_occlusionSampler","HAS_OCCLUSIONMAP",e);let{strength:r=1}=t.occlusionTexture;e.uniforms.occlusionStrength=r}switch(t.emissiveTexture&&(Z(n,t.emissiveTexture,"pbr_emissiveSampler","HAS_EMISSIVEMAP",e),e.uniforms.emissiveFactor=t.emissiveFactor||[0,0,0]),t.alphaMode||"MASK"){case"MASK":let{alphaCutoff:r=.5}=t;e.defines.ALPHA_CUTOFF=!0,e.uniforms.alphaCutoff=r;break;case"BLEND":yn.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),e.parameters.blend=!0,e.parameters.blendColorOperation="add",e.parameters.blendColorSrcFactor="src-alpha",e.parameters.blendColorDstFactor="one-minus-src-alpha",e.parameters.blendAlphaOperation="add",e.parameters.blendAlphaSrcFactor="one",e.parameters.blendAlphaDstFactor="one-minus-src-alpha",e.glParameters.blend=!0,e.glParameters.blendEquation=32774,e.glParameters.blendFunc=[770,771,1,771];break}}function Rr(n,t,e){t.baseColorTexture&&Z(n,t.baseColorTexture,"pbr_baseColorSampler","HAS_BASECOLORMAP",e),e.uniforms.baseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&Z(n,t.metallicRoughnessTexture,"pbr_metallicRoughnessSampler","HAS_METALROUGHNESSMAP",e);let{metallicFactor:r=1,roughnessFactor:s=1}=t;e.uniforms.metallicRoughnessValues=[r,s]}function Z(n,t,e,r,s){let i=t.texture.source.image,o;i.compressed?o=i:o={data:i};let c={wrapS:10497,wrapT:10497,minFilter:9729,magFilter:9729,...t?.texture?.sampler},a=n.createTexture({id:t.uniformName||t.id,sampler:gn(c),...o});s.bindings[e]=a,r&&(s.defines[r]=!0),s.generatedTextures.push(a)}var Ai=1/Math.PI*180,Ei=1/180*Math.PI,Nr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Nr}};var O=globalThis.mathgl.config;function Tn(n,{precision:t=O.precision}={}){return n=ur(n),`${parseFloat(n.toPrecision(t))}`}function Y(n){return Array.isArray(n)||ArrayBuffer.isView(n)&&!(n instanceof DataView)}function Ft(n,t,e){let r=O.EPSILON;e&&(O.EPSILON=e);try{if(n===t)return!0;if(Y(n)&&Y(t)){if(n.length!==t.length)return!1;for(let s=0;s<n.length;++s)if(!Ft(n[s],t[s]))return!1;return!0}return n&&n.equals?n.equals(t):t&&t.equals?t.equals(n):typeof n=="number"&&typeof t=="number"?Math.abs(n-t)<=O.EPSILON*Math.max(1,Math.abs(n),Math.abs(t)):!1}finally{O.EPSILON=r}}function ur(n){return Math.round(n/O.EPSILON)*O.EPSILON}var C=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(t,e=0){for(let r=0;r<this.ELEMENTS;++r)this[r]=t[r+e];return this.check()}toArray(t=[],e=0){for(let r=0;r<this.ELEMENTS;++r)t[e+r]=this[r];return t}toObject(t){return t}from(t){return Array.isArray(t)?this.copy(t):this.fromObject(t)}to(t){return t===this?this:Y(t)?this.toArray(t):this.toObject(t)}toTarget(t){return t?this.to(t):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(O)}formatString(t){let e="";for(let r=0;r<this.ELEMENTS;++r)e+=(r>0?", ":"")+Tn(this[r],t);return`${t.printTypes?this.constructor.name:""}[${e}]`}equals(t){if(!t||this.length!==t.length)return!1;for(let e=0;e<this.ELEMENTS;++e)if(!Ft(this[e],t[e]))return!1;return!0}exactEquals(t){if(!t||this.length!==t.length)return!1;for(let e=0;e<this.ELEMENTS;++e)if(this[e]!==t[e])return!1;return!0}negate(){for(let t=0;t<this.ELEMENTS;++t)this[t]=-this[t];return this.check()}lerp(t,e,r){if(r===void 0)return this.lerp(this,t,e);for(let s=0;s<this.ELEMENTS;++s){let i=t[s],o=typeof e=="number"?e:e[s];this[s]=i+r*(o-i)}return this.check()}min(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=Math.min(t[e],this[e]);return this.check()}max(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=Math.max(t[e],this[e]);return this.check()}clamp(t,e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t[r]),e[r]);return this.check()}add(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]+=e[r];return this.check()}subtract(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]-=e[r];return this.check()}scale(t){if(typeof t=="number")for(let e=0;e<this.ELEMENTS;++e)this[e]*=t;else for(let e=0;e<this.ELEMENTS&&e<t.length;++e)this[e]*=t[e];return this.check()}multiplyByScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]*=t;return this.check()}check(){if(O.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let t=this.length===this.ELEMENTS;for(let e=0;e<this.ELEMENTS;++e)t=t&&Number.isFinite(this[e]);return t}sub(t){return this.subtract(t)}setScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=t;return this.check()}addScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]+=t;return this.check()}subScalar(t){return this.addScalar(-t)}multiplyScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]*=t;return this.check()}divideScalar(t){return this.multiplyByScalar(1/t)}clampScalar(t,e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t),e);return this.check()}get elements(){return this}};function _r(n,t){if(n.length!==t)return!1;for(let e=0;e<n.length;++e)if(!Number.isFinite(n[e]))return!1;return!0}function S(n){if(!Number.isFinite(n))throw new Error(`Invalid number ${JSON.stringify(n)}`);return n}function $(n,t,e=""){if(O.debug&&!_r(n,t))throw new Error(`math.gl: ${e} some fields set to invalid numbers'`);return n}function qt(n,t){if(!n)throw new Error(`math.gl assertion ${t}`)}var Mt=class extends C{get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let t=0;for(let e=0;e<this.ELEMENTS;++e)t+=this[e]*this[e];return t}magnitudeSquared(){return this.lengthSquared()}distance(t){return Math.sqrt(this.distanceSquared(t))}distanceSquared(t){let e=0;for(let r=0;r<this.ELEMENTS;++r){let s=this[r]-t[r];e+=s*s}return S(e)}dot(t){let e=0;for(let r=0;r<this.ELEMENTS;++r)e+=this[r]*t[r];return S(e)}normalize(){let t=this.magnitude();if(t!==0)for(let e=0;e<this.ELEMENTS;++e)this[e]/=t;return this.check()}multiply(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]*=e[r];return this.check()}divide(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]/=e[r];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(t){return this.distance(t)}distanceToSquared(t){return this.distanceSquared(t)}getComponent(t){return qt(t>=0&&t<this.ELEMENTS,"index is out of range"),S(this[t])}setComponent(t,e){return qt(t>=0&&t<this.ELEMENTS,"index is out of range"),this[t]=e,this.check()}addVectors(t,e){return this.copy(t).add(e)}subVectors(t,e){return this.copy(t).subtract(e)}multiplyVectors(t,e){return this.copy(t).multiply(e)}addScaledVector(t,e){return this.add(new this.constructor(t).multiplyScalar(e))}};var R=typeof Float32Array<"u"?Float32Array:Array;var vi=Math.PI/180;function Pr(){let n=new R(2);return R!=Float32Array&&(n[0]=0,n[1]=0),n}function wn(n,t,e){let r=t[0],s=t[1];return n[0]=e[0]*r+e[4]*s+e[12],n[1]=e[1]*r+e[5]*s+e[13],n}var ki=function(){let n=Pr();return function(t,e,r,s,i,o){let c,a;for(e||(e=2),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,c=r;c<a;c+=e)n[0]=t[c],n[1]=t[c+1],i(n,n,o),t[c]=n[0],t[c+1]=n[1];return t}}();function Sn(n,t,e){let r=t[0],s=t[1],i=e[3]*r+e[7]*s||1;return n[0]=(e[0]*r+e[4]*s)/i,n[1]=(e[1]*r+e[5]*s)/i,n}function Ln(n,t,e){let r=t[0],s=t[1],i=t[2],o=e[3]*r+e[7]*s+e[11]*i||1;return n[0]=(e[0]*r+e[4]*s+e[8]*i)/o,n[1]=(e[1]*r+e[5]*s+e[9]*i)/o,n[2]=(e[2]*r+e[6]*s+e[10]*i)/o,n}function On(n,t,e){let r=t[0],s=t[1];return n[0]=e[0]*r+e[2]*s,n[1]=e[1]*r+e[3]*s,n[2]=t[2],n[3]=t[3],n}function Rn(n,t,e){let r=t[0],s=t[1],i=t[2];return n[0]=e[0]*r+e[3]*s+e[6]*i,n[1]=e[1]*r+e[4]*s+e[7]*i,n[2]=e[2]*r+e[5]*s+e[8]*i,n[3]=t[3],n}function Bt(){let n=new R(3);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n}function Ir(n){let t=n[0],e=n[1],r=n[2];return Math.sqrt(t*t+e*e+r*r)}function Ct(n,t,e){let r=new R(3);return r[0]=n,r[1]=t,r[2]=e,r}function Nn(n,t){let e=t[0],r=t[1],s=t[2],i=e*e+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),n[0]=t[0]*i,n[1]=t[1]*i,n[2]=t[2]*i,n}function un(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function dt(n,t,e){let r=t[0],s=t[1],i=t[2],o=e[0],c=e[1],a=e[2];return n[0]=s*a-i*c,n[1]=i*o-r*a,n[2]=r*c-s*o,n}function gt(n,t,e){let r=t[0],s=t[1],i=t[2],o=e[3]*r+e[7]*s+e[11]*i+e[15];return o=o||1,n[0]=(e[0]*r+e[4]*s+e[8]*i+e[12])/o,n[1]=(e[1]*r+e[5]*s+e[9]*i+e[13])/o,n[2]=(e[2]*r+e[6]*s+e[10]*i+e[14])/o,n}function _n(n,t,e){let r=e[0],s=e[1],i=e[2],o=e[3],c=t[0],a=t[1],f=t[2],h=s*f-i*a,l=i*c-r*f,p=r*a-s*c,m=s*p-i*l,x=i*h-r*p,M=r*l-s*h,d=o*2;return h*=d,l*=d,p*=d,m*=2,x*=2,M*=2,n[0]=c+h+m,n[1]=a+l+x,n[2]=f+p+M,n}var Pn=Ir;var Fi=function(){let n=Bt();return function(t,e,r,s,i,o){let c,a;for(e||(e=3),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,c=r;c<a;c+=e)n[0]=t[c],n[1]=t[c+1],n[2]=t[c+2],i(n,n,o),t[c]=n[0],t[c+1]=n[1],t[c+2]=n[2];return t}}();var yt,G=class extends Mt{static get ZERO(){return yt||(yt=new G(0,0,0,0),Object.freeze(yt)),yt}constructor(t=0,e=0,r=0,s=0){super(-0,-0,-0,-0),Y(t)&&arguments.length===1?this.copy(t):(O.debug&&(S(t),S(e),S(r),S(s)),this[0]=t,this[1]=e,this[2]=r,this[3]=s)}set(t,e,r,s){return this[0]=t,this[1]=e,this[2]=r,this[3]=s,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}fromObject(t){return O.debug&&(S(t.x),S(t.y),S(t.z),S(t.w)),this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this}toObject(t){return t.x=this[0],t.y=this[1],t.z=this[2],t.w=this[3],t}get ELEMENTS(){return 4}get z(){return this[2]}set z(t){this[2]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}transform(t){return gt(this,this,t),this.check()}transformByMatrix3(t){return Rn(this,this,t),this.check()}transformByMatrix2(t){return On(this,this,t),this.check()}transformByQuaternion(t){return _n(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var Tt=class extends C{toString(){let t="[";if(O.printRowMajor){t+="row-major:";for(let e=0;e<this.RANK;++e)for(let r=0;r<this.RANK;++r)t+=` ${this[r*this.RANK+e]}`}else{t+="column-major:";for(let e=0;e<this.ELEMENTS;++e)t+=` ${this[e]}`}return t+="]",t}getElementIndex(t,e){return e*this.RANK+t}getElement(t,e){return this[e*this.RANK+t]}setElement(t,e,r){return this[e*this.RANK+t]=S(r),this}getColumn(t,e=new Array(this.RANK).fill(-0)){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)e[s]=this[r+s];return e}setColumn(t,e){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)this[r+s]=e[s];return this}};function In(){let n=new R(9);return R!=Float32Array&&(n[1]=0,n[2]=0,n[3]=0,n[5]=0,n[6]=0,n[7]=0),n[0]=1,n[4]=1,n[8]=1,n}function br(n){return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function vn(n,t){if(n===t){let e=t[1],r=t[2],s=t[3],i=t[6],o=t[7],c=t[11];n[1]=t[4],n[2]=t[8],n[3]=t[12],n[4]=e,n[6]=t[9],n[7]=t[13],n[8]=r,n[9]=i,n[11]=t[14],n[12]=s,n[13]=o,n[14]=c}else n[0]=t[0],n[1]=t[4],n[2]=t[8],n[3]=t[12],n[4]=t[1],n[5]=t[5],n[6]=t[9],n[7]=t[13],n[8]=t[2],n[9]=t[6],n[10]=t[10],n[11]=t[14],n[12]=t[3],n[13]=t[7],n[14]=t[11],n[15]=t[15];return n}function kn(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],o=t[4],c=t[5],a=t[6],f=t[7],h=t[8],l=t[9],p=t[10],m=t[11],x=t[12],M=t[13],d=t[14],E=t[15],L=e*c-r*o,g=e*a-s*o,y=e*f-i*o,T=r*a-s*c,A=r*f-i*c,N=s*f-i*a,u=h*M-l*x,_=h*d-p*x,P=h*E-m*x,I=l*d-p*M,v=l*E-m*M,k=p*E-m*d,w=L*k-g*v+y*I+T*P-A*_+N*u;return w?(w=1/w,n[0]=(c*k-a*v+f*I)*w,n[1]=(s*v-r*k-i*I)*w,n[2]=(M*N-d*A+E*T)*w,n[3]=(p*A-l*N-m*T)*w,n[4]=(a*P-o*k-f*_)*w,n[5]=(e*k-s*P+i*_)*w,n[6]=(d*y-x*N-E*g)*w,n[7]=(h*N-p*y+m*g)*w,n[8]=(o*v-c*P+f*u)*w,n[9]=(r*P-e*v-i*u)*w,n[10]=(x*A-M*y+E*L)*w,n[11]=(l*y-h*A-m*L)*w,n[12]=(c*_-o*I-a*u)*w,n[13]=(e*I-r*_+s*u)*w,n[14]=(M*g-x*T-d*L)*w,n[15]=(h*T-l*g+p*L)*w,n):null}function bn(n){let t=n[0],e=n[1],r=n[2],s=n[3],i=n[4],o=n[5],c=n[6],a=n[7],f=n[8],h=n[9],l=n[10],p=n[11],m=n[12],x=n[13],M=n[14],d=n[15],E=t*o-e*i,L=t*c-r*i,g=e*c-r*o,y=f*x-h*m,T=f*M-l*m,A=h*M-l*x,N=t*A-e*T+r*y,u=i*A-o*T+c*y,_=f*g-h*L+l*E,P=m*g-x*L+M*E;return a*N-s*u+d*_-p*P}function Vt(n,t,e){let r=t[0],s=t[1],i=t[2],o=t[3],c=t[4],a=t[5],f=t[6],h=t[7],l=t[8],p=t[9],m=t[10],x=t[11],M=t[12],d=t[13],E=t[14],L=t[15],g=e[0],y=e[1],T=e[2],A=e[3];return n[0]=g*r+y*c+T*l+A*M,n[1]=g*s+y*a+T*p+A*d,n[2]=g*i+y*f+T*m+A*E,n[3]=g*o+y*h+T*x+A*L,g=e[4],y=e[5],T=e[6],A=e[7],n[4]=g*r+y*c+T*l+A*M,n[5]=g*s+y*a+T*p+A*d,n[6]=g*i+y*f+T*m+A*E,n[7]=g*o+y*h+T*x+A*L,g=e[8],y=e[9],T=e[10],A=e[11],n[8]=g*r+y*c+T*l+A*M,n[9]=g*s+y*a+T*p+A*d,n[10]=g*i+y*f+T*m+A*E,n[11]=g*o+y*h+T*x+A*L,g=e[12],y=e[13],T=e[14],A=e[15],n[12]=g*r+y*c+T*l+A*M,n[13]=g*s+y*a+T*p+A*d,n[14]=g*i+y*f+T*m+A*E,n[15]=g*o+y*h+T*x+A*L,n}function zn(n,t,e){let r=e[0],s=e[1],i=e[2],o,c,a,f,h,l,p,m,x,M,d,E;return t===n?(n[12]=t[0]*r+t[4]*s+t[8]*i+t[12],n[13]=t[1]*r+t[5]*s+t[9]*i+t[13],n[14]=t[2]*r+t[6]*s+t[10]*i+t[14],n[15]=t[3]*r+t[7]*s+t[11]*i+t[15]):(o=t[0],c=t[1],a=t[2],f=t[3],h=t[4],l=t[5],p=t[6],m=t[7],x=t[8],M=t[9],d=t[10],E=t[11],n[0]=o,n[1]=c,n[2]=a,n[3]=f,n[4]=h,n[5]=l,n[6]=p,n[7]=m,n[8]=x,n[9]=M,n[10]=d,n[11]=E,n[12]=o*r+h*s+x*i+t[12],n[13]=c*r+l*s+M*i+t[13],n[14]=a*r+p*s+d*i+t[14],n[15]=f*r+m*s+E*i+t[15]),n}function Fn(n,t,e){let r=e[0],s=e[1],i=e[2];return n[0]=t[0]*r,n[1]=t[1]*r,n[2]=t[2]*r,n[3]=t[3]*r,n[4]=t[4]*s,n[5]=t[5]*s,n[6]=t[6]*s,n[7]=t[7]*s,n[8]=t[8]*i,n[9]=t[9]*i,n[10]=t[10]*i,n[11]=t[11]*i,n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15],n}function qn(n,t,e,r){let s=r[0],i=r[1],o=r[2],c=Math.sqrt(s*s+i*i+o*o),a,f,h,l,p,m,x,M,d,E,L,g,y,T,A,N,u,_,P,I,v,k,w,X;return c<1e-6?null:(c=1/c,s*=c,i*=c,o*=c,f=Math.sin(e),a=Math.cos(e),h=1-a,l=t[0],p=t[1],m=t[2],x=t[3],M=t[4],d=t[5],E=t[6],L=t[7],g=t[8],y=t[9],T=t[10],A=t[11],N=s*s*h+a,u=i*s*h+o*f,_=o*s*h-i*f,P=s*i*h-o*f,I=i*i*h+a,v=o*i*h+s*f,k=s*o*h+i*f,w=i*o*h-s*f,X=o*o*h+a,n[0]=l*N+M*u+g*_,n[1]=p*N+d*u+y*_,n[2]=m*N+E*u+T*_,n[3]=x*N+L*u+A*_,n[4]=l*P+M*I+g*v,n[5]=p*P+d*I+y*v,n[6]=m*P+E*I+T*v,n[7]=x*P+L*I+A*v,n[8]=l*k+M*w+g*X,n[9]=p*k+d*w+y*X,n[10]=m*k+E*w+T*X,n[11]=x*k+L*w+A*X,t!==n&&(n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n)}function Bn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[4],o=t[5],c=t[6],a=t[7],f=t[8],h=t[9],l=t[10],p=t[11];return t!==n&&(n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[4]=i*s+f*r,n[5]=o*s+h*r,n[6]=c*s+l*r,n[7]=a*s+p*r,n[8]=f*s-i*r,n[9]=h*s-o*r,n[10]=l*s-c*r,n[11]=p*s-a*r,n}function Cn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[0],o=t[1],c=t[2],a=t[3],f=t[8],h=t[9],l=t[10],p=t[11];return t!==n&&(n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[0]=i*s-f*r,n[1]=o*s-h*r,n[2]=c*s-l*r,n[3]=a*s-p*r,n[8]=i*r+f*s,n[9]=o*r+h*s,n[10]=c*r+l*s,n[11]=a*r+p*s,n}function Vn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[0],o=t[1],c=t[2],a=t[3],f=t[4],h=t[5],l=t[6],p=t[7];return t!==n&&(n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[0]=i*s+f*r,n[1]=o*s+h*r,n[2]=c*s+l*r,n[3]=a*s+p*r,n[4]=f*s-i*r,n[5]=h*s-o*r,n[6]=l*s-c*r,n[7]=p*s-a*r,n}function Un(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],o=e+e,c=r+r,a=s+s,f=e*o,h=r*o,l=r*c,p=s*o,m=s*c,x=s*a,M=i*o,d=i*c,E=i*a;return n[0]=1-l-x,n[1]=h+E,n[2]=p-d,n[3]=0,n[4]=h-E,n[5]=1-f-x,n[6]=m+M,n[7]=0,n[8]=p+d,n[9]=m-M,n[10]=1-f-l,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function Dn(n,t,e,r,s,i,o){let c=1/(e-t),a=1/(s-r),f=1/(i-o);return n[0]=i*2*c,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=i*2*a,n[6]=0,n[7]=0,n[8]=(e+t)*c,n[9]=(s+r)*a,n[10]=(o+i)*f,n[11]=-1,n[12]=0,n[13]=0,n[14]=o*i*2*f,n[15]=0,n}function zr(n,t,e,r,s){let i=1/Math.tan(t/2);if(n[0]=i/e,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=i,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[11]=-1,n[12]=0,n[13]=0,n[15]=0,s!=null&&s!==1/0){let o=1/(r-s);n[10]=(s+r)*o,n[14]=2*s*r*o}else n[10]=-1,n[14]=-2*r;return n}var Yn=zr;function Fr(n,t,e,r,s,i,o){let c=1/(t-e),a=1/(r-s),f=1/(i-o);return n[0]=-2*c,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=-2*a,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=2*f,n[11]=0,n[12]=(t+e)*c,n[13]=(s+r)*a,n[14]=(o+i)*f,n[15]=1,n}var $n=Fr;function Gn(n,t,e,r){let s,i,o,c,a,f,h,l,p,m,x=t[0],M=t[1],d=t[2],E=r[0],L=r[1],g=r[2],y=e[0],T=e[1],A=e[2];return Math.abs(x-y)<1e-6&&Math.abs(M-T)<1e-6&&Math.abs(d-A)<1e-6?br(n):(l=x-y,p=M-T,m=d-A,s=1/Math.sqrt(l*l+p*p+m*m),l*=s,p*=s,m*=s,i=L*m-g*p,o=g*l-E*m,c=E*p-L*l,s=Math.sqrt(i*i+o*o+c*c),s?(s=1/s,i*=s,o*=s,c*=s):(i=0,o=0,c=0),a=p*c-m*o,f=m*i-l*c,h=l*o-p*i,s=Math.sqrt(a*a+f*f+h*h),s?(s=1/s,a*=s,f*=s,h*=s):(a=0,f=0,h=0),n[0]=i,n[1]=a,n[2]=l,n[3]=0,n[4]=o,n[5]=f,n[6]=p,n[7]=0,n[8]=c,n[9]=h,n[10]=m,n[11]=0,n[12]=-(i*x+o*M+c*d),n[13]=-(a*x+f*M+h*d),n[14]=-(l*x+p*M+m*d),n[15]=1,n)}function qr(){let n=new R(4);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0,n[3]=0),n}function Wn(n,t,e){return n[0]=t[0]+e[0],n[1]=t[1]+e[1],n[2]=t[2]+e[2],n[3]=t[3]+e[3],n}function Hn(n,t,e){return n[0]=t[0]*e,n[1]=t[1]*e,n[2]=t[2]*e,n[3]=t[3]*e,n}function Xn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return Math.sqrt(t*t+e*e+r*r+s*s)}function jn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return t*t+e*e+r*r+s*s}function Qn(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],o=e*e+r*r+s*s+i*i;return o>0&&(o=1/Math.sqrt(o)),n[0]=e*o,n[1]=r*o,n[2]=s*o,n[3]=i*o,n}function Kn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Zn(n,t,e,r){let s=t[0],i=t[1],o=t[2],c=t[3];return n[0]=s+r*(e[0]-s),n[1]=i+r*(e[1]-i),n[2]=o+r*(e[2]-o),n[3]=c+r*(e[3]-c),n}function Jn(n,t,e){let r=t[0],s=t[1],i=t[2],o=t[3];return n[0]=e[0]*r+e[4]*s+e[8]*i+e[12]*o,n[1]=e[1]*r+e[5]*s+e[9]*i+e[13]*o,n[2]=e[2]*r+e[6]*s+e[10]*i+e[14]*o,n[3]=e[3]*r+e[7]*s+e[11]*i+e[15]*o,n}function te(n,t,e){let r=t[0],s=t[1],i=t[2],o=e[0],c=e[1],a=e[2],f=e[3],h=f*r+c*i-a*s,l=f*s+a*r-o*i,p=f*i+o*s-c*r,m=-o*r-c*s-a*i;return n[0]=h*f+m*-o+l*-a-p*-c,n[1]=l*f+m*-c+p*-o-h*-a,n[2]=p*f+m*-a+h*-c-l*-o,n[3]=t[3],n}var Xi=function(){let n=qr();return function(t,e,r,s,i,o){let c,a;for(e||(e=4),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,c=r;c<a;c+=e)n[0]=t[c],n[1]=t[c+1],n[2]=t[c+2],n[3]=t[c+3],i(n,n,o),t[c]=n[0],t[c+1]=n[1],t[c+2]=n[2],t[c+3]=n[3];return t}}();var Yt;(function(n){n[n.COL0ROW0=0]="COL0ROW0",n[n.COL0ROW1=1]="COL0ROW1",n[n.COL0ROW2=2]="COL0ROW2",n[n.COL0ROW3=3]="COL0ROW3",n[n.COL1ROW0=4]="COL1ROW0",n[n.COL1ROW1=5]="COL1ROW1",n[n.COL1ROW2=6]="COL1ROW2",n[n.COL1ROW3=7]="COL1ROW3",n[n.COL2ROW0=8]="COL2ROW0",n[n.COL2ROW1=9]="COL2ROW1",n[n.COL2ROW2=10]="COL2ROW2",n[n.COL2ROW3=11]="COL2ROW3",n[n.COL3ROW0=12]="COL3ROW0",n[n.COL3ROW1=13]="COL3ROW1",n[n.COL3ROW2=14]="COL3ROW2",n[n.COL3ROW3=15]="COL3ROW3"})(Yt||(Yt={}));var Cr=45*Math.PI/180,Vr=1,Ut=.1,Dt=500,Ur=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),z=class extends Tt{static get IDENTITY(){return Yr()}static get ZERO(){return Dr()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return Yt}constructor(t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),arguments.length===1&&Array.isArray(t)?this.copy(t):this.identity()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this[4]=t[4],this[5]=t[5],this[6]=t[6],this[7]=t[7],this[8]=t[8],this[9]=t[9],this[10]=t[10],this[11]=t[11],this[12]=t[12],this[13]=t[13],this[14]=t[14],this[15]=t[15],this.check()}set(t,e,r,s,i,o,c,a,f,h,l,p,m,x,M,d){return this[0]=t,this[1]=e,this[2]=r,this[3]=s,this[4]=i,this[5]=o,this[6]=c,this[7]=a,this[8]=f,this[9]=h,this[10]=l,this[11]=p,this[12]=m,this[13]=x,this[14]=M,this[15]=d,this.check()}setRowMajor(t,e,r,s,i,o,c,a,f,h,l,p,m,x,M,d){return this[0]=t,this[1]=i,this[2]=f,this[3]=m,this[4]=e,this[5]=o,this[6]=h,this[7]=x,this[8]=r,this[9]=c,this[10]=l,this[11]=M,this[12]=s,this[13]=a,this[14]=p,this[15]=d,this.check()}toRowMajor(t){return t[0]=this[0],t[1]=this[4],t[2]=this[8],t[3]=this[12],t[4]=this[1],t[5]=this[5],t[6]=this[9],t[7]=this[13],t[8]=this[2],t[9]=this[6],t[10]=this[10],t[11]=this[14],t[12]=this[3],t[13]=this[7],t[14]=this[11],t[15]=this[15],t}identity(){return this.copy(Ur)}fromObject(t){return this.check()}fromQuaternion(t){return Un(this,t),this.check()}frustum(t){let{left:e,right:r,bottom:s,top:i,near:o=Ut,far:c=Dt}=t;return c===1/0?$r(this,e,r,s,i,o):Dn(this,e,r,s,i,o,c),this.check()}lookAt(t){let{eye:e,center:r=[0,0,0],up:s=[0,1,0]}=t;return Gn(this,e,r,s),this.check()}ortho(t){let{left:e,right:r,bottom:s,top:i,near:o=Ut,far:c=Dt}=t;return $n(this,e,r,s,i,o,c),this.check()}orthographic(t){let{fovy:e=Cr,aspect:r=Vr,focalDistance:s=1,near:i=Ut,far:o=Dt}=t;ne(e);let c=e/2,a=s*Math.tan(c),f=a*r;return this.ortho({left:-f,right:f,bottom:-a,top:a,near:i,far:o})}perspective(t){let{fovy:e=45*Math.PI/180,aspect:r=1,near:s=.1,far:i=500}=t;return ne(e),Yn(this,e,r,s,i),this.check()}determinant(){return bn(this)}getScale(t=[-0,-0,-0]){return t[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),t[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),t[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),t}getTranslation(t=[-0,-0,-0]){return t[0]=this[12],t[1]=this[13],t[2]=this[14],t}getRotation(t,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];let r=this.getScale(e),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*i,t[6]=this[6]*o,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*i,t[10]=this[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];let r=this.getScale(e),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=this[4]*s,t[4]=this[5]*i,t[5]=this[6]*o,t[6]=this[8]*s,t[7]=this[9]*i,t[8]=this[10]*o,t}transpose(){return vn(this,this),this.check()}invert(){return kn(this,this),this.check()}multiplyLeft(t){return Vt(this,t,this),this.check()}multiplyRight(t){return Vt(this,this,t),this.check()}rotateX(t){return Bn(this,this,t),this.check()}rotateY(t){return Cn(this,this,t),this.check()}rotateZ(t){return Vn(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,e){return qn(this,this,t,e),this.check()}scale(t){return Fn(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return zn(this,this,t),this.check()}transform(t,e){return t.length===4?(e=Jn(e||[-0,-0,-0,-0],t,this),$(e,4),e):this.transformAsPoint(t,e)}transformAsPoint(t,e){let{length:r}=t,s;switch(r){case 2:s=wn(e||[-0,-0],t,this);break;case 3:s=gt(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return $(s,t.length),s}transformAsVector(t,e){let r;switch(t.length){case 2:r=Sn(e||[-0,-0],t,this);break;case 3:r=Ln(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return $(r,t.length),r}transformPoint(t,e){return this.transformAsPoint(t,e)}transformVector(t,e){return this.transformAsPoint(t,e)}transformDirection(t,e){return this.transformAsVector(t,e)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,e,r){return this.identity().translate([t,e,r])}},At,Et;function Dr(){return At||(At=new z([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(At)),At}function Yr(){return Et||(Et=new z,Object.freeze(Et)),Et}function ne(n){if(n>Math.PI*2)throw Error("expected radians")}function $r(n,t,e,r,s,i){let o=2*i/(e-t),c=2*i/(s-r),a=(e+t)/(e-t),f=(s+r)/(s-r),h=-1,l=-1,p=-2*i;return n[0]=o,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=c,n[6]=0,n[7]=0,n[8]=a,n[9]=f,n[10]=h,n[11]=l,n[12]=0,n[13]=0,n[14]=p,n[15]=0,n}function ee(){let n=new R(4);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n[3]=1,n}function re(n){return n[0]=0,n[1]=0,n[2]=0,n[3]=1,n}function $t(n,t,e){e=e*.5;let r=Math.sin(e);return n[0]=r*t[0],n[1]=r*t[1],n[2]=r*t[2],n[3]=Math.cos(e),n}function Gt(n,t,e){let r=t[0],s=t[1],i=t[2],o=t[3],c=e[0],a=e[1],f=e[2],h=e[3];return n[0]=r*h+o*c+s*f-i*a,n[1]=s*h+o*a+i*c-r*f,n[2]=i*h+o*f+r*a-s*c,n[3]=o*h-r*c-s*a-i*f,n}function se(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(e),a=Math.cos(e);return n[0]=r*a+o*c,n[1]=s*a+i*c,n[2]=i*a-s*c,n[3]=o*a-r*c,n}function ie(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(e),a=Math.cos(e);return n[0]=r*a-i*c,n[1]=s*a+o*c,n[2]=i*a+r*c,n[3]=o*a-s*c,n}function oe(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(e),a=Math.cos(e);return n[0]=r*a+s*c,n[1]=s*a-r*c,n[2]=i*a+o*c,n[3]=o*a-i*c,n}function ce(n,t){let e=t[0],r=t[1],s=t[2];return n[0]=e,n[1]=r,n[2]=s,n[3]=Math.sqrt(Math.abs(1-e*e-r*r-s*s)),n}function tt(n,t,e,r){let s=t[0],i=t[1],o=t[2],c=t[3],a=e[0],f=e[1],h=e[2],l=e[3],p,m,x,M,d;return p=s*a+i*f+o*h+c*l,p<0&&(p=-p,a=-a,f=-f,h=-h,l=-l),1-p>1e-6?(m=Math.acos(p),d=Math.sin(m),x=Math.sin((1-r)*m)/d,M=Math.sin(r*m)/d):(x=1-r,M=r),n[0]=x*s+M*a,n[1]=x*i+M*f,n[2]=x*o+M*h,n[3]=x*c+M*l,n}function ae(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],o=e*e+r*r+s*s+i*i,c=o?1/o:0;return n[0]=-e*c,n[1]=-r*c,n[2]=-s*c,n[3]=i*c,n}function fe(n,t){return n[0]=-t[0],n[1]=-t[1],n[2]=-t[2],n[3]=t[3],n}function Wt(n,t){let e=t[0]+t[4]+t[8],r;if(e>0)r=Math.sqrt(e+1),n[3]=.5*r,r=.5/r,n[0]=(t[5]-t[7])*r,n[1]=(t[6]-t[2])*r,n[2]=(t[1]-t[3])*r;else{let s=0;t[4]>t[0]&&(s=1),t[8]>t[s*3+s]&&(s=2);let i=(s+1)%3,o=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[i*3+i]-t[o*3+o]+1),n[s]=.5*r,r=.5/r,n[3]=(t[i*3+o]-t[o*3+i])*r,n[i]=(t[i*3+s]+t[s*3+i])*r,n[o]=(t[o*3+s]+t[s*3+o])*r}return n}var he=Wn;var le=Hn,pe=Kn,me=Zn,xe=Xn;var Me=jn;var de=Qn;var ge=function(){let n=Bt(),t=Ct(1,0,0),e=Ct(0,1,0);return function(r,s,i){let o=un(s,i);return o<-.999999?(dt(n,t,s),Pn(n)<1e-6&&dt(n,e,s),Nn(n,n),$t(r,n,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(dt(n,s,i),r[0]=n[0],r[1]=n[1],r[2]=n[2],r[3]=1+o,de(r,r))}}(),ao=function(){let n=ee(),t=ee();return function(e,r,s,i,o,c){return tt(n,r,o,c),tt(t,s,i,c),tt(e,n,t,2*c*(1-c)),e}}(),fo=function(){let n=In();return function(t,e,r,s){return n[0]=r[0],n[3]=r[1],n[6]=r[2],n[1]=s[0],n[4]=s[1],n[7]=s[2],n[2]=-e[0],n[5]=-e[1],n[8]=-e[2],de(t,Wt(t,n))}}();var Gr=[0,0,0,1],nt=class extends C{constructor(t=0,e=0,r=0,s=1){super(-0,-0,-0,-0),Array.isArray(t)&&arguments.length===1?this.copy(t):this.set(t,e,r,s)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}set(t,e,r,s){return this[0]=t,this[1]=e,this[2]=r,this[3]=s,this.check()}fromObject(t){return this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this.check()}fromMatrix3(t){return Wt(this,t),this.check()}fromAxisRotation(t,e){return $t(this,t,e),this.check()}identity(){return re(this),this.check()}setAxisAngle(t,e){return this.fromAxisRotation(t,e)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}get z(){return this[2]}set z(t){this[2]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}len(){return xe(this)}lengthSquared(){return Me(this)}dot(t){return pe(this,t)}rotationTo(t,e){return ge(this,t,e),this.check()}add(t){return he(this,this,t),this.check()}calculateW(){return ce(this,this),this.check()}conjugate(){return fe(this,this),this.check()}invert(){return ae(this,this),this.check()}lerp(t,e,r){return r===void 0?this.lerp(this,t,e):(me(this,t,e,r),this.check())}multiplyRight(t){return Gt(this,this,t),this.check()}multiplyLeft(t){return Gt(this,t,this),this.check()}normalize(){let t=this.len(),e=t>0?1/t:0;return this[0]=this[0]*e,this[1]=this[1]*e,this[2]=this[2]*e,this[3]=this[3]*e,t===0&&(this[3]=1),this.check()}rotateX(t){return se(this,this,t),this.check()}rotateY(t){return ie(this,this,t),this.check()}rotateZ(t){return oe(this,this,t),this.check()}scale(t){return le(this,this,t),this.check()}slerp(t,e,r){let s,i,o;switch(arguments.length){case 1:({start:s=Gr,target:i,ratio:o}=t);break;case 2:s=this,i=t,o=e;break;default:s=t,i=e,o=r}return tt(this,s,i,o),this.check()}transformVector4(t,e=new G){return te(e,t,this),$(e,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,e){return this.setAxisAngle(t,e)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};function wt(n){let t=n.extensions?.KHR_lights_punctual?.lights;if(!t||!Array.isArray(t)||t.length===0)return[];let e=[];for(let r of n.nodes||[]){let s=r.extensions?.KHR_lights_punctual;if(!s||typeof s.light!="number")continue;let i=t[s.light];if(!i)continue;let o=i.color||[1,1,1],c=i.intensity??1,a=i.range;switch(i.type){case"directional":e.push(Wr(r,o,c));break;case"point":e.push(ye(r,o,c,a));break;case"spot":e.push(ye(r,o,c,a));break;default:break}}return e}function ye(n,t,e,r){let s=n.translation?[...n.translation]:[0,0,0],i=[1,0,0];return r!==void 0&&r>0&&(i=[1,0,1/(r*r)]),{type:"point",position:s,color:t,intensity:e,attenuation:i}}function Wr(n,t,e){let r=[0,0,-1];return n.rotation&&(r=new z().fromQuaternion(n.rotation).transformDirection([0,0,-1])),{type:"directional",direction:r,color:t,intensity:e}}var W=b(ct(),1);var U;(function(n){n[n.POINTS=0]="POINTS",n[n.LINES=1]="LINES",n[n.LINE_LOOP=2]="LINE_LOOP",n[n.LINE_STRIP=3]="LINE_STRIP",n[n.TRIANGLES=4]="TRIANGLES",n[n.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",n[n.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(U||(U={}));function Te(n){switch(n){case U.POINTS:return"point-list";case U.LINES:return"line-list";case U.LINE_STRIP:return"line-strip";case U.TRIANGLES:return"triangle-list";case U.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(n))}}var we=b(D(),1),Se=b(Ee(),1),St=b(ct(),1),Hr=`
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
"use strict";var __exports__=(()=>{var kn=Object.create;var it=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var Fn=Object.getOwnPropertyNames;var qn=Object.getPrototypeOf,Bn=Object.prototype.hasOwnProperty;var ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Cn=(e,t)=>{for(var n in t)it(e,n,{get:t[n],enumerable:!0})},st=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Fn(t))!Bn.call(e,s)&&s!==n&&it(e,s,{get:()=>t[s],enumerable:!(r=zn(t,s))||r.enumerable});return e},ct=(e,t,n)=>(st(e,t,"default"),n&&st(n,t,"default")),z=(e,t,n)=>(n=e!=null?kn(qn(e)):{},st(t||!e||!e.__esModule?it(n,"default",{value:e,enumerable:!0}):n,e)),Vn=e=>st(it({},"__esModule",{value:!0}),e);var $=ot((ps,Qt)=>{Qt.exports=globalThis.luma});var at=ot((ms,te)=>{te.exports=globalThis.luma});var qt=ot((Mi,ge)=>{ge.exports=globalThis.luma});var un=ot((Ro,Sn)=>{Sn.exports=globalThis.luma});var rt={};Cn(rt,{GLTFAnimator:()=>j,createScenegraphsFromGLTF:()=>bn,loadPBREnvironment:()=>Me,parseGLTFLights:()=>St,parsePBRMaterial:()=>dt});ct(rt,z($(),1));var Ft=z(at(),1);function U(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var F={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Un=F.self||F.window||F.global||{},Dn=F.window||F.self||F.global||{},$n=F.global||F.self||F.window||{},Gn=F.document||{};var Ot=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var ee=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Yn=ee&&parseFloat(ee[1])||0;var Wn="",ne={};function Rt(e){for(let t in ne)if(e.startsWith(t)){let n=ne[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Wn}${e}`),e}var re="4.4.0-alpha.18";var Hn=globalThis.loaders?.parseImageNode,It=typeof Image<"u",Pt=typeof ImageBitmap<"u",jn=Boolean(Hn),_t=Ot?!0:jn;function se(e){switch(e){case"auto":return Pt||It||_t;case"imagebitmap":return Pt;case"image":return It;case"data":return _t;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function ie(){if(Pt)return"imagebitmap";if(It)return"image";if(_t)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function oe(e){let t=Xn(e);if(!t)throw new Error("Not an image");return t}function vt(e){return ft(e)}function ft(e){switch(oe(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),n=t.getContext("2d");if(!n)throw new Error("getImageData");return t.width=e.width,t.height=e.height,n.drawImage(e,0,0),n.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function Xn(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var Kn=/^data:image\/svg\+xml/,Jn=/\.svg((\?|#).*)?$/;function ht(e){return e&&(Kn.test(e)||Jn.test(e))}function ce(e,t){if(ht(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return bt(e,t)}function bt(e,t){if(ht(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function lt(e,t,n){let r=ce(e,n),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await Zn(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function Zn(e,t){let n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((r,s)=>{try{n.onload=()=>r(n),n.onerror=i=>{let o=i instanceof Error?i.message:"error";s(new Error(o))}}catch(i){s(i)}})}var ae=!0;async function fe(e,t,n){let r;ht(n)?r=await lt(e,t,n):r=bt(e,n);let s=t&&t.imagebitmap;return await Qn(r,s)}async function Qn(e,t=null){if((tr(t)||!ae)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),ae=!1}return await createImageBitmap(e)}function tr(e){if(!e)return!0;for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}function he(e){return!sr(e,"ftyp",4)||!(e[8]&96)?null:er(e)}function er(e){switch(nr(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function nr(e,t,n){return String.fromCharCode(...e.slice(t,n))}function rr(e){return[...e].map(t=>t.charCodeAt(0))}function sr(e,t,n=0){let r=rr(t);for(let s=0;s<r.length;++s)if(r[s]!==e[s+n])return!1;return!0}var q=!1,K=!0;function pt(e){let t=J(e);return or(t)||fr(t)||cr(t)||ar(t)||ir(t)}function ir(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),n=he(t);return n?{mimeType:n.mimeType,width:0,height:0}:null}function or(e){let t=J(e);return t.byteLength>=24&&t.getUint32(0,q)===2303741511?{mimeType:"image/png",width:t.getUint32(16,q),height:t.getUint32(20,q)}:null}function cr(e){let t=J(e);return t.byteLength>=10&&t.getUint32(0,q)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,K),height:t.getUint16(8,K)}:null}function ar(e){let t=J(e);return t.byteLength>=14&&t.getUint16(0,q)===16973&&t.getUint32(2,K)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,K),height:t.getUint32(22,K)}:null}function fr(e){let t=J(e);if(!(t.byteLength>=3&&t.getUint16(0,q)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=hr(),i=2;for(;i+9<t.byteLength;){let o=t.getUint16(i,q);if(s.has(o))return{mimeType:"image/jpeg",height:t.getUint16(i+5,q),width:t.getUint16(i+7,q)};if(!r.has(o))return null;i+=2,i+=t.getUint16(i,q)}return null}function hr(){let e=new Set([65499,65476,65484,65501,65534]);for(let n=65504;n<65520;++n)e.add(n);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function J(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function le(e,t){let{mimeType:n}=pt(e)||{},r=globalThis.loaders?.parseImageNode;return U(r),await r(e,n)}async function pe(e,t,n){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=n||{},o=lr(s),c;switch(o){case"imagebitmap":c=await fe(e,t,i);break;case"image":c=await lt(e,t,i);break;case"data":c=await le(e,t);break;default:U(!1)}return s==="data"&&(c=ft(c)),c}function lr(e){switch(e){case"auto":case"data":return ie();default:return se(e),e}}var pr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],mr=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],xr={image:{type:"auto",decode:!0}},mt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:re,mimeTypes:mr,extensions:pr,parse:pe,tests:[e=>Boolean(pt(new DataView(e)))],options:xr};function xt(e,t,n){let r=typeof e=="function"?e({...t,...n}):e,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Rt(r)}var dr=e=>e&&typeof e=="object";async function me(e,t,n={}){return await kt(e,t,n)}async function kt(e,t,n){return Array.isArray(e)?await gr(e,t,n):dr(e)?await Mr(e,t,n):await t(e,n)}async function Mr(e,t,n){let r=[],s={};for(let i in e){let o=e[i],c=kt(o,t,n).then(a=>{s[i]=a});r.push(c)}return await Promise.all(r),s}async function gr(e,t,n={}){let r=e.map(s=>kt(s,t,n));return await Promise.all(r)}async function xe(e,t,n){return await me(e,r=>zt(r,t,n))}async function zt(e,t,n){let s=await(await fetch(e,n.fetch)).arrayBuffer();return await t(s,n)}async function Z(e,t={}){let n=await yr(e,t);return await xe(n,mt.parse,t)}async function yr(e,t,n={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await Tr(e,r,t,n):xt(e,t,n)}async function Tr(e,t,n,r){let s=[];if(t==="auto"){let i=xt(e,n,{...r,lod:0}),o=await zt(i,mt.parse,n),{width:c,height:a}=vt(o);t=Ar({width:c,height:a}),s.push(i)}U(t>0);for(let i=s.length;i<t;++i){let o=xt(e,n,{...r,lod:i});s.push(o)}return s}function Ar(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}function Me(e,t){let n=new Ft.DynamicTexture(e,{id:"brdfLUT",sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"},data:Z(t.brdfLutUrl)}),r=de(e,{id:"DiffuseEnvSampler",getTextureForFace:i=>Z(t.getTexUrl("diffuse",i,0)),sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}}),s=de(e,{id:"SpecularEnvSampler",getTextureForFace:i=>{let o=[];for(let c=0;c<=t.specularMipLevels-1;c++)o.push(Z(t.getTexUrl("specular",i,c)));return o},sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}});return{brdfLutTexture:n,diffuseEnvSampler:r,specularEnvSampler:s}}var Er=[0,1,2,3,4,5];function de(e,{id:t,getTextureForFace:n,sampler:r}){let s={};return Er.forEach(i=>{s[String(i)]=n(i)}),new Ft.DynamicTexture(e,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var _=z($(),1),Ai=z(qt(),1);var gi=z(qt(),1);function Te(e){return{addressModeU:ye(e.wrapS),addressModeV:ye(e.wrapT),magFilter:wr(e.magFilter),...Sr(e.minFilter)}}function ye(e){switch(e){case 33071:return"clamp-to-edge";case 10497:return"repeat";case 33648:return"mirror-repeat";default:return}}function wr(e){switch(e){case 9728:return"nearest";case 9729:return"linear";default:return}}function Sr(e){switch(e){case 9728:return{minFilter:"nearest"};case 9729:return{minFilter:"linear"};case 9984:return{minFilter:"nearest",mipmapFilter:"nearest"};case 9985:return{minFilter:"linear",mipmapFilter:"nearest"};case 9986:return{minFilter:"nearest",mipmapFilter:"linear"};case 9987:return{minFilter:"linear",mipmapFilter:"linear"};default:return{}}}function dt(e,t,n,r){let s={defines:{MANUAL_SRGB:!0,SRGB_FAST_APPROXIMATION:!0},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=!0;let{imageBasedLightingEnvironment:i}=r;return i&&(s.bindings.pbr_diffuseEnvSampler=i.diffuseEnvSampler.texture,s.bindings.pbr_specularEnvSampler=i.specularEnvSampler.texture,s.bindings.pbr_BrdfLUT=i.brdfLutTexture.texture,s.uniforms.scaleIBLAmbient=[1,1]),r?.pbrDebug&&(s.defines.PBR_DEBUG=!0,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),n.NORMAL&&(s.defines.HAS_NORMALS=!0),n.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=!0),n.TEXCOORD_0&&(s.defines.HAS_UV=!0),n.JOINTS_0&&n.WEIGHTS_0&&(s.defines.HAS_SKIN=!0),n.COLOR_0&&(s.defines.HAS_COLORS=!0),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=!0),r?.lights&&(s.defines.USE_LIGHTS=!0),t&&ur(e,t,s),s}function ur(e,t,n){if(n.uniforms.unlit=Boolean(t.unlit),t.pbrMetallicRoughness&&Nr(e,t.pbrMetallicRoughness,n),t.normalTexture){Q(e,t.normalTexture,"pbr_normalSampler","HAS_NORMALMAP",n);let{scale:r=1}=t.normalTexture;n.uniforms.normalScale=r}if(t.occlusionTexture){Q(e,t.occlusionTexture,"pbr_occlusionSampler","HAS_OCCLUSIONMAP",n);let{strength:r=1}=t.occlusionTexture;n.uniforms.occlusionStrength=r}switch(t.emissiveTexture&&(Q(e,t.emissiveTexture,"pbr_emissiveSampler","HAS_EMISSIVEMAP",n),n.uniforms.emissiveFactor=t.emissiveFactor||[0,0,0]),t.alphaMode||"MASK"){case"MASK":let{alphaCutoff:r=.5}=t;n.defines.ALPHA_CUTOFF=!0,n.uniforms.alphaCutoff=r;break;case"BLEND":_.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),n.parameters.blend=!0,n.parameters.blendColorOperation="add",n.parameters.blendColorSrcFactor="src-alpha",n.parameters.blendColorDstFactor="one-minus-src-alpha",n.parameters.blendAlphaOperation="add",n.parameters.blendAlphaSrcFactor="one",n.parameters.blendAlphaDstFactor="one-minus-src-alpha",n.glParameters.blend=!0,n.glParameters.blendEquation=32774,n.glParameters.blendFunc=[770,771,1,771];break}}function Nr(e,t,n){t.baseColorTexture&&Q(e,t.baseColorTexture,"pbr_baseColorSampler","HAS_BASECOLORMAP",n),n.uniforms.baseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&Q(e,t.metallicRoughnessTexture,"pbr_metallicRoughnessSampler","HAS_METALROUGHNESSMAP",n);let{metallicFactor:r=1,roughnessFactor:s=1}=t;n.uniforms.metallicRoughnessValues=[r,s]}function Q(e,t,n,r,s){let i=t.texture.source.image,o={wrapS:10497,wrapT:10497,minFilter:9729,magFilter:9729,...t?.texture?.sampler},c={id:t.uniformName||t.id,sampler:Te(o)},a;if(i.compressed)a=Or(e,i,c);else{let{width:f,height:h}=e.getExternalImageSize(i);a=e.createTexture({...c,width:f,height:h,data:i})}s.bindings[n]=a,r&&(s.defines[r]=!0),s.generatedTextures.push(a)}function Bt(e,t){return e.createTexture({...t,format:"rgba8unorm",width:1,height:1,mipLevels:1})}function Ae(e){return e.textureFormat}function Lr(e,t,n){let{blockWidth:r=1,blockHeight:s=1}=_.textureFormatDecoder.getInfo(n),i=1;for(let o=1;;o++){let c=Math.max(1,e>>o),a=Math.max(1,t>>o);if(c<r||a<s)break;i++}return i}function Or(e,t,n){let r;if(Array.isArray(t.data)&&t.data[0]?.data?r=t.data:"mipmaps"in t&&Array.isArray(t.mipmaps)?r=t.mipmaps:r=[],r.length===0||!r[0]?.data)return _.log.warn("createCompressedTexture: compressed image has no valid mip levels, creating fallback")(),Bt(e,n);let s=r[0],i=s.width??t.width??0,o=s.height??t.height??0;if(i<=0||o<=0)return _.log.warn("createCompressedTexture: base level has invalid dimensions, creating fallback")(),Bt(e,n);let c=Ae(s);if(!c)return _.log.warn("createCompressedTexture: compressed image has no textureFormat, creating fallback")(),Bt(e,n);let a=Lr(i,o,c),f=Math.min(r.length,a),h=1;for(let p=1;p<f;p++){let m=r[p];if(!m.data||m.width<=0||m.height<=0){_.log.warn(`createCompressedTexture: mip level ${p} has invalid data/dimensions, truncating`)();break}let x=Ae(m);if(x&&x!==c){_.log.warn(`createCompressedTexture: mip level ${p} format '${x}' differs from base '${c}', truncating`)();break}let d=Math.max(1,i>>p),M=Math.max(1,o>>p);if(m.width!==d||m.height!==M){_.log.warn(`createCompressedTexture: mip level ${p} dimensions ${m.width}x${m.height} don't match expected ${d}x${M}, truncating`)();break}h++}let l=e.createTexture({...n,format:c,usage:_.Texture.TEXTURE|_.Texture.COPY_DST,width:i,height:o,mipLevels:h,data:s.data});for(let p=1;p<h;p++)l.writeData(r[p].data,{width:r[p].width,height:r[p].height,mipLevel:p});return l}var ui=1/Math.PI*180,Ni=1/180*Math.PI,Rr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Rr}};var N=globalThis.mathgl.config;function Ee(e,{precision:t=N.precision}={}){return e=Ir(e),`${parseFloat(e.toPrecision(t))}`}function G(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ct(e,t,n){let r=N.EPSILON;n&&(N.EPSILON=n);try{if(e===t)return!0;if(G(e)&&G(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;++s)if(!Ct(e[s],t[s]))return!1;return!0}return e&&e.equals?e.equals(t):t&&t.equals?t.equals(e):typeof e=="number"&&typeof t=="number"?Math.abs(e-t)<=N.EPSILON*Math.max(1,Math.abs(e),Math.abs(t)):!1}finally{N.EPSILON=r}}function Ir(e){return Math.round(e/N.EPSILON)*N.EPSILON}var V=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(t,n=0){for(let r=0;r<this.ELEMENTS;++r)this[r]=t[r+n];return this.check()}toArray(t=[],n=0){for(let r=0;r<this.ELEMENTS;++r)t[n+r]=this[r];return t}toObject(t){return t}from(t){return Array.isArray(t)?this.copy(t):this.fromObject(t)}to(t){return t===this?this:G(t)?this.toArray(t):this.toObject(t)}toTarget(t){return t?this.to(t):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(N)}formatString(t){let n="";for(let r=0;r<this.ELEMENTS;++r)n+=(r>0?", ":"")+Ee(this[r],t);return`${t.printTypes?this.constructor.name:""}[${n}]`}equals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(!Ct(this[n],t[n]))return!1;return!0}exactEquals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(this[n]!==t[n])return!1;return!0}negate(){for(let t=0;t<this.ELEMENTS;++t)this[t]=-this[t];return this.check()}lerp(t,n,r){if(r===void 0)return this.lerp(this,t,n);for(let s=0;s<this.ELEMENTS;++s){let i=t[s],o=typeof n=="number"?n:n[s];this[s]=i+r*(o-i)}return this.check()}min(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(t[n],this[n]);return this.check()}max(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.max(t[n],this[n]);return this.check()}clamp(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t[r]),n[r]);return this.check()}add(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]+=n[r];return this.check()}subtract(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]-=n[r];return this.check()}scale(t){if(typeof t=="number")for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;else for(let n=0;n<this.ELEMENTS&&n<t.length;++n)this[n]*=t[n];return this.check()}multiplyByScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}check(){if(N.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let t=this.length===this.ELEMENTS;for(let n=0;n<this.ELEMENTS;++n)t=t&&Number.isFinite(this[n]);return t}sub(t){return this.subtract(t)}setScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=t;return this.check()}addScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]+=t;return this.check()}subScalar(t){return this.addScalar(-t)}multiplyScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}divideScalar(t){return this.multiplyByScalar(1/t)}clampScalar(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t),n);return this.check()}get elements(){return this}};function Pr(e,t){if(e.length!==t)return!1;for(let n=0;n<e.length;++n)if(!Number.isFinite(e[n]))return!1;return!0}function S(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function Y(e,t,n=""){if(N.debug&&!Pr(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function Vt(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var Mt=class extends V{get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let t=0;for(let n=0;n<this.ELEMENTS;++n)t+=this[n]*this[n];return t}magnitudeSquared(){return this.lengthSquared()}distance(t){return Math.sqrt(this.distanceSquared(t))}distanceSquared(t){let n=0;for(let r=0;r<this.ELEMENTS;++r){let s=this[r]-t[r];n+=s*s}return S(n)}dot(t){let n=0;for(let r=0;r<this.ELEMENTS;++r)n+=this[r]*t[r];return S(n)}normalize(){let t=this.magnitude();if(t!==0)for(let n=0;n<this.ELEMENTS;++n)this[n]/=t;return this.check()}multiply(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]*=n[r];return this.check()}divide(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]/=n[r];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(t){return this.distance(t)}distanceToSquared(t){return this.distanceSquared(t)}getComponent(t){return Vt(t>=0&&t<this.ELEMENTS,"index is out of range"),S(this[t])}setComponent(t,n){return Vt(t>=0&&t<this.ELEMENTS,"index is out of range"),this[t]=n,this.check()}addVectors(t,n){return this.copy(t).add(n)}subVectors(t,n){return this.copy(t).subtract(n)}multiplyVectors(t,n){return this.copy(t).multiply(n)}addScaledVector(t,n){return this.add(new this.constructor(t).multiplyScalar(n))}};var L=typeof Float32Array<"u"?Float32Array:Array;var Fi=Math.PI/180;function _r(){let e=new L(2);return L!=Float32Array&&(e[0]=0,e[1]=0),e}function ue(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[4]*s+n[12],e[1]=n[1]*r+n[5]*s+n[13],e}var qi=function(){let e=_r();return function(t,n,r,s,i,o){let c,a;for(n||(n=2),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],i(e,e,o),t[c]=e[0],t[c+1]=e[1];return t}}();function Ne(e,t,n){let r=t[0],s=t[1],i=n[3]*r+n[7]*s||1;return e[0]=(n[0]*r+n[4]*s)/i,e[1]=(n[1]*r+n[5]*s)/i,e}function Le(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i||1;return e[0]=(n[0]*r+n[4]*s+n[8]*i)/o,e[1]=(n[1]*r+n[5]*s+n[9]*i)/o,e[2]=(n[2]*r+n[6]*s+n[10]*i)/o,e}function Oe(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[2]*s,e[1]=n[1]*r+n[3]*s,e[2]=t[2],e[3]=t[3],e}function Re(e,t,n){let r=t[0],s=t[1],i=t[2];return e[0]=n[0]*r+n[3]*s+n[6]*i,e[1]=n[1]*r+n[4]*s+n[7]*i,e[2]=n[2]*r+n[5]*s+n[8]*i,e[3]=t[3],e}function Ut(){let e=new L(3);return L!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function vr(e){let t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Dt(e,t,n){let r=new L(3);return r[0]=e,r[1]=t,r[2]=n,r}function Ie(e,t){let n=t[0],r=t[1],s=t[2],i=n*n+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function Pe(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function gt(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2];return e[0]=s*a-i*c,e[1]=i*o-r*a,e[2]=r*c-s*o,e}function yt(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*s+n[8]*i+n[12])/o,e[1]=(n[1]*r+n[5]*s+n[9]*i+n[13])/o,e[2]=(n[2]*r+n[6]*s+n[10]*i+n[14])/o,e}function _e(e,t,n){let r=n[0],s=n[1],i=n[2],o=n[3],c=t[0],a=t[1],f=t[2],h=s*f-i*a,l=i*c-r*f,p=r*a-s*c,m=s*p-i*l,x=i*h-r*p,d=r*l-s*h,M=o*2;return h*=M,l*=M,p*=M,m*=2,x*=2,d*=2,e[0]=c+h+m,e[1]=a+l+x,e[2]=f+p+d,e}var ve=vr;var Vi=function(){let e=Ut();return function(t,n,r,s,i,o){let c,a;for(n||(n=3),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2];return t}}();var Tt,W=class extends Mt{static get ZERO(){return Tt||(Tt=new W(0,0,0,0),Object.freeze(Tt)),Tt}constructor(t=0,n=0,r=0,s=0){super(-0,-0,-0,-0),G(t)&&arguments.length===1?this.copy(t):(N.debug&&(S(t),S(n),S(r),S(s)),this[0]=t,this[1]=n,this[2]=r,this[3]=s)}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}fromObject(t){return N.debug&&(S(t.x),S(t.y),S(t.z),S(t.w)),this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this}toObject(t){return t.x=this[0],t.y=this[1],t.z=this[2],t.w=this[3],t}get ELEMENTS(){return 4}get z(){return this[2]}set z(t){this[2]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}transform(t){return yt(this,this,t),this.check()}transformByMatrix3(t){return Re(this,this,t),this.check()}transformByMatrix2(t){return Oe(this,this,t),this.check()}transformByQuaternion(t){return _e(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var At=class extends V{toString(){let t="[";if(N.printRowMajor){t+="row-major:";for(let n=0;n<this.RANK;++n)for(let r=0;r<this.RANK;++r)t+=` ${this[r*this.RANK+n]}`}else{t+="column-major:";for(let n=0;n<this.ELEMENTS;++n)t+=` ${this[n]}`}return t+="]",t}getElementIndex(t,n){return n*this.RANK+t}getElement(t,n){return this[n*this.RANK+t]}setElement(t,n,r){return this[n*this.RANK+t]=S(r),this}getColumn(t,n=new Array(this.RANK).fill(-0)){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)n[s]=this[r+s];return n}setColumn(t,n){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)this[r+s]=n[s];return this}};function be(){let e=new L(9);return L!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function zr(e){return 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}function ke(e,t){if(e===t){let n=t[1],r=t[2],s=t[3],i=t[6],o=t[7],c=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=s,e[13]=o,e[14]=c}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function ze(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=t[4],c=t[5],a=t[6],f=t[7],h=t[8],l=t[9],p=t[10],m=t[11],x=t[12],d=t[13],M=t[14],E=t[15],u=n*c-r*o,g=n*a-s*o,y=n*f-i*o,T=r*a-s*c,A=r*f-i*c,O=s*f-i*a,R=h*d-l*x,I=h*M-p*x,P=h*E-m*x,v=l*M-p*d,b=l*E-m*d,k=p*E-m*M,w=u*k-g*b+y*v+T*P-A*I+O*R;return w?(w=1/w,e[0]=(c*k-a*b+f*v)*w,e[1]=(s*b-r*k-i*v)*w,e[2]=(d*O-M*A+E*T)*w,e[3]=(p*A-l*O-m*T)*w,e[4]=(a*P-o*k-f*I)*w,e[5]=(n*k-s*P+i*I)*w,e[6]=(M*y-x*O-E*g)*w,e[7]=(h*O-p*y+m*g)*w,e[8]=(o*b-c*P+f*R)*w,e[9]=(r*P-n*b-i*R)*w,e[10]=(x*A-d*y+E*u)*w,e[11]=(l*y-h*A-m*u)*w,e[12]=(c*I-o*v-a*R)*w,e[13]=(n*v-r*I+s*R)*w,e[14]=(d*g-x*T-M*u)*w,e[15]=(h*T-l*g+p*u)*w,e):null}function Fe(e){let t=e[0],n=e[1],r=e[2],s=e[3],i=e[4],o=e[5],c=e[6],a=e[7],f=e[8],h=e[9],l=e[10],p=e[11],m=e[12],x=e[13],d=e[14],M=e[15],E=t*o-n*i,u=t*c-r*i,g=n*c-r*o,y=f*x-h*m,T=f*d-l*m,A=h*d-l*x,O=t*A-n*T+r*y,R=i*A-o*T+c*y,I=f*g-h*u+l*E,P=m*g-x*u+d*E;return a*O-s*R+M*I-p*P}function $t(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=t[4],a=t[5],f=t[6],h=t[7],l=t[8],p=t[9],m=t[10],x=t[11],d=t[12],M=t[13],E=t[14],u=t[15],g=n[0],y=n[1],T=n[2],A=n[3];return e[0]=g*r+y*c+T*l+A*d,e[1]=g*s+y*a+T*p+A*M,e[2]=g*i+y*f+T*m+A*E,e[3]=g*o+y*h+T*x+A*u,g=n[4],y=n[5],T=n[6],A=n[7],e[4]=g*r+y*c+T*l+A*d,e[5]=g*s+y*a+T*p+A*M,e[6]=g*i+y*f+T*m+A*E,e[7]=g*o+y*h+T*x+A*u,g=n[8],y=n[9],T=n[10],A=n[11],e[8]=g*r+y*c+T*l+A*d,e[9]=g*s+y*a+T*p+A*M,e[10]=g*i+y*f+T*m+A*E,e[11]=g*o+y*h+T*x+A*u,g=n[12],y=n[13],T=n[14],A=n[15],e[12]=g*r+y*c+T*l+A*d,e[13]=g*s+y*a+T*p+A*M,e[14]=g*i+y*f+T*m+A*E,e[15]=g*o+y*h+T*x+A*u,e}function qe(e,t,n){let r=n[0],s=n[1],i=n[2],o,c,a,f,h,l,p,m,x,d,M,E;return t===e?(e[12]=t[0]*r+t[4]*s+t[8]*i+t[12],e[13]=t[1]*r+t[5]*s+t[9]*i+t[13],e[14]=t[2]*r+t[6]*s+t[10]*i+t[14],e[15]=t[3]*r+t[7]*s+t[11]*i+t[15]):(o=t[0],c=t[1],a=t[2],f=t[3],h=t[4],l=t[5],p=t[6],m=t[7],x=t[8],d=t[9],M=t[10],E=t[11],e[0]=o,e[1]=c,e[2]=a,e[3]=f,e[4]=h,e[5]=l,e[6]=p,e[7]=m,e[8]=x,e[9]=d,e[10]=M,e[11]=E,e[12]=o*r+h*s+x*i+t[12],e[13]=c*r+l*s+d*i+t[13],e[14]=a*r+p*s+M*i+t[14],e[15]=f*r+m*s+E*i+t[15]),e}function Be(e,t,n){let r=n[0],s=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*s,e[5]=t[5]*s,e[6]=t[6]*s,e[7]=t[7]*s,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Ce(e,t,n,r){let s=r[0],i=r[1],o=r[2],c=Math.sqrt(s*s+i*i+o*o),a,f,h,l,p,m,x,d,M,E,u,g,y,T,A,O,R,I,P,v,b,k,w,X;return c<1e-6?null:(c=1/c,s*=c,i*=c,o*=c,f=Math.sin(n),a=Math.cos(n),h=1-a,l=t[0],p=t[1],m=t[2],x=t[3],d=t[4],M=t[5],E=t[6],u=t[7],g=t[8],y=t[9],T=t[10],A=t[11],O=s*s*h+a,R=i*s*h+o*f,I=o*s*h-i*f,P=s*i*h-o*f,v=i*i*h+a,b=o*i*h+s*f,k=s*o*h+i*f,w=i*o*h-s*f,X=o*o*h+a,e[0]=l*O+d*R+g*I,e[1]=p*O+M*R+y*I,e[2]=m*O+E*R+T*I,e[3]=x*O+u*R+A*I,e[4]=l*P+d*v+g*b,e[5]=p*P+M*v+y*b,e[6]=m*P+E*v+T*b,e[7]=x*P+u*v+A*b,e[8]=l*k+d*w+g*X,e[9]=p*k+M*w+y*X,e[10]=m*k+E*w+T*X,e[11]=x*k+u*w+A*X,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Ve(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[4],o=t[5],c=t[6],a=t[7],f=t[8],h=t[9],l=t[10],p=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=i*s+f*r,e[5]=o*s+h*r,e[6]=c*s+l*r,e[7]=a*s+p*r,e[8]=f*s-i*r,e[9]=h*s-o*r,e[10]=l*s-c*r,e[11]=p*s-a*r,e}function Ue(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],f=t[8],h=t[9],l=t[10],p=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*s-f*r,e[1]=o*s-h*r,e[2]=c*s-l*r,e[3]=a*s-p*r,e[8]=i*r+f*s,e[9]=o*r+h*s,e[10]=c*r+l*s,e[11]=a*r+p*s,e}function De(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],f=t[4],h=t[5],l=t[6],p=t[7];return t!==e&&(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]),e[0]=i*s+f*r,e[1]=o*s+h*r,e[2]=c*s+l*r,e[3]=a*s+p*r,e[4]=f*s-i*r,e[5]=h*s-o*r,e[6]=l*s-c*r,e[7]=p*s-a*r,e}function $e(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n+n,c=r+r,a=s+s,f=n*o,h=r*o,l=r*c,p=s*o,m=s*c,x=s*a,d=i*o,M=i*c,E=i*a;return e[0]=1-l-x,e[1]=h+E,e[2]=p-M,e[3]=0,e[4]=h-E,e[5]=1-f-x,e[6]=m+d,e[7]=0,e[8]=p+M,e[9]=m-d,e[10]=1-f-l,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ge(e,t,n,r,s,i,o){let c=1/(n-t),a=1/(s-r),f=1/(i-o);return e[0]=i*2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i*2*a,e[6]=0,e[7]=0,e[8]=(n+t)*c,e[9]=(s+r)*a,e[10]=(o+i)*f,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*f,e[15]=0,e}function Fr(e,t,n,r,s){let i=1/Math.tan(t/2);if(e[0]=i/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,s!=null&&s!==1/0){let o=1/(r-s);e[10]=(s+r)*o,e[14]=2*s*r*o}else e[10]=-1,e[14]=-2*r;return e}var Ye=Fr;function qr(e,t,n,r,s,i,o){let c=1/(t-n),a=1/(r-s),f=1/(i-o);return e[0]=-2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*f,e[11]=0,e[12]=(t+n)*c,e[13]=(s+r)*a,e[14]=(o+i)*f,e[15]=1,e}var We=qr;function He(e,t,n,r){let s,i,o,c,a,f,h,l,p,m,x=t[0],d=t[1],M=t[2],E=r[0],u=r[1],g=r[2],y=n[0],T=n[1],A=n[2];return Math.abs(x-y)<1e-6&&Math.abs(d-T)<1e-6&&Math.abs(M-A)<1e-6?zr(e):(l=x-y,p=d-T,m=M-A,s=1/Math.sqrt(l*l+p*p+m*m),l*=s,p*=s,m*=s,i=u*m-g*p,o=g*l-E*m,c=E*p-u*l,s=Math.sqrt(i*i+o*o+c*c),s?(s=1/s,i*=s,o*=s,c*=s):(i=0,o=0,c=0),a=p*c-m*o,f=m*i-l*c,h=l*o-p*i,s=Math.sqrt(a*a+f*f+h*h),s?(s=1/s,a*=s,f*=s,h*=s):(a=0,f=0,h=0),e[0]=i,e[1]=a,e[2]=l,e[3]=0,e[4]=o,e[5]=f,e[6]=p,e[7]=0,e[8]=c,e[9]=h,e[10]=m,e[11]=0,e[12]=-(i*x+o*d+c*M),e[13]=-(a*x+f*d+h*M),e[14]=-(l*x+p*d+m*M),e[15]=1,e)}function Br(){let e=new L(4);return L!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function je(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function Xe(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function Ke(e){let t=e[0],n=e[1],r=e[2],s=e[3];return Math.sqrt(t*t+n*n+r*r+s*s)}function Je(e){let t=e[0],n=e[1],r=e[2],s=e[3];return t*t+n*n+r*r+s*s}function Ze(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i;return o>0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=s*o,e[3]=i*o,e}function Qe(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function tn(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3];return e[0]=s+r*(n[0]-s),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e[3]=c+r*(n[3]-c),e}function en(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3];return e[0]=n[0]*r+n[4]*s+n[8]*i+n[12]*o,e[1]=n[1]*r+n[5]*s+n[9]*i+n[13]*o,e[2]=n[2]*r+n[6]*s+n[10]*i+n[14]*o,e[3]=n[3]*r+n[7]*s+n[11]*i+n[15]*o,e}function nn(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2],f=n[3],h=f*r+c*i-a*s,l=f*s+a*r-o*i,p=f*i+o*s-c*r,m=-o*r-c*s-a*i;return e[0]=h*f+m*-o+l*-a-p*-c,e[1]=l*f+m*-c+p*-o-h*-a,e[2]=p*f+m*-a+h*-c-l*-o,e[3]=t[3],e}var Zi=function(){let e=Br();return function(t,n,r,s,i,o){let c,a;for(n||(n=4),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],e[3]=t[c+3],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2],t[c+3]=e[3];return t}}();var Wt;(function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL0ROW3=3]="COL0ROW3",e[e.COL1ROW0=4]="COL1ROW0",e[e.COL1ROW1=5]="COL1ROW1",e[e.COL1ROW2=6]="COL1ROW2",e[e.COL1ROW3=7]="COL1ROW3",e[e.COL2ROW0=8]="COL2ROW0",e[e.COL2ROW1=9]="COL2ROW1",e[e.COL2ROW2=10]="COL2ROW2",e[e.COL2ROW3=11]="COL2ROW3",e[e.COL3ROW0=12]="COL3ROW0",e[e.COL3ROW1=13]="COL3ROW1",e[e.COL3ROW2=14]="COL3ROW2",e[e.COL3ROW3=15]="COL3ROW3"})(Wt||(Wt={}));var Vr=45*Math.PI/180,Ur=1,Gt=.1,Yt=500,Dr=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),C=class extends At{static get IDENTITY(){return Gr()}static get ZERO(){return $r()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return Wt}constructor(t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),arguments.length===1&&Array.isArray(t)?this.copy(t):this.identity()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this[4]=t[4],this[5]=t[5],this[6]=t[6],this[7]=t[7],this[8]=t[8],this[9]=t[9],this[10]=t[10],this[11]=t[11],this[12]=t[12],this[13]=t[13],this[14]=t[14],this[15]=t[15],this.check()}set(t,n,r,s,i,o,c,a,f,h,l,p,m,x,d,M){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this[4]=i,this[5]=o,this[6]=c,this[7]=a,this[8]=f,this[9]=h,this[10]=l,this[11]=p,this[12]=m,this[13]=x,this[14]=d,this[15]=M,this.check()}setRowMajor(t,n,r,s,i,o,c,a,f,h,l,p,m,x,d,M){return this[0]=t,this[1]=i,this[2]=f,this[3]=m,this[4]=n,this[5]=o,this[6]=h,this[7]=x,this[8]=r,this[9]=c,this[10]=l,this[11]=d,this[12]=s,this[13]=a,this[14]=p,this[15]=M,this.check()}toRowMajor(t){return t[0]=this[0],t[1]=this[4],t[2]=this[8],t[3]=this[12],t[4]=this[1],t[5]=this[5],t[6]=this[9],t[7]=this[13],t[8]=this[2],t[9]=this[6],t[10]=this[10],t[11]=this[14],t[12]=this[3],t[13]=this[7],t[14]=this[11],t[15]=this[15],t}identity(){return this.copy(Dr)}fromObject(t){return this.check()}fromQuaternion(t){return $e(this,t),this.check()}frustum(t){let{left:n,right:r,bottom:s,top:i,near:o=Gt,far:c=Yt}=t;return c===1/0?Yr(this,n,r,s,i,o):Ge(this,n,r,s,i,o,c),this.check()}lookAt(t){let{eye:n,center:r=[0,0,0],up:s=[0,1,0]}=t;return He(this,n,r,s),this.check()}ortho(t){let{left:n,right:r,bottom:s,top:i,near:o=Gt,far:c=Yt}=t;return We(this,n,r,s,i,o,c),this.check()}orthographic(t){let{fovy:n=Vr,aspect:r=Ur,focalDistance:s=1,near:i=Gt,far:o=Yt}=t;rn(n);let c=n/2,a=s*Math.tan(c),f=a*r;return this.ortho({left:-f,right:f,bottom:-a,top:a,near:i,far:o})}perspective(t){let{fovy:n=45*Math.PI/180,aspect:r=1,near:s=.1,far:i=500}=t;return rn(n),Ye(this,n,r,s,i),this.check()}determinant(){return Fe(this)}getScale(t=[-0,-0,-0]){return t[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),t[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),t[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),t}getTranslation(t=[-0,-0,-0]){return t[0]=this[12],t[1]=this[13],t[2]=this[14],t}getRotation(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*i,t[6]=this[6]*o,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*i,t[10]=this[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=this[4]*s,t[4]=this[5]*i,t[5]=this[6]*o,t[6]=this[8]*s,t[7]=this[9]*i,t[8]=this[10]*o,t}transpose(){return ke(this,this),this.check()}invert(){return ze(this,this),this.check()}multiplyLeft(t){return $t(this,t,this),this.check()}multiplyRight(t){return $t(this,this,t),this.check()}rotateX(t){return Ve(this,this,t),this.check()}rotateY(t){return Ue(this,this,t),this.check()}rotateZ(t){return De(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,n){return Ce(this,this,t,n),this.check()}scale(t){return Be(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return qe(this,this,t),this.check()}transform(t,n){return t.length===4?(n=en(n||[-0,-0,-0,-0],t,this),Y(n,4),n):this.transformAsPoint(t,n)}transformAsPoint(t,n){let{length:r}=t,s;switch(r){case 2:s=ue(n||[-0,-0],t,this);break;case 3:s=yt(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return Y(s,t.length),s}transformAsVector(t,n){let r;switch(t.length){case 2:r=Ne(n||[-0,-0],t,this);break;case 3:r=Le(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return Y(r,t.length),r}transformPoint(t,n){return this.transformAsPoint(t,n)}transformVector(t,n){return this.transformAsPoint(t,n)}transformDirection(t,n){return this.transformAsVector(t,n)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,n,r){return this.identity().translate([t,n,r])}},Et,wt;function $r(){return Et||(Et=new C([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(Et)),Et}function Gr(){return wt||(wt=new C,Object.freeze(wt)),wt}function rn(e){if(e>Math.PI*2)throw Error("expected radians")}function Yr(e,t,n,r,s,i){let o=2*i/(n-t),c=2*i/(s-r),a=(n+t)/(n-t),f=(s+r)/(s-r),h=-1,l=-1,p=-2*i;return e[0]=o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=a,e[9]=f,e[10]=h,e[11]=l,e[12]=0,e[13]=0,e[14]=p,e[15]=0,e}function sn(){let e=new L(4);return L!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function on(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function Ht(e,t,n){n=n*.5;let r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e}function jt(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=n[0],a=n[1],f=n[2],h=n[3];return e[0]=r*h+o*c+s*f-i*a,e[1]=s*h+o*a+i*c-r*f,e[2]=i*h+o*f+r*a-s*c,e[3]=o*h-r*c-s*a-i*f,e}function cn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+o*c,e[1]=s*a+i*c,e[2]=i*a-s*c,e[3]=o*a-r*c,e}function an(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a-i*c,e[1]=s*a+o*c,e[2]=i*a+r*c,e[3]=o*a-s*c,e}function fn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+s*c,e[1]=s*a-r*c,e[2]=i*a+o*c,e[3]=o*a-i*c,e}function hn(e,t){let n=t[0],r=t[1],s=t[2];return e[0]=n,e[1]=r,e[2]=s,e[3]=Math.sqrt(Math.abs(1-n*n-r*r-s*s)),e}function et(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3],a=n[0],f=n[1],h=n[2],l=n[3],p,m,x,d,M;return p=s*a+i*f+o*h+c*l,p<0&&(p=-p,a=-a,f=-f,h=-h,l=-l),1-p>1e-6?(m=Math.acos(p),M=Math.sin(m),x=Math.sin((1-r)*m)/M,d=Math.sin(r*m)/M):(x=1-r,d=r),e[0]=x*s+d*a,e[1]=x*i+d*f,e[2]=x*o+d*h,e[3]=x*c+d*l,e}function ln(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i,c=o?1/o:0;return e[0]=-n*c,e[1]=-r*c,e[2]=-s*c,e[3]=i*c,e}function pn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function Xt(e,t){let n=t[0]+t[4]+t[8],r;if(n>0)r=Math.sqrt(n+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{let s=0;t[4]>t[0]&&(s=1),t[8]>t[s*3+s]&&(s=2);let i=(s+1)%3,o=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[i*3+i]-t[o*3+o]+1),e[s]=.5*r,r=.5/r,e[3]=(t[i*3+o]-t[o*3+i])*r,e[i]=(t[i*3+s]+t[s*3+i])*r,e[o]=(t[o*3+s]+t[s*3+o])*r}return e}var mn=je;var xn=Xe,dn=Qe,Mn=tn,gn=Ke;var yn=Je;var Tn=Ze;var An=function(){let e=Ut(),t=Dt(1,0,0),n=Dt(0,1,0);return function(r,s,i){let o=Pe(s,i);return o<-.999999?(gt(e,t,s),ve(e)<1e-6&>(e,n,s),Ie(e,e),Ht(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(gt(e,s,i),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,Tn(r,r))}}(),po=function(){let e=sn(),t=sn();return function(n,r,s,i,o,c){return et(e,r,o,c),et(t,s,i,c),et(n,e,t,2*c*(1-c)),n}}(),mo=function(){let e=be();return function(t,n,r,s){return e[0]=r[0],e[3]=r[1],e[6]=r[2],e[1]=s[0],e[4]=s[1],e[7]=s[2],e[2]=-n[0],e[5]=-n[1],e[8]=-n[2],Tn(t,Xt(t,e))}}();var Wr=[0,0,0,1],nt=class extends V{constructor(t=0,n=0,r=0,s=1){super(-0,-0,-0,-0),Array.isArray(t)&&arguments.length===1?this.copy(t):this.set(t,n,r,s)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}fromObject(t){return this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this.check()}fromMatrix3(t){return Xt(this,t),this.check()}fromAxisRotation(t,n){return Ht(this,t,n),this.check()}identity(){return on(this),this.check()}setAxisAngle(t,n){return this.fromAxisRotation(t,n)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}get z(){return this[2]}set z(t){this[2]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}len(){return gn(this)}lengthSquared(){return yn(this)}dot(t){return dn(this,t)}rotationTo(t,n){return An(this,t,n),this.check()}add(t){return mn(this,this,t),this.check()}calculateW(){return hn(this,this),this.check()}conjugate(){return pn(this,this),this.check()}invert(){return ln(this,this),this.check()}lerp(t,n,r){return r===void 0?this.lerp(this,t,n):(Mn(this,t,n,r),this.check())}multiplyRight(t){return jt(this,this,t),this.check()}multiplyLeft(t){return jt(this,t,this),this.check()}normalize(){let t=this.len(),n=t>0?1/t:0;return this[0]=this[0]*n,this[1]=this[1]*n,this[2]=this[2]*n,this[3]=this[3]*n,t===0&&(this[3]=1),this.check()}rotateX(t){return cn(this,this,t),this.check()}rotateY(t){return an(this,this,t),this.check()}rotateZ(t){return fn(this,this,t),this.check()}scale(t){return xn(this,this,t),this.check()}slerp(t,n,r){let s,i,o;switch(arguments.length){case 1:({start:s=Wr,target:i,ratio:o}=t);break;case 2:s=this,i=t,o=n;break;default:s=t,i=n,o=r}return et(this,s,i,o),this.check()}transformVector4(t,n=new W){return nn(n,t,this),Y(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,n){return this.setAxisAngle(t,n)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};function St(e){let t=e.lights||e.extensions?.KHR_lights_punctual?.lights;if(!t||!Array.isArray(t)||t.length===0)return[];let n=[];for(let r of e.nodes||[]){let s=r.light??r.extensions?.KHR_lights_punctual?.light;if(typeof s!="number")continue;let i=t[s];if(!i)continue;let o=i.color||[1,1,1],c=i.intensity??1,a=i.range;switch(i.type){case"directional":n.push(Hr(r,o,c));break;case"point":n.push(En(r,o,c,a));break;case"spot":n.push(En(r,o,c,a));break;default:break}}return n}function En(e,t,n,r){let s=jr(e),i=[1,0,0];return r!==void 0&&r>0&&(i=[1,0,1/(r*r)]),{type:"point",position:s,color:t,intensity:n,attenuation:i}}function Hr(e,t,n){return{type:"directional",direction:Xr(e),color:t,intensity:n}}function jr(e){return e.matrix?new C(e.matrix).transformAsPoint([0,0,0]):e.translation?[...e.translation]:[0,0,0]}function Xr(e){return e.matrix?new C(e.matrix).transformDirection([0,0,-1]):e.rotation?new C().fromQuaternion(e.rotation).transformDirection([0,0,-1]):[0,0,-1]}var H=z(at(),1);var D;(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(D||(D={}));function wn(e){switch(e){case D.POINTS:return"point-list";case D.LINES:return"line-list";case D.LINE_STRIP:return"line-strip";case D.TRIANGLES:return"triangle-list";case D.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(e))}}var Nn=z($(),1),ut=z(un(),1),Nt=z(at(),1),Kr=`
|
|
8
|
+
struct VertexInputs {
|
|
9
|
+
@location(0) positions: vec3f,
|
|
10
|
+
#ifdef HAS_NORMALS
|
|
11
|
+
@location(1) normals: vec3f,
|
|
12
|
+
#endif
|
|
13
|
+
#ifdef HAS_TANGENTS
|
|
14
|
+
@location(2) TANGENT: vec4f,
|
|
15
|
+
#endif
|
|
16
|
+
#ifdef HAS_UV
|
|
17
|
+
@location(3) texCoords: vec2f,
|
|
18
|
+
#endif
|
|
19
|
+
#ifdef HAS_SKIN
|
|
20
|
+
@location(4) JOINTS_0: vec4u,
|
|
21
|
+
@location(5) WEIGHTS_0: vec4f,
|
|
22
|
+
#endif
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
struct FragmentInputs {
|
|
26
|
+
@builtin(position) position: vec4f,
|
|
27
|
+
@location(0) pbrPosition: vec3f,
|
|
28
|
+
@location(1) pbrUV: vec2f,
|
|
29
|
+
@location(2) pbrNormal: vec3f,
|
|
30
|
+
#ifdef HAS_TANGENTS
|
|
31
|
+
@location(3) pbrTangent: vec4f,
|
|
32
|
+
#endif
|
|
33
|
+
};
|
|
22
34
|
|
|
23
35
|
@vertex
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
|
|
37
|
+
var outputs: FragmentInputs;
|
|
38
|
+
var position = vec4f(inputs.positions, 1.0);
|
|
39
|
+
var normal = vec3f(0.0, 0.0, 1.0);
|
|
40
|
+
var tangent = vec4f(1.0, 0.0, 0.0, 1.0);
|
|
41
|
+
var uv = vec2f(0.0, 0.0);
|
|
42
|
+
|
|
43
|
+
#ifdef HAS_NORMALS
|
|
44
|
+
normal = inputs.normals;
|
|
45
|
+
#endif
|
|
46
|
+
#ifdef HAS_UV
|
|
47
|
+
uv = inputs.texCoords;
|
|
48
|
+
#endif
|
|
49
|
+
#ifdef HAS_TANGENTS
|
|
50
|
+
tangent = inputs.TANGENT;
|
|
51
|
+
#endif
|
|
52
|
+
#ifdef HAS_SKIN
|
|
53
|
+
let skinMatrix = getSkinMatrix(inputs.WEIGHTS_0, inputs.JOINTS_0);
|
|
54
|
+
position = skinMatrix * position;
|
|
55
|
+
normal = normalize((skinMatrix * vec4f(normal, 0.0)).xyz);
|
|
56
|
+
#ifdef HAS_TANGENTS
|
|
57
|
+
tangent = vec4f(normalize((skinMatrix * vec4f(tangent.xyz, 0.0)).xyz), tangent.w);
|
|
58
|
+
#endif
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
let worldPosition = pbrProjection.modelMatrix * position;
|
|
62
|
+
|
|
63
|
+
#ifdef HAS_NORMALS
|
|
64
|
+
normal = normalize((pbrProjection.normalMatrix * vec4f(normal, 0.0)).xyz);
|
|
65
|
+
#endif
|
|
66
|
+
#ifdef HAS_TANGENTS
|
|
67
|
+
let worldTangent = normalize((pbrProjection.modelMatrix * vec4f(tangent.xyz, 0.0)).xyz);
|
|
68
|
+
outputs.pbrTangent = vec4f(worldTangent, tangent.w);
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
outputs.position = pbrProjection.modelViewProjectionMatrix * position;
|
|
72
|
+
outputs.pbrPosition = worldPosition.xyz / worldPosition.w;
|
|
73
|
+
outputs.pbrUV = uv;
|
|
74
|
+
outputs.pbrNormal = normal;
|
|
75
|
+
return outputs;
|
|
76
|
+
}
|
|
44
77
|
|
|
45
78
|
@fragment
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
79
|
+
fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
80
|
+
fragmentInputs.pbr_vPosition = inputs.pbrPosition;
|
|
81
|
+
fragmentInputs.pbr_vUV = inputs.pbrUV;
|
|
82
|
+
fragmentInputs.pbr_vNormal = inputs.pbrNormal;
|
|
83
|
+
#ifdef HAS_TANGENTS
|
|
84
|
+
let tangent = normalize(inputs.pbrTangent.xyz);
|
|
85
|
+
let bitangent = normalize(cross(inputs.pbrNormal, tangent)) * inputs.pbrTangent.w;
|
|
86
|
+
fragmentInputs.pbr_vTBN = mat3x3f(tangent, bitangent, inputs.pbrNormal);
|
|
87
|
+
#endif
|
|
88
|
+
return pbr_filterColor(vec4f(1.0));
|
|
89
|
+
}
|
|
90
|
+
`,Jr=`#version 300 es
|
|
53
91
|
|
|
54
92
|
// in vec4 POSITION;
|
|
55
93
|
in vec4 positions;
|
|
@@ -68,6 +106,11 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
68
106
|
in vec2 texCoords;
|
|
69
107
|
#endif
|
|
70
108
|
|
|
109
|
+
#ifdef HAS_SKIN
|
|
110
|
+
in uvec4 JOINTS_0;
|
|
111
|
+
in vec4 WEIGHTS_0;
|
|
112
|
+
#endif
|
|
113
|
+
|
|
71
114
|
void main(void) {
|
|
72
115
|
vec4 _NORMAL = vec4(0.);
|
|
73
116
|
vec4 _TANGENT = vec4(0.);
|
|
@@ -85,16 +128,25 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
85
128
|
_TEXCOORD_0 = texCoords;
|
|
86
129
|
#endif
|
|
87
130
|
|
|
88
|
-
|
|
89
|
-
|
|
131
|
+
vec4 pos = positions;
|
|
132
|
+
|
|
133
|
+
#ifdef HAS_SKIN
|
|
134
|
+
mat4 skinMat = getSkinMatrix(WEIGHTS_0, JOINTS_0);
|
|
135
|
+
pos = skinMat * pos;
|
|
136
|
+
_NORMAL = skinMat * _NORMAL;
|
|
137
|
+
_TANGENT = vec4((skinMat * vec4(_TANGENT.xyz, 0.)).xyz, _TANGENT.w);
|
|
138
|
+
#endif
|
|
139
|
+
|
|
140
|
+
pbr_setPositionNormalTangentUV(pos, _NORMAL, _TANGENT, _TEXCOORD_0);
|
|
141
|
+
gl_Position = pbrProjection.modelViewProjectionMatrix * pos;
|
|
90
142
|
}
|
|
91
|
-
`,
|
|
143
|
+
`,Zr=`#version 300 es
|
|
92
144
|
out vec4 fragmentColor;
|
|
93
145
|
|
|
94
146
|
void main(void) {
|
|
95
147
|
vec3 pos = pbr_vPosition;
|
|
96
148
|
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
97
149
|
}
|
|
98
|
-
`;function
|
|
150
|
+
`;function Ln(e,t){let{id:n,geometry:r,parsedPPBRMaterial:s,vertexCount:i,modelOptions:o={}}=t;Nn.log.info(4,"createGLTFModel defines: ",s.defines)();let c=[],a={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},f={id:n,source:Kr,vs:Jr,fs:Zr,geometry:r,topology:r.topology,vertexCount:i,modules:[ut.pbrMaterial,ut.skin],...o,defines:{...s.defines,...o.defines},parameters:{...a,...s.parameters,...o.parameters}},h=new Nt.Model(e,f),{camera:l,...p}={...s.uniforms,...o.uniforms,...s.bindings,...o.bindings};return h.shaderInputs.setProps({pbrMaterial:p,pbrProjection:{camera:l}}),new Nt.ModelNode({managedResources:c,model:h})}var Qr={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:void 0,lights:!0,useTangents:!1};function Rn(e,t,n={}){let r={...Qr,...n},s=new Map;t.meshes.forEach((a,f)=>{let h=es(e,a,r);s.set(a.id,h)});let i=new Map,o=new Map;return t.nodes.forEach((a,f)=>{let h=ts(e,a,r);i.set(f,h),o.set(a.id,h)}),t.nodes.forEach((a,f)=>{if(i.get(f).add((a.children??[]).map(({id:h})=>{let l=o.get(h);if(!l)throw new Error(`Cannot find child ${h} of node ${f}`);return l})),a.mesh){let h=s.get(a.mesh.id);if(!h)throw new Error(`Cannot find mesh child ${a.mesh.id} of node ${f}`);i.get(f).add(h)}}),{scenes:t.scenes.map(a=>{let f=(a.nodes||[]).map(({id:h})=>{let l=o.get(h);if(!l)throw new Error(`Cannot find child ${h} of scene ${a.name||a.id}`);return l});return new H.GroupNode({id:a.name||a.id,children:f})}),gltfMeshIdToNodeMap:s,gltfNodeIdToNodeMap:o,gltfNodeIndexToNodeMap:i}}function ts(e,t,n){return new H.GroupNode({id:t.name||t.id,children:[],matrix:t.matrix,position:t.translation,rotation:t.rotation,scale:t.scale})}function es(e,t,n){let s=(t.primitives||[]).map((o,c)=>ns(e,o,c,t,n));return new H.GroupNode({id:t.name||t.id,children:s})}function ns(e,t,n,r,s){let i=t.name||`${r.name||r.id}-primitive-${n}`,o=wn(t.mode||4),c=t.indices?t.indices.count:rs(t.attributes),a=On(i,t,o),f=dt(e,t.material,a.attributes,s),h=Ln(e,{id:i,geometry:On(i,t,o),parsedPPBRMaterial:f,modelOptions:s.modelOptions,vertexCount:c});return h.bounds=[t.attributes.POSITION.min,t.attributes.POSITION.max],h}function rs(e){throw new Error("getVertexCount not implemented")}function On(e,t,n){let r={};for(let[s,i]of Object.entries(t.attributes)){let{components:o,size:c,value:a}=i;r[s]={size:c??o,value:a}}return new H.Geometry({id:e,topology:n,indices:t.indices.value,attributes:r})}var Pn=z($(),1);var Kt=z($(),1);function Lt(e,t,n){switch(t){case"translation":return e.setPosition(n).updateMatrix();case"rotation":return e.setRotation(n).updateMatrix();case"scale":return e.setScale(n).updateMatrix();default:return Kt.log.warn(`Bad animation path ${t}`)(),null}}function In(e,{input:t,interpolation:n,output:r},s,i){let o=t[t.length-1],c=e%o,a=t.findIndex(p=>p>=c),f=Math.max(0,a-1),h=t[f],l=t[a];switch(n){case"STEP":os(s,i,r[f]);break;case"LINEAR":if(l>h){let p=(c-h)/(l-h);ss(s,i,r[f],r[a],p)}break;case"CUBICSPLINE":if(l>h){let p=(c-h)/(l-h),m=l-h,x=r[3*f+1],d=r[3*f+2],M=r[3*a+0],E=r[3*a+1];is(s,i,{p0:x,outTangent0:d,inTangent1:M,p1:E,tDiff:m,ratio:p})}break;default:Kt.log.warn(`Interpolation ${n} not supported`)();break}}function ss(e,t,n,r,s){if(t==="rotation")Lt(e,t,new nt().slerp({start:n,target:r,ratio:s}));else{let i=[];for(let o=0;o<n.length;o++)i[o]=s*r[o]+(1-s)*n[o];Lt(e,t,i)}}function is(e,t,{p0:n,outTangent0:r,inTangent1:s,p1:i,tDiff:o,ratio:c}){let a=[];for(let f=0;f<n.length;f++){let h=r[f]*o,l=s[f]*o;a[f]=(2*Math.pow(c,3)-3*Math.pow(c,2)+1)*n[f]+(Math.pow(c,3)-2*Math.pow(c,2)+c)*h+(-2*Math.pow(c,3)+3*Math.pow(c,2))*i[f]+(Math.pow(c,3)-Math.pow(c,2))*l}Lt(e,t,a)}function os(e,t,n){Lt(e,t,n)}var Jt=class{animation;gltfNodeIdToNodeMap;startTime=0;playing=!0;speed=1;constructor(t){this.animation=t.animation,this.gltfNodeIdToNodeMap=t.gltfNodeIdToNodeMap,this.animation.name||="unnamed",Object.assign(this,t)}setTime(t){if(!this.playing)return;let r=(t/1e3-this.startTime)*this.speed;this.animation.channels.forEach(({sampler:s,targetNodeId:i,path:o})=>{let c=this.gltfNodeIdToNodeMap.get(i);if(!c)throw new Error(`Cannot find animation target node ${i}`);In(r,s,c,o)})}},j=class{animations;constructor(t){this.animations=t.animations.map((n,r)=>{let s=n.name||`Animation-${r}`;return new Jt({gltfNodeIdToNodeMap:t.gltfNodeIdToNodeMap,animation:{name:s,channels:n.channels}})})}animate(t){Pn.log.warn("GLTFAnimator#animate is deprecated. Use GLTFAnimator#setTime instead")(),this.setTime(t)}setTime(t){this.animations.forEach(n=>n.setTime(t))}getAnimations(){return this.animations}};var cs={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},as={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function Zt(e){let t=as[e.componentType],n=cs[e.type],r=n*e.count,{buffer:s,byteOffset:i=0}=e.bufferView?.data??{};return{typedArray:new t(s,i+(e.byteOffset||0),r),components:n}}function _n(e){let t=e.animations||[],n=new Map,r=new Map;return t.map((s,i)=>{let o=s.name||`Animation-${i}`,c=s.samplers.map(({input:f,interpolation:h="LINEAR",output:l})=>({input:fs(e.accessors[f],n),interpolation:h,output:hs(e.accessors[l],r)})),a=s.channels.map(({sampler:f,target:h})=>{let l=e.nodes[h.node??0];if(!l)throw new Error(`Cannot find animation target ${h.node}`);return{sampler:c[f],targetNodeId:l.id,path:h.path}});return{name:o,channels:a}})}function fs(e,t){if(t.has(e))return t.get(e);let{typedArray:n,components:r}=Zt(e);vn(r===1,"accessorToJsArray1D must have exactly 1 component");let s=Array.from(n);return t.set(e,s),s}function hs(e,t){if(t.has(e))return t.get(e);let{typedArray:n,components:r}=Zt(e);vn(r>1,"accessorToJsArray2D must have more than 1 component");let s=[];for(let i=0;i<n.length;i+=r)s.push(Array.from(n.slice(i,i+r)));return t.set(e,s),s}function vn(e,t){if(!e)throw new Error(t)}function bn(e,t,n){let{scenes:r,gltfMeshIdToNodeMap:s,gltfNodeIdToNodeMap:i,gltfNodeIndexToNodeMap:o}=Rn(e,t,n),c=_n(t),a=new j({animations:c,gltfNodeIdToNodeMap:i}),f=St(t);return{scenes:r,animator:a,lights:f,gltfMeshIdToNodeMap:s,gltfNodeIdToNodeMap:i,gltfNodeIndexToNodeMap:o,gltf:t}}return Vn(rt);})();
|
|
99
151
|
return __exports__;
|
|
100
152
|
});
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
/** Parsed glTF animation definition. */
|
|
2
2
|
export type GLTFAnimation = {
|
|
3
|
+
/** Application-visible animation name. */
|
|
3
4
|
name: string;
|
|
5
|
+
/** Channels that drive individual node properties. */
|
|
4
6
|
channels: GLTFAnimationChannel[];
|
|
5
7
|
};
|
|
8
|
+
/** Supported glTF animation target paths. */
|
|
9
|
+
export type GLTFAnimationPath = 'translation' | 'rotation' | 'scale' | 'weights';
|
|
10
|
+
/** Parsed glTF animation channel. */
|
|
6
11
|
export type GLTFAnimationChannel = {
|
|
7
|
-
|
|
12
|
+
/** Node property written by this channel. */
|
|
13
|
+
path: GLTFAnimationPath;
|
|
14
|
+
/** Time/value sampler used to evaluate the channel. */
|
|
8
15
|
sampler: GLTFAnimationSampler;
|
|
9
|
-
|
|
16
|
+
/** Target node identifier in the generated scenegraph. */
|
|
17
|
+
targetNodeId: string;
|
|
10
18
|
};
|
|
19
|
+
/** Parsed glTF animation sampler. */
|
|
11
20
|
export type GLTFAnimationSampler = {
|
|
21
|
+
/** Keyframe times in seconds. */
|
|
12
22
|
input: number[];
|
|
23
|
+
/** glTF interpolation mode. */
|
|
13
24
|
interpolation: string;
|
|
14
|
-
|
|
25
|
+
/** Keyframe values, already expanded into JS arrays. */
|
|
26
|
+
output: number[][];
|
|
15
27
|
};
|
|
16
28
|
//# sourceMappingURL=animations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/animations.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/animations.ts"],"names":[],"mappings":"AAIA,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjF,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG;IACjC,6CAA6C;IAC7C,IAAI,EAAE,iBAAiB,CAAC;IACxB,uDAAuD;IACvD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { GLTFAnimationPath, GLTFAnimationSampler } from "./animations.js";
|
|
2
|
+
import { GroupNode } from '@luma.gl/engine';
|
|
3
|
+
/** Evaluates a glTF animation sampler at the supplied time and applies the result to a node. */
|
|
4
|
+
export declare function interpolate(time: number, { input, interpolation, output }: GLTFAnimationSampler, target: GroupNode, path: GLTFAnimationPath): void;
|
|
4
5
|
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,wBAAqB;AACrE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAwB1C,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAC,EAAE,oBAAoB,EACpD,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,iBAAiB,QAyCxB"}
|
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
import { log } from '@luma.gl/core';
|
|
2
2
|
import { Quaternion } from '@math.gl/core';
|
|
3
|
-
|
|
3
|
+
/** Applies an evaluated animation value to a scenegraph node. */
|
|
4
|
+
function updateTargetPath(target, path, newValue) {
|
|
5
|
+
switch (path) {
|
|
6
|
+
case 'translation':
|
|
7
|
+
return target.setPosition(newValue).updateMatrix();
|
|
8
|
+
case 'rotation':
|
|
9
|
+
return target.setRotation(newValue).updateMatrix();
|
|
10
|
+
case 'scale':
|
|
11
|
+
return target.setScale(newValue).updateMatrix();
|
|
12
|
+
default:
|
|
13
|
+
log.warn(`Bad animation path ${path}`)();
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Evaluates a glTF animation sampler at the supplied time and applies the result to a node. */
|
|
4
18
|
export function interpolate(time, { input, interpolation, output }, target, path) {
|
|
5
19
|
const maxTime = input[input.length - 1];
|
|
6
20
|
const animationTime = time % maxTime;
|
|
7
21
|
const nextIndex = input.findIndex(t => t >= animationTime);
|
|
8
22
|
const previousIndex = Math.max(0, nextIndex - 1);
|
|
9
|
-
if (!Array.isArray(target[path])) {
|
|
10
|
-
switch (path) {
|
|
11
|
-
case 'translation':
|
|
12
|
-
target[path] = [0, 0, 0];
|
|
13
|
-
break;
|
|
14
|
-
case 'rotation':
|
|
15
|
-
target[path] = [0, 0, 0, 1];
|
|
16
|
-
break;
|
|
17
|
-
case 'scale':
|
|
18
|
-
target[path] = [1, 1, 1];
|
|
19
|
-
break;
|
|
20
|
-
default:
|
|
21
|
-
log.warn(`Bad animation path ${path}`)();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// assert(target[path].length === output[previousIndex].length);
|
|
25
23
|
const previousTime = input[previousIndex];
|
|
26
24
|
const nextTime = input[nextIndex];
|
|
27
25
|
switch (interpolation) {
|
|
@@ -50,45 +48,38 @@ export function interpolate(time, { input, interpolation, output }, target, path
|
|
|
50
48
|
break;
|
|
51
49
|
}
|
|
52
50
|
}
|
|
51
|
+
/** Applies linear interpolation between two keyframes. */
|
|
53
52
|
function linearInterpolate(target, path, start, stop, ratio) {
|
|
54
|
-
if (!target[path]) {
|
|
55
|
-
throw new Error();
|
|
56
|
-
}
|
|
57
53
|
if (path === 'rotation') {
|
|
58
54
|
// SLERP when path is rotation
|
|
59
|
-
|
|
60
|
-
for (let i = 0; i < scratchQuaternion.length; i++) {
|
|
61
|
-
target[path][i] = scratchQuaternion[i];
|
|
62
|
-
}
|
|
55
|
+
updateTargetPath(target, path, new Quaternion().slerp({ start, target: stop, ratio }));
|
|
63
56
|
}
|
|
64
57
|
else {
|
|
65
58
|
// regular interpolation
|
|
59
|
+
const newVal = [];
|
|
66
60
|
for (let i = 0; i < start.length; i++) {
|
|
67
|
-
|
|
61
|
+
newVal[i] = ratio * stop[i] + (1 - ratio) * start[i];
|
|
68
62
|
}
|
|
63
|
+
updateTargetPath(target, path, newVal);
|
|
69
64
|
}
|
|
70
65
|
}
|
|
66
|
+
/** Applies glTF cubic spline interpolation between two keyframes. */
|
|
71
67
|
function cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio: t }) {
|
|
72
|
-
if (!target[path]) {
|
|
73
|
-
throw new Error();
|
|
74
|
-
}
|
|
75
68
|
// TODO: Quaternion might need normalization
|
|
76
|
-
|
|
69
|
+
const newVal = [];
|
|
70
|
+
for (let i = 0; i < p0.length; i++) {
|
|
77
71
|
const m0 = outTangent0[i] * tDiff;
|
|
78
72
|
const m1 = inTangent1[i] * tDiff;
|
|
79
|
-
|
|
73
|
+
newVal[i] =
|
|
80
74
|
(2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] +
|
|
81
75
|
(Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 +
|
|
82
76
|
(-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] +
|
|
83
77
|
(Math.pow(t, 3) - Math.pow(t, 2)) * m1;
|
|
84
78
|
}
|
|
79
|
+
updateTargetPath(target, path, newVal);
|
|
85
80
|
}
|
|
81
|
+
/** Applies step interpolation by copying the current keyframe value. */
|
|
86
82
|
function stepInterpolate(target, path, value) {
|
|
87
|
-
|
|
88
|
-
throw new Error();
|
|
89
|
-
}
|
|
90
|
-
for (let i = 0; i < value.length; i++) {
|
|
91
|
-
target[path][i] = value[i];
|
|
92
|
-
}
|
|
83
|
+
updateTargetPath(target, path, value);
|
|
93
84
|
}
|
|
94
85
|
//# sourceMappingURL=interpolate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAIzC,iEAAiE;AACjE,SAAS,gBAAgB,CACvB,MAAiB,EACjB,IAAuB,EACvB,QAAkB;IAElB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;QAErD,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;QAErD,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;QAElD;YACE,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAuB,EACpD,MAAiB,EACjB,IAAuB;IAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAElC,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACrD,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,CAAC,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;gBACzE,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;YACnF,CAAC;YACD,MAAM;QAER,KAAK,aAAa;YAChB,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,CAAC,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;gBACzE,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC;gBAEtC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;gBAErC,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YACxF,CAAC;YACD,MAAM;QAER;YACE,GAAG,CAAC,IAAI,CAAC,iBAAiB,aAAa,gBAAgB,CAAC,EAAE,CAAC;YAC3D,MAAM;IACV,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,iBAAiB,CACxB,MAAiB,EACjB,IAAuB,EACvB,KAAe,EACf,IAAc,EACd,KAAa;IAEb,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,8BAA8B;QAC9B,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,sBAAsB,CAC7B,MAAiB,EACjB,IAAuB,EACvB,EACE,EAAE,EACF,WAAW,EACX,UAAU,EACV,EAAE,EACF,KAAK,EACL,KAAK,EAAE,CAAC,EAQT;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;gBAC9C,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3C,CAAC;IACD,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,wEAAwE;AACxE,SAAS,eAAe,CAAC,MAAiB,EAAE,IAAuB,EAAE,KAAe;IAClF,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { Device } from '@luma.gl/core';
|
|
2
2
|
import { Geometry, ModelNode, type ModelProps } from '@luma.gl/engine';
|
|
3
3
|
import { type ParsedPBRMaterial } from "../pbr/pbr-material.js";
|
|
4
|
+
/** Options used to instantiate a `ModelNode` for one glTF primitive. */
|
|
4
5
|
export type CreateGLTFModelOptions = {
|
|
6
|
+
/** Optional id assigned to the generated model. */
|
|
5
7
|
id?: string;
|
|
8
|
+
/** Vertex count override for non-indexed primitives. */
|
|
6
9
|
vertexCount?: number;
|
|
10
|
+
/** Geometry converted from the glTF primitive. */
|
|
7
11
|
geometry: Geometry;
|
|
12
|
+
/** Parsed PBR material state for the primitive. */
|
|
8
13
|
parsedPPBRMaterial: ParsedPBRMaterial;
|
|
14
|
+
/** Additional model props merged into the generated model. */
|
|
9
15
|
modelOptions?: Partial<ModelProps>;
|
|
10
16
|
};
|
|
11
17
|
/** Creates a luma.gl Model from GLTF data*/
|