UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

39 lines 1.57 kB
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