UNPKG

@polygonjs/polygonjs

Version:

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

41 lines (40 loc) 1.26 kB
"use strict"; import { BaseSopOperation } from "./_Base"; import { InputCloneMode } from "../../../engine/poly/InputCloneMode"; export class AttribAddMultSopOperation extends BaseSopOperation { static type() { return "attribAddMult"; } cook(inputCoreGroups, params) { const coreGroup = inputCoreGroups[0]; const attribNames = coreGroup.pointAttribNamesMatchingMask(params.name); for (let attribName of attribNames) { const geometries = coreGroup.geometries(); for (let geometry of geometries) { this._updateAttrib(attribName, geometry, params); } } return coreGroup; } _updateAttrib(attribName, geometry, params) { const attribute = geometry.getAttribute(attribName); if (attribute) { const values = attribute.array; const preAdd = params.preAdd; const mult = params.mult; const postAdd = params.postAdd; for (let i = 0; i < values.length; i++) { const value = values[i]; values[i] = (value + preAdd) * mult + postAdd; } attribute.needsUpdate = true; } } } AttribAddMultSopOperation.DEFAULT_PARAMS = { name: "", preAdd: 0, mult: 1, postAdd: 0 }; AttribAddMultSopOperation.INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;