polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
35 lines (29 loc) • 1.12 kB
text/typescript
import {BaseSopOperation} from './_Base';
import {DefaultOperationParams} from '../_Base';
import {CoreGroup} from '../../../core/geometry/Group';
import {SubdivisionModifier} from '../../../modules/three/examples/jsm/modifiers/SubdivisionModifier';
import {BufferGeometry} from 'three/src/core/BufferGeometry';
import {Mesh} from 'three/src/objects/Mesh';
interface SubdivideSopParams extends DefaultOperationParams {
subdivisions: number;
}
export class SubdivideSopOperation extends BaseSopOperation {
static readonly DEFAULT_PARAMS: SubdivideSopParams = {
subdivisions: 1,
};
static type(): Readonly<'subdivide'> {
return 'subdivide';
}
cook(input_contents: CoreGroup[], params: SubdivideSopParams) {
const core_group = input_contents[0];
const modifier = new SubdivisionModifier(params.subdivisions);
for (let object of core_group.objects()) {
const geometry = (object as Mesh).geometry as BufferGeometry;
if (geometry) {
const subdivided_geometry = modifier.modify(geometry) as BufferGeometry;
(object as Mesh).geometry = subdivided_geometry;
}
}
return core_group;
}
}