UNPKG

lingo3d

Version:

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

42 lines 1.64 kB
import computeMergedPxVertices from "./computeMergedPxVertices"; import { physxPtr } from "../../pointers/physxPtr"; import cookConvexGeometry from "./cookConvexGeometry"; const pxGeometryCache = new Map(); export default (src, manager) => { if (pxGeometryCache.has(src)) return pxGeometryCache.get(src); const { PxBoundedData, Vector_PxU32, PxTriangleMeshDesc, getCooking, getInsertionCallback, PxTriangleMeshGeometry, destroy } = physxPtr[0]; const [pointVector, count, index] = computeMergedPxVertices(manager); if (!index) { pointVector.clear(); destroy(pointVector); return cookConvexGeometry(src, manager); } const { array } = index; const indexVector = new Vector_PxU32(); for (let i = 0; i < index.count; i++) indexVector.push_back(array[i]); const points = new PxBoundedData(); points.count = count; points.stride = 12; points.data = pointVector.data(); const triangles = new PxBoundedData(); triangles.count = indexVector.size() / 3; triangles.stride = 12; triangles.data = indexVector.data(); const desc = new PxTriangleMeshDesc(); desc.points = points; desc.triangles = triangles; const triangleMesh = getCooking().createTriangleMesh(desc, getInsertionCallback()); const pxGeometry = new PxTriangleMeshGeometry(triangleMesh); pointVector.clear(); destroy(pointVector); indexVector.clear(); destroy(indexVector); destroy(points); destroy(triangles); destroy(desc); pxGeometryCache.set(src, pxGeometry); return pxGeometry; }; //# sourceMappingURL=cookTrimeshGeometry.js.map