@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 1.82 kB
JavaScript
import{aj as n,T as t,a_ as o,a$ as s,F as i,c as e,b0 as c}from"./index-DFZFpUG-.esm.min.js";import{m as a}from"./mat4-multiply-5fY_prZ3.esm.min.js";function u(n){const t=[];for(const o of n?.children??[])o&&"object"==typeof o&&"material"in o&&t.push(o);return t}function r(n,t,o,e){const c=new i(16*e);for(let i=0;i<e;i++){const e=n?n[3*i]:0,a=n?n[3*i+1]:0,u=n?n[3*i+2]:0,r=t?t[4*i]:0,l=t?t[4*i+1]:0,f=t?t[4*i+2]:0,_=t?t[4*i+3]:1,d=o?o[3*i]:1,m=o?o[3*i+1]:1,p=o?o[3*i+2]:1;s(c,16*i,e,a,u,r,l,f,_,d,m,p)}return c}const l={id:"EXT_mesh_gpu_instancing",async applyAsset(s,i,e){const{_json:c,_binChunk:a,_nodeMap:l}=e;if(!l)return{};const _=c.nodes??[];for(let s=0;s<_.length;s++){const i=_[s]?.extensions?.EXT_mesh_gpu_instancing?.attributes;if(!i)continue;const d=l[s];if(!d)continue;const m=u(d);if(0===m.length)continue;const p=void 0!==i.TRANSLATION?n(c,a,i.TRANSLATION):null,T=void 0!==i.ROTATION?n(c,a,i.ROTATION):null,A=void 0!==i.SCALE?n(c,a,i.SCALE):null;let h=0;for(const n of[p,T,A])n&&(0===h?h=n._count:n._count!==h&&t(85,s));if(0===h)continue;const g=r(p?p._data:null,T?T._data:null,A?A._data:null,h),b=e._worldMatrixCache.get(s);for(const n of m)o(n,g,h),f(n,g,h,b)}return{}}};function f(n,t,o,s){const u=n._cpuPositions;if(!u||!s||0===o)return;const[r,l]=e(u);if(!isFinite(r[0]))return;const f=new i([r[0],r[1],r[2],l[0],r[1],r[2],r[0],l[1],r[2],l[0],l[1],r[2],r[0],r[1],l[2],l[0],r[1],l[2],r[0],l[1],l[2],l[0],l[1],l[2]]);let _=1/0,d=1/0,m=1/0,p=-1/0,T=-1/0,A=-1/0;const h=c(),g=h;for(let n=0;n<o;n++){for(let o=0;o<16;o++)g[o]=t[16*n+o];const o=a(s,h),[i,c]=e(f,o);i[0]<_&&(_=i[0]),i[1]<d&&(d=i[1]),i[2]<m&&(m=i[2]),c[0]>p&&(p=c[0]),c[1]>T&&(T=c[1]),c[2]>A&&(A=c[2])}n.boundMin=[_,d,m],n.boundMax=[p,T,A]}export{l as default};
//# sourceMappingURL=gltf-feature-gpu-instancing-44jzKo5_.esm.min.js.map