@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
39 lines (34 loc) • 1.09 kB
text/typescript
import {BufferAttribute, BufferGeometry, Vector3} from 'three';
import {isString} from '../../Type';
import {BaseCorePoint} from '../entities/point/CorePoint';
export function addAttributesFromPoint(geometry: BufferGeometry, point: BaseCorePoint, attributeNames: string[]) {
const pointsCount = geometry.getAttribute('position').count;
for (const attributeName of attributeNames) {
addAttributeFromPoint(geometry, point, attributeName, pointsCount);
}
}
function addAttributeFromPoint(
geometry: BufferGeometry,
point: BaseCorePoint,
attributeName: string,
pointsCount: number
) {
const value = point.attribValue(attributeName);
if (!isString(value)) {
const size = point.attribSize(attributeName);
let values = new Array(pointsCount * size);
switch (size) {
case 1: {
values.fill(value);
break;
}
default: {
for (let i = 0; i < pointsCount; i++) {
(value as Vector3).toArray(values, i * size);
}
}
}
const attribute = new BufferAttribute(new Float32Array(values), size);
geometry.setAttribute(attributeName, attribute);
}
}