没有直接的方法来获取该区域,但您可以创建自己的自定义逻辑。逻辑是从你的网格中创建三角形并计算那里的面积并添加它们,这将等于你的网格的面积。
示例如下:
function crossVectors( a, b ) {
var ax = a.X, ay = a.Y, az = a.Z;
var bx = b.X, by = b.Y, bz = b.Z;
var P={X:ay * bz - az * by,
Y:az * bx - ax * bz,
Z:ax * by - ay * bx}
return P;
}
function SuperficialAreaOfMesh(points) {
var _len =points.length,
_area = 0.0;
if (!_len) return 0.0;
var i= 0,vols=0;
var va,vb,vc;
do {
va={X:points[i],Y:points[i+1],Z:points[i+2]};
vb={X:points[i+3],Y:points[i+4],Z:points[i+5]};
vc={X:points[i+6],Y:points[i+7],Z:points[i+8]};
var ab = {X:vb.X-va.X,Y:vb.Y-va.Y,Z:vb.Z-va.Z};
//vb.clone().sub(va); var ac = {X:vc.X-va.X,Y:vc.Y-va.Y,Z:va.Z-vc.Z};
//vc.clone().sub(va); var cross = new THREE.Vector3();
cross=crossVectors( ab, ac );
_area += Math.sqrt(Math.pow(cross.X,2)+Math.pow(cross.Y,2)+Math.pow(cross.Z,2))/2;
i+=9;
}
while (i<points.length);
return customRound(Math.abs(_area)/100,2);
}
// Let's say you have mesh named mesh
SuperficialAreaOfMesh(mesh.vertices);
上面的例子遵循here找到的教程。
Here is another nice logic for your query。