mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
39 lines • 1.57 kB
JavaScript
import { Mesh } from "three";
import { decreaseBVHComputing, increaseBVHComputing } from "../../../../states/useBVHComputingCount";
import Primitive from "../../Primitive";
import { bvhManagerMap } from "./bvhManagerMap";
import { acceleratedRaycast } from "./ExtensionUtilities";
import { GenerateMeshBVHWorker, geometryMeshMap } from "./GenerateMeshBVHWorker";
Mesh.prototype.raycast = acceleratedRaycast;
const bvhWorker = new GenerateMeshBVHWorker();
// const bvhWorker = {
// generate: async (geom: BufferGeometry) => {
// const geometry = geom.clone()
// geometry.applyMatrix4(geometryMeshMap.get(geom).matrixWorld)
// return new MeshBVH(geometry)
// }
// }
const computeBVHFromGeometries = async (geometries) => {
const result = [];
for (const geom of geometries)
result.push((geom.boundsTree = await bvhWorker.generate(geom)));
return result;
};
export default async (item) => {
increaseBVHComputing();
item.outerObject3d.updateMatrixWorld(true);
const geometries = [];
item.outerObject3d.traverse((c) => {
if (!c.geometry ||
(c === item.nativeObject3d && !(item instanceof Primitive)))
return;
geometries.push(c.geometry);
geometryMeshMap.set(c.geometry, c);
});
const bvhArray = await computeBVHFromGeometries(geometries);
for (const bvh of bvhArray)
bvhManagerMap.set(bvh, item);
decreaseBVHComputing();
return [bvhArray, geometries];
};
//# sourceMappingURL=computeBVH.js.map