UNPKG

@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) 3.82 kB
import{aO as n,aP as t,aQ as e,av as o,F as s,aL as i,aj as r,aR as a,aS as c,aT as u,aU as f,aV as d,aW as l,aX as h,aY as p}from"./index-DFZFpUG-.esm.min.js";let m=null;function g(n){m=n}let x=null;function v(n){x=n}function M(n,t,e){return x?x(n,t,e):new s(n.buffer,n.byteOffset,t)}function w(n,t,e){const o=e.joints.length;if(void 0!==e.inverseBindMatrices){const i=r(n,t,e.inverseBindMatrices);return new s(i._data.buffer,i._data.byteOffset,16*o)}const i=new s(16*o);for(let n=0;n<o;n++){const t=16*n;i[t]=i[t+5]=i[t+10]=i[t+15]=1}return i}function I(n,t,e,o,s,r){const a=n.skins[e],c=a.joints,u=w(n,t,a),f=c.map(t=>i(n,t,s,r));return{jointNodes:c,inverseBindMatrices:u,jointWorldMatrices:f,meshWorldMatrix:o}}function j(i){const r=i.jointNodes.length,a=new s(16*r),c=n(i.meshWorldMatrix)??t(),u=e();for(let n=0;n<r;n++)o(u,0,c,0,i.jointWorldMatrices[n],0),o(a,16*n,u,0,i.inverseBindMatrices,16*n);return a}const b={LINEAR:u,STEP:c,CUBICSPLINE:a},k={translation:h,rotation:l,scale:d,weights:f};function _(e,o,s,a,c,f,g){if(!e.animations||0===e.animations.length)return null;let x=0;const v=[];for(const n of e.animations){const t=[];for(const s of n.samplers){const n=r(e,o,s.input),i=r(e,o,s.output),a=!0===e.accessors[s.input]?.normalized,c=!0===e.accessors[s.output]?.normalized;t.push({input:M(n._data,n._count,a),output:M(i._data,i._count*i._componentCount,c),interpolation:b[s.interpolation??"LINEAR"]??u})}const i=[];for(const t of n.channels){const n=t.target?.extensions?.KHR_animation_pointer?.pointer;if(n){if(!m)continue;const o=m(n,t,f,e,s);o&&(i.push(o),x++);continue}if(void 0===t.target.node)continue;const o=k[t.target.path];void 0!==o&&i.push({samplerIdx:t.sampler,nodeIdx:t.target.node,path:o})}let a=0;for(const n of t)if(n.input.length>0){const t=n.input[n.input.length-1];t>a&&(a=t)}v.push({name:n.name??"",channels:i,samplers:t,duration:a})}const I=e.nodes?.length??0,j=[];for(let n=0;n<I;n++){const t=e.nodes[n],o=t.translation??[0,0,0],s=t.rotation??[0,0,0,1],i=t.scale??[1,1,1];j.push({parentIdx:p(a,n),_matrix:t.matrix,tx:o[0],ty:o[1],tz:o[2],rx:s[0],ry:s[1],rz:s[2],rw:s[3],sx:i[0],sy:i[1],sz:i[2]})}const _=new Map;let B=0;for(let n=0;n<I;n++){const t=e.nodes[n];if(void 0===t.mesh)continue;const o=e.meshes[t.mesh],s=[];for(let n=0;n<o.primitives.length;n++)s.push(B++);_.set(n,s)}const N=[];for(let r=0;r<I;r++){const u=e.nodes[r];if(void 0===u.skin||!e.skins)continue;const f=_.get(r);if(!f)continue;const d=e.skins[u.skin],l=d.joints,h=w(e,o,d),p=i(e,r,a,c),m=n(p)??t();for(const n of f){const t=s[n],e=t?.skeleton;e&&N.push({jointNodes:l,inverseBindMatrices:h,invMeshWorld:m,boneTexture:e.boneTexture,boneCount:l.length,boneMatrices:e.boneMatrices,runtimeSkeleton:e})}}const T=[];for(let n=0;n<I;n++){const t=e.nodes[n];if(void 0===t.mesh)continue;const o=e.meshes[t.mesh];if(!o.primitives?.[0]?.targets?.length)continue;const i=_.get(n);if(i)for(const t of i){const e=s[t],o=e?.morphTargets;o&&T.push({nodeIdx:n,weightsBuffer:o.weightsBuffer,weights:o.weights,targetCount:o.count,runtimeMorphTargets:o})}}const W=f??[],y=new Set;for(const n of e.skins??[])for(const t of n.joints??[])y.add(t);for(let n=0;n<I;n++){if(void 0===e.nodes[n]?.skin)continue;let t=n;for(;t>=0&&!y.has(t);)y.add(t),t=p(a,t)}if(0===v.length||0===N.length&&0===T.length&&0===x&&!function(n,t,e){for(const o of n)for(const n of o.channels)if((n.path===h||n.path===l||n.path===d)&&n.nodeIdx>=0&&!e.has(n.nodeIdx)&&t[n.nodeIdx])return!0;return!1}(v,W,y))return null;return{clips:v,nodes:j,skeletons:N,morphBindings:T,nodeTargets:W,excludedNodeIndices:y,nodeNames:(e.nodes??[]).map(n=>n?.name),boneOverrides:g}}export{g as _installPointerHandlers,v as _installSamplerConverter,j as computeBoneTextureData,I as extractSkin,_ as parseAnimationData}; //# sourceMappingURL=gltf-animation-hYBmlaQq.esm.min.js.map