@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
JavaScript
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