UNPKG

polygonjs-engine

Version:

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

35 lines (29 loc) 1.12 kB
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; } }