我正在使用ColladaLoader导出3D模型,每个Mesh都会创建具有多个Faces的Geometry对象。
我设法选择面以更改作为三角形数组(Face3)的单个面的颜色和纹理。
知道我需要获取每个“面孔”的面积,我知道面孔是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的值a
,b
和c
不存储实际的顶点。而是将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();