@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
44 lines (43 loc) • 1.45 kB
JavaScript
;
import { BaseSopOperation } from "./_Base";
import { InputCloneMode } from "../../../engine/poly/InputCloneMode";
import { MeshBVHHelper } from "../../../core/geometry/bvh/three-mesh-bvh";
export class BVHVisualizerSopOperation extends BaseSopOperation {
static type() {
return "BVHVisualizer";
}
cook(inputCoreGroups, params) {
const inputCoreGroup = inputCoreGroups[0];
const objects = inputCoreGroup.threejsObjects();
const newObjects = [];
for (let object of objects) {
newObjects.push(object);
object.traverse((childObject) => {
const mesh = childObject;
if (mesh.isMesh) {
const visualizer = new MeshBVHHelper(mesh, params.depth);
visualizer.opacity = params.opacity;
visualizer.depth = params.depth;
visualizer.displayEdges = params.displayEdges;
visualizer.displayParents = params.displayParents;
visualizer.update();
const parent = mesh.parent;
if (parent) {
parent.add(visualizer);
} else {
newObjects.push(visualizer);
}
mesh.geometry.drawRange.count = 0;
}
});
}
return this.createCoreGroupFromObjects(newObjects);
}
}
BVHVisualizerSopOperation.DEFAULT_PARAMS = {
depth: 0,
opacity: 0.2,
displayEdges: true,
displayParents: false
};
BVHVisualizerSopOperation.INPUT_CLONED_STATE = InputCloneMode.ALWAYS;