loadGLTFMesh.92c8be7c.js 5.2 KB

12345678
  1. import{a as u,U as G,dU as F,b1 as R,k as T,b4 as h,fU as M,l0 as B,h8 as P,ab as D,t as U}from"./index.6c049565.js";import{e as I}from"./mat3f64.6d32a1d7.js";import{p as k,m as j,c as q,g as z}from"./meshFeatureSet.e448c389.js";import{T as V,i as N,c as O,x as _,u as K,L as Q,O as L,E as W}from"./BufferView.f5101c27.js";import{t as X,r as Y,o as Z,b as H,f as J,e as ee,n as te}from"./vec33.9bd40b84.js";import{a as re,m as oe,r as b,b as ne,h as se,t as E,c as ae,j as ie,d as ue,e as ce,k as le,i as fe,f as me,g as pe,l as de,o as xe}from"./DefaultMaterial_COLOR_GAMMA.54ecca40.js";import{_ as $e}from"./georeference.11d1c93a.js";import{E as A,D as C}from"./enums.2d9e6f64.js";import"./imageUtils.753f41b1.js";import"./earcut.afc1d357.js";import"./deduplicate.b87c02b8.js";import"./mat4f64.ff2a477c.js";import"./types.44c7402c.js";import"./quat.4f976512.js";import"./quatf64.4ae3e6f1.js";async function ze(e,t,n){const s=new re(ge(n)),r=(await oe(s,t,n,!0)).model,m=r.lods.shift(),c=new Map,l=new Map;r.textures.forEach((g,y)=>c.set(y,be(g))),r.materials.forEach((g,y)=>l.set(y,ve(g,c)));const i=he(m);for(const g of i.parts)we(i,g,l);const{position:d,normal:f,tangent:o,color:a,texCoord0:p}=i.vertexAttributes,$={position:d.typedBuffer,normal:u(f)?f.typedBuffer:null,tangent:u(o)?o.typedBuffer:null,uv:u(p)?p.typedBuffer:null,color:u(a)?a.typedBuffer:null},w=$e($,e,n);return{transform:w.transform,components:i.components,spatialReference:e.spatialReference,vertexAttributes:new k({position:w.vertexAttributes.position,normal:w.vertexAttributes.normal,tangent:w.vertexAttributes.tangent,color:$.color,uv:$.uv})}}function ge(e){const t=e==null?void 0:e.resolveFile;return t?{busy:!1,request:async(n,s,r)=>{const m=t(n);return(await G(m,{responseType:s==="image"?"image":s==="binary"?"array-buffer":"json",signal:u(r)?r.signal:null})).data}}:null}function v(e,t){if(U(e))return"-";const n=e.typedBuffer;return`${F(t,n.buffer,()=>t.size)}/${n.byteOffset}/${n.byteLength}`}function Te(e){return u(e)?e.toString():"-"}function he(e){let t=0;const n={color:!1,tangent:!1,normal:!1,texCoord0:!1},s=new Map,r=new Map,m=[];for(const c of e.parts){const{attributes:{position:l,normal:i,color:d,tangent:f,texCoord0:o}}=c,a=`
  2. ${v(l,s)}/
  3. ${v(i,s)}/
  4. ${v(d,s)}/
  5. ${v(f,s)}/
  6. ${v(o,s)}/
  7. ${Te(c.transform)}
  8. `;let p=!1;const $=F(r,a,()=>(p=!0,{start:t,length:l.count}));p&&(t+=l.count),i&&(n.normal=!0),d&&(n.color=!0),f&&(n.tangent=!0),o&&(n.texCoord0=!0),m.push({gltf:c,writeVertices:p,region:$})}return{vertexAttributes:{position:b(V,t),normal:n.normal?b(N,t):null,tangent:n.tangent?b(O,t):null,color:n.color?b(_,t):null,texCoord0:n.texCoord0?b(K,t):null},parts:m,components:[]}}function be(e){return new j({data:e.data,wrap:Ce(e.parameters.wrap)})}function ve(e,t){const n=new R(Re(e.color,e.opacity)),s=e.emissiveFactor?new R(Me(e.emissiveFactor)):null;return new q({color:n,colorTexture:T(h(e.textureColor,r=>t.get(r))),normalTexture:T(h(e.textureNormal,r=>t.get(r))),emissiveColor:s,emissiveTexture:T(h(e.textureEmissive,r=>t.get(r))),occlusionTexture:T(h(e.textureOcclusion,r=>t.get(r))),alphaMode:Ae(e.alphaMode),alphaCutoff:e.alphaCutoff,doubleSided:e.doubleSided,metallic:e.metallicFactor,roughness:e.roughnessFactor,metallicRoughnessTexture:T(h(e.textureMetallicRoughness,r=>t.get(r))),colorTextureTransform:e.colorTextureTransform,normalTextureTransform:e.normalTextureTransform,occlusionTextureTransform:e.occlusionTextureTransform,emissiveTextureTransform:e.emissiveTextureTransform,metallicRoughnessTextureTransform:e.metallicRoughnessTextureTransform})}function we(e,t,n){t.writeVertices&&ye(e,t);const s=t.gltf,r=Ee(s.indices||s.attributes.position.count,s.primitiveType),m=t.region.start;if(m)for(let c=0;c<r.length;c++)r[c]+=m;e.components.push(new z({faces:r,material:n.get(s.material),trustSourceNormals:!0}))}function ye(e,t){const{position:n,normal:s,tangent:r,color:m,texCoord0:c}=e.vertexAttributes,l=t.region.start,{attributes:i,transform:d}=t.gltf,f=i.position.count;if(X(n.slice(l,f),i.position,d),u(i.normal)&&u(s)){const o=M(I(),d),a=s.slice(l,f);Y(a,i.normal,o),B(o)&&Z(a,a)}else u(s)&&H(s,0,0,1,{dstIndex:l,count:f});if(u(i.tangent)&&u(r)){const o=M(I(),d),a=r.slice(l,f);ne(a,i.tangent,o),B(o)&&se(a,a)}else u(r)&&E(r,0,0,1,1,{dstIndex:l,count:f});if(u(i.texCoord0)&&u(c)?ae(c.slice(l,f),i.texCoord0):u(c)&&ie(c,0,0,{dstIndex:l,count:f}),u(i.color)&&u(m)){const o=i.color,a=m.slice(l,f);if(o.elementCount===4)o instanceof O?ue(a,o,255):o instanceof _?ce(a,o):o instanceof Q&&le(a,o,8);else{E(a,255,255,255,255);const p=L.fromTypedArray(a.typedBuffer,a.typedBufferStride);o instanceof N?J(p,o,255):o instanceof L?ee(p,o):o instanceof W&&te(p,o,8)}}else u(m)&&E(m.slice(l,f),255,255,255,255)}function Ee(e,t){switch(t){case A.TRIANGLES:return pe(e,de);case A.TRIANGLE_STRIP:return me(e);case A.TRIANGLE_FAN:return fe(e)}}function Ae(e){switch(e){case"OPAQUE":return"opaque";case"MASK":return"mask";case"BLEND":return"blend"}}function Ce(e){return{horizontal:S(e.s),vertical:S(e.t)}}function S(e){switch(e){case C.CLAMP_TO_EDGE:return"clamp";case C.MIRRORED_REPEAT:return"mirror";case C.REPEAT:return"repeat"}}function x(e){return e**(1/xe)*255}function Re(e,t){return P(x(e[0]),x(e[1]),x(e[2]),t)}function Me(e){return D(x(e[0]),x(e[1]),x(e[2]))}export{ze as loadGLTFMesh};