首页 > 解决方案 > 在 three.js 中计算 Wavefront Obj 文件的体积

问题描述

我有以下代码用于加载 Wavefront OBJ 文件:

    var objLoader = new THREE.OBJLoader();
    objLoader.load("../assets/Flywheel.obj", function (object) {
        object.scale.set(30.5, 30.5, 30.5);
        object.position.set(8, - 0.35, 1);
        object.name = "obj";
        scene.add(object);
    });

如何计算这个 OBJ 的体积?我试图获取几何图形并使用以下代码进行计算:

function getVolume(geometry) {

  let position = geometry.attributes.position;
  let faces = position.count / 3;
  let sum = 0;
  let p1 = new THREE.Vector3(),
    p2 = new THREE.Vector3(),
    p3 = new THREE.Vector3();
  for (let i = 0; i < faces; i++) {
    p1.fromBufferAttribute(position, i * 3 + 0);
    p2.fromBufferAttribute(position, i * 3 + 1);
    p3.fromBufferAttribute(position, i * 3 + 2);
    sum += signedVolumeOfTriangle(p1, p2, p3);
  }
  return sum;

}

function signedVolumeOfTriangle(p1, p2, p3) {
  var p = p1.dot(p2.cross(p3)) / 6.0;
  return p;
}

但这对我没有用。

标签: javascriptthree.jswavefront

解决方案


推荐阅读