2017-01-17 2 views
1

Интересно, какой был бы лучший способ создания пользовательского 3D-многоугольника, учитывая массив трехмерных точек в three.js. Это простой многоугольник без отверстий. Точки упорядочены так, что они представляют соседние вершины. I can do it in 2D, but I don't want the vertices to be coplanar. Благодарим за помощь!Как создать трехмерный многоугольник из серии трехмерных точек в three.js?

ответ

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

То, как вы нажимаете лица, не гарантирует, что отверстия не будут закрыты. – gaitat

+0

Я отредактировал код в ответе: вы можете найти среднюю точку и создать грань от середины до любых двух вершин в многоугольнике. все же могут быть некоторые случаи, когда это будет не совсем хорошо, но в большинстве случаев это будет работать. – Tlatis

+0

@gaitat У вас есть лучшее решение? Это было бы очень полезно для меня. – Tlatis

1

Основная проблема заключается в создании 3D-сетки из множества точек. Другими словами: вам нужно выяснить, какая из вершин должна соединяться, чтобы сформировать треугольник.

Это удивительно сложная вещь (ну, по крайней мере, я был удивлен), и есть много научных статей, библиотек и т. Д. Об этом.

Однако в вашем случае это немного проще, поскольку вы уже знаете примерно, как должны соединяться вершины. Я бы порекомендовал вам взглянуть на earcut-library или libtess.js, оба из которых должны быть в состоянии создать необходимые триангуляции.

Как только у вас есть это, вы можете грубо поехать с @lior-trau's рекомендацией о том, как создать геометрию из результата.