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.

40 lines (37 loc) 1.74 kB
import { F as F32, d as createMappedBuffer, B as BU, ai as U32, j as U8 } from './index-By0tcgYN.esm.js'; const MORPH_WEIGHTS_HEADER_BYTES = 16; const MORPH_FLOATS_PER_VERTEX = 6; function createMorphTargets(engine, targets, vertexCount, morphWeights) { const targetCount = targets.length; const deltaData = new F32(targetCount * vertexCount * MORPH_FLOATS_PER_VERTEX); for (let t = 0; t < targetCount; t++) { const tgt = targets[t]; const tBase = t * vertexCount * MORPH_FLOATS_PER_VERTEX; for (let v = 0; v < vertexCount; v++) { const o = tBase + v * MORPH_FLOATS_PER_VERTEX; deltaData[o] = tgt.positions[v * 3]; deltaData[o + 1] = tgt.positions[v * 3 + 1]; deltaData[o + 2] = tgt.positions[v * 3 + 2]; if (tgt.normals) { deltaData[o + 3] = tgt.normals[v * 3]; deltaData[o + 4] = tgt.normals[v * 3 + 1]; deltaData[o + 5] = tgt.normals[v * 3 + 2]; } } } const deltasBuffer = createMappedBuffer(engine, deltaData, BU.STORAGE); const headerBuf = new ArrayBuffer(MORPH_WEIGHTS_HEADER_BYTES + targetCount * 4); const headerU32 = new U32(headerBuf, 0, 2); headerU32[0] = targetCount; headerU32[1] = vertexCount; const headerWeights = new F32(headerBuf, MORPH_WEIGHTS_HEADER_BYTES, targetCount); for (let i = 0; i < targetCount; i++) { headerWeights[i] = morphWeights?.[i] ?? 0; } const weightsBuffer = createMappedBuffer(engine, new U8(headerBuf), BU.STORAGE); const weights = new F32(targetCount); weights.set(headerWeights); return { deltasBuffer, count: targetCount, weightsBuffer, targets, weights }; } export { MORPH_WEIGHTS_HEADER_BYTES, createMorphTargets }; //# sourceMappingURL=create-morph-targets-DN5cvIg1.esm.js.map