UNPKG

lingo3d

Version:

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

39 lines 1.56 kB
import * as BufferGeometryUtils from "three/examples/jsm/utils/BufferGeometryUtils"; import { physxPtr } from "../../pointers/physxPtr"; export default (manager) => { const { Vector_PxVec3 } = physxPtr[0]; const geometries = []; const loaded = "$loadedObject3d" in manager ? manager.$loadedObject3d : manager.object3d; loaded.updateMatrixWorld(); const { position, rotation } = manager.outerObject3d; loaded.traverse((c) => { if (!("geometry" in c)) return; const clone = c.geometry.clone(); clone.applyMatrix4(c.matrixWorld); clone.translate(-position.x, -position.y, -position.z); clone.rotateX(-rotation.x); clone.rotateY(-rotation.y); clone.rotateZ(-rotation.z); for (const key of Object.keys(clone.attributes)) key !== "position" && clone.deleteAttribute(key); clone.dispose(); geometries.push(clone); }); const geometry = BufferGeometryUtils.mergeBufferGeometries(geometries); geometry.dispose(); const buffer = geometry.attributes.position; const vertices = buffer.array; const vec3Vector = new Vector_PxVec3(buffer.count); for (let i = 0; i < buffer.count; i++) { const pxVec3 = vec3Vector.at(i); const offset = i * 3; pxVec3.set_x(vertices[offset]); pxVec3.set_y(vertices[offset + 1]); pxVec3.set_z(vertices[offset + 2]); } return [vec3Vector, buffer.count, geometry.index]; }; //# sourceMappingURL=computeMergedPxVertices.js.map