expo-three
Version:
Utilities for using THREE.js on Expo
47 lines • 1.73 kB
JavaScript
import THREE from './Three';
export function alignMesh(mesh, axis = { x: 0.5, y: 0.5, z: 0.5 }) {
const nAxis = axis || {};
const box = new THREE.Box3().setFromObject(mesh);
let size = new THREE.Vector3();
box.getSize(size);
const min = { x: -box.min.x, y: -box.min.y, z: -box.min.z };
for (const key of Object.keys(nAxis)) {
const scale = nAxis[key];
mesh.position[key] = min[key] - size[key] + size[key] * scale;
}
}
export function scaleLongestSideToSize(mesh, size) {
let sizedVector = new THREE.Vector3();
new THREE.Box3().setFromObject(mesh).getSize(sizedVector);
const { x: width, y: height, z: depth } = sizedVector;
const longest = Math.max(width, Math.max(height, depth));
const scale = size / longest;
mesh.scale.set(scale, scale, scale);
}
/** Used for smoothing imported meshes */
export function computeMeshNormals(mesh) {
mesh.traverse(async (child) => {
if (child instanceof THREE.Mesh) {
/// Smooth geometry
const temp = toGeometry(child.geometry);
temp.mergeVertices();
temp.computeVertexNormals();
temp.computeFaceNormals();
child.geometry = new THREE.BufferGeometry().fromGeometry(temp);
}
});
}
export function toBufferGeometry(geometry) {
if (geometry instanceof THREE.BufferGeometry) {
return geometry;
}
const bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);
return bufferGeometry;
}
export function toGeometry(geometry) {
if (geometry instanceof THREE.Geometry) {
return geometry;
}
return new THREE.Geometry().fromBufferGeometry(geometry);
}
//# sourceMappingURL=utils.js.map