我正在使用ColladaLoader导出3D模型,每个Mesh都会创建具有多个Faces的Geometry对象。

我设法选择面以更改作为三角形数组(Face3)的单个面的颜色和纹理。
javascript - Three.js计算几何面的面积(Face3)-LMLPHP

javascript - Three.js计算几何面的面积(Face3)-LMLPHP

知道我需要获取每个“面孔”的面积,我知道面孔是Face3的Triangles实例的总和。我尝试遍历每个相关的面孔,并像这样对 a,b和c 值求和,但是没有运气。

var sAB = Math.abs(face.a - face.b);
var sBC = Math.abs(face.b - face.c);
var sCA = Math.abs(face.c - face.a);
var s = sAB + sBC + sCA;
var a = Math.sqrt(s*(s-sAB)*(s-sBC)*(s-sCA));

如何计算Face3三角形对象的面积?

最佳答案

Face3的值abc不存储实际的顶点。而是将geometry.vertices中的顶点索引存储在此处。因此,要检索三个顶点,您需要这样的东西:

var va = geometry.vertices[face.a];
var vb = geometry.vertices[face.b];
var vc = geometry.vertices[face.c];

处理 vector 时,您使用的计算无法正常工作。您需要使用 THREE.Vector3 中的函数(例如var v = new THREE.Vector3(); v.subVectors(va, vb);)进行这些计算。

另外,您可以使用一个类 THREE.Triangle :
var t = new THREE.Triangle(va,vb,vc);
var area = t.getArea();

08-07 08:24