我想知道在三个.js中给定一个 3D 点数组的情况下生成自定义 3D 多边形的最佳方法是什么。它是一个没有孔的简单多边形。对点进行排序,以便它们表示相邻折点。我可以在 2D 中做到这一点,但我不希望顶点是共面的。感谢您的帮助!
这里的主要问题是如何从一堆点创建 3D 网格。换句话说:你需要弄清楚应该连接哪些顶点以形成一个三角形。
这是一件令人惊讶的复杂事情(好吧,至少我很惊讶),并且有大量的科学论文,图书馆等等。
但是,在您的情况下,它要简单一些,因为您已经大致知道顶点应该如何连接。我建议您查看耳切库或libtess.js,它们都应该能够创建您需要的三角测量。
一旦有了这个,你可以大致按照@lior-trau的建议,了解如何从结果中创建几何图形。
var geo = new THREE.Geometry();
var mat = new THREE.MeshBasicMaterial();
var middlePoint = new THREE.Vector3();
for(var i=0;i<dots.length;i++){
middlePoint.add(dots[i].position)
geo.vertices.push(new THREE.Vector3(dots[i].x,dots[i].y,dots[i].z));
}
middlePoint.divideScalar(dots.length);
geo.vertices.push(middlePoint);
for(var i=0;i<dots.length;i++){
middlePoint.add(dots[i].position)
if(i >0){
geo.faces.push(new THREE.Face3( geo.vertices.length-1,dots[i],dots[i-1]));
}
}
var mesh = new THREE.Mesh(geo,mat);