Интересно, какой был бы лучший способ создания пользовательского 3D-многоугольника, учитывая массив трехмерных точек в three.js. Это простой многоугольник без отверстий. Точки упорядочены так, что они представляют соседние вершины. I can do it in 2D, but I don't want the vertices to be coplanar. Благодарим за помощь!Как создать трехмерный многоугольник из серии трехмерных точек в three.js?
1
A
ответ
0
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);
1
Основная проблема заключается в создании 3D-сетки из множества точек. Другими словами: вам нужно выяснить, какая из вершин должна соединяться, чтобы сформировать треугольник.
Это удивительно сложная вещь (ну, по крайней мере, я был удивлен), и есть много научных статей, библиотек и т. Д. Об этом.
Однако в вашем случае это немного проще, поскольку вы уже знаете примерно, как должны соединяться вершины. Я бы порекомендовал вам взглянуть на earcut-library или libtess.js, оба из которых должны быть в состоянии создать необходимые триангуляции.
Как только у вас есть это, вы можете грубо поехать с @lior-trau's рекомендацией о том, как создать геометрию из результата.
То, как вы нажимаете лица, не гарантирует, что отверстия не будут закрыты. – gaitat
Я отредактировал код в ответе: вы можете найти среднюю точку и создать грань от середины до любых двух вершин в многоугольнике. все же могут быть некоторые случаи, когда это будет не совсем хорошо, но в большинстве случаев это будет работать. – Tlatis
@gaitat У вас есть лучшее решение? Это было бы очень полезно для меня. – Tlatis