Three.js / 3D модели - расчет нескольких объемов объекта

Я работаю над одним проектом в Three.js и должен решить одну проблему как можно быстрее. Мне нужно рассчитать несколько объемов трехмерного объекта.

Первое, что мне нужно, это точно так же, как здесь:Как рассчитать объем трехмерного сетчатого объекта, поверхность которого состоит из треугольников

И я рассчитываю это таким же образом. Это весь объем объекта.

Этого достаточно, если объект не нуждается в дополнительном материале, когда он идет в 3D-печать. Например, если это будет стакан (открытый цилиндр), мне нужно рассчитать объем дополнительного материала, который будет использоваться при печати этой модели. Этот материал будет «внутри» стекла и предотвратит падение пола стекла внутри модели.

Я не знаю, как рассчитать это, слишком мало математических знаний, я думаю. Есть ли способ рассчитать это? Или, может быть, есть способ рассчитать «объем с закрытыми ячейками», даже если он открытый (например, стекло)?

РЕДАКТИРОВАТЬ: у меня нет модели стекла, но у меня есть модель коробки. Коробка будет напечатана открытой стороной внизу. Мне нужно знать внутренний объем.

Извините за мой английский, надеюсь, это понятно.

Вот как я вычисляю объем объекта (точно так же, как в ссылке в первом посте):

function volumeOfT(p1, p2, p3){
    var v321 = p3.x*p2.y*p1.z;
    var v231 = p2.x*p3.y*p1.z;
    var v312 = p3.x*p1.y*p2.z;
    var v132 = p1.x*p3.y*p2.z;
    var v213 = p2.x*p1.y*p3.z;
    var v123 = p1.x*p2.y*p3.z;
    return (-v321 + v231 + v312 - v132 - v213 + v123)/6.0;
}

function calculateVolume(object){
    var volumes = 0.0;

    for(var i = 0; i < object.geometry.faces.length; i++){
        var Pi = object.geometry.faces[i].a;
        var Qi = object.geometry.faces[i].b;
        var Ri = object.geometry.faces[i].c;

        var P = new THREE.Vector3(object.geometry.vertices[Pi].x, object.geometry.vertices[Pi].y, object.geometry.vertices[Pi].z);
        var Q = new THREE.Vector3(object.geometry.vertices[Qi].x, object.geometry.vertices[Qi].y, object.geometry.vertices[Qi].z);
        var R = new THREE.Vector3(object.geometry.vertices[Ri].x, object.geometry.vertices[Ri].y, object.geometry.vertices[Ri].z);
        volumes += volumeOfT(P, Q, R);
    }

    loadedObjectVolume = Math.abs(volumes);
}

Я проверил в другом программном обеспечении и объем объекта является правильным.

Вот как я пытался создать ConvexGeometry:

var geometry = new THREE.STLLoader().parse( contents );
geometry.sourceType = "stl";
geometry.sourceFile = file.name;

geometry.computeFaceNormals();
geometry.computeVertexNormals();

var convexGeometry = THREE.ConvexGeometry(geometry.vertices);

var material = new THREE.MeshLambertMaterial({
    color: 0xff0000,
    emissive: 0x000000,
    shading: THREE.FlatShading
});

var mesh = new THREE.Mesh( geometry, material );

Онлайнvar convexGeometry = THREE.ConvexGeometry(geometry.vertices); браузер зависает. Только модели с низкими вершинами могут пройти через это (например, куб).

Ответы на вопрос(0)

Ваш ответ на вопрос