lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
39 lines • 1.42 kB
JavaScript
import { physxPtr } from "../../pointers/physxPtr";
export default (manager) => {
const { Vector_PxVec3 } = physxPtr[0];
let vertexCount = 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);
clone.dispose();
geometries.push(clone);
vertexCount += clone.attributes.position.count;
});
const vec3Vector = new Vector_PxVec3(vertexCount);
let iTotal = 0;
for (const geometry of geometries) {
const buffer = geometry.attributes.position;
const vertices = buffer.array;
for (let i = 0; i < buffer.count; i++) {
const pxVec3 = vec3Vector.at(iTotal++);
const offset = i * 3;
pxVec3.set_x(vertices[offset]);
pxVec3.set_y(vertices[offset + 1]);
pxVec3.set_z(vertices[offset + 2]);
}
}
return [vec3Vector, vertexCount];
};
//# sourceMappingURL=computePxVertices.js.map