cdcdcd
@cdcdcd

Как рассчитать объем 3D модели через библbотеку Three.js?

Всем привет!
Суть вопроса следующая:
- имеется инпут, с помощью которого загружается 3Д модель для последующих манипуляций.
- в момент полной загрузки и физического наличия файла на сервере, нужно рассчитать объем загруженной модели
- в основном используется формат STL

Вот некоторые расчеты которые я использую, но в конечном результате это далеко не точный результат.

const loadedGeometry = await new Promise((resolve, reject) => {
      loader.load(fileURL, resolve, undefined, reject);
    });

    console.log('Загруженная геометрия:', loadedGeometry);

    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000); // Соотношение сторон 1:1

    const material = new THREE.MeshNormalMaterial();

    const mesh = new THREE.Mesh(loadedGeometry, material);

    const boundingBox = new THREE.Box3().setFromObject(mesh);
    const size = new THREE.Vector3();
    boundingBox.getSize(size);

    const widthBox = size.x;
    const heightBox = size.y;
    const depthBox = size.z;

    const volumeCubicMeters = size.x * size.y * size.z;

    const vertices = loadedGeometry.attributes.position.array;
    const triangleCount = vertices.length / 9;
    const triangleVolume = volumeCubicMeters / triangleCount;

    console.log('Bounding Box Volume:', volumeCubicMeters.toFixed(3), 'cubic units');
    console.log('Individual Triangle Volume:', triangleVolume.toFixed(3), 'cubic units');


также есть предметный вариант через формулу
1/3 × π × radius squared (R2) × height (H) = volume (V).

const radius = Math.min(widthBox, heightBox) / 2;
const height = depthBox;
const volume = (1/3) * Math.PI * Math.pow(radius, 2) * height;

console.log('Volume:', volume.toFixed(3), 'cubic units');

// Преобразование в кубические сантиметры
const volumeCubicCentimeters = volume / 1000;
console.log('Volume in cubic centimeters:', volumeCubicCentimeters.toFixed(3), 'cm³');


Возможно, кто-то ранее сталкивался с подобными расчетами и сможет направить в нужном направлении?
Также опишу что для просчетов использовались данные с BufferGeometry (boundingBox) объекта three.js STLLoader()

вот консоль после загрузки и получения геометрии

6555f4165aadc644529946.png
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы