UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

47 lines (46 loc) 1.5 kB
"use strict"; import { Vector4 } from "three"; import { QuadPrimitive } from "../QuadPrimitive"; const _v4 = new Vector4(); const STRIDE = 4; export const quadObjectFromPrimitives = (object, entities) => { const quadObject = object; const geometry = quadObject.geometry; if (!geometry) { return void 0; } const oldIndex = geometry.index; if (!oldIndex) { return void 0; } const oldIndexArray = [...oldIndex]; const entitiesCount = entities.length; const newIndices = new Array(entitiesCount * STRIDE); let i = 0; for (const primitive of entities) { _v4.fromArray(oldIndexArray, primitive.index() * STRIDE); _v4.toArray(newIndices, i * STRIDE); i++; } geometry.setIndex(newIndices); const primitiveAttributes = QuadPrimitive.attributes(object); if (primitiveAttributes) { const primitiveAttributeNames = Object.keys(primitiveAttributes); for (const primitiveAttributeName of primitiveAttributeNames) { const primitiveAttribute = primitiveAttributes[primitiveAttributeName]; const itemSize = primitiveAttribute.itemSize; const srcArray = primitiveAttribute.array; const newArray = new Array(entitiesCount * itemSize); let i2 = 0; for (const entity of entities) { const index = entity.index(); for (let k = 0; k < itemSize; k++) { newArray[i2 + k] = srcArray[index + k]; } i2++; } primitiveAttribute.array = newArray; } } return quadObject; };