Как получить 4 угла поверхности сетки (или плоскости), состоящей из множества треугольников? - PullRequest
0 голосов
/ 28 сентября 2019

pic: a surface with many triangles, how to get the 4 corners having data of all vertices?

После использования CSG моя сетка перепутана с большим количеством вершин и граней, чем необходимо.Данные предоставляют все вершины в одном массиве без разграничения, являются ли они реальными углами или где-то посередине поверхности / плоскости.Я сделал простую скрипку, чтобы показать пример.

https://jsfiddle.net/apbln/k5ze30hr/82/

geometry.vertices.push(

      new THREE.Vector3(-1, -1,  0),  // 0
      new THREE.Vector3( 1, -1,  0),  // 1
      new THREE.Vector3(-1,  1,  0),  // 2
      new THREE.Vector3( 1,  1,  0),  // 3

      new THREE.Vector3(-0.5, -0.5,  0),  // 4
      new THREE.Vector3( 0,  1,  0),  // 5
      new THREE.Vector3( 1, -1,  0),  // 6
        );

    geometry.faces.push(

         new THREE.Face3(0, 5, 2),
         new THREE.Face3(0, 1, 5),
         new THREE.Face3(3, 5, 1),

      );

Это упрощенная версия того, как мои поверхности выглядят после использования csg.Как я мог узнать, какие вершины являются настоящими углами, чтобы я мог восстановить поверхность только с 2 гранями?

1 Ответ

1 голос
/ 29 сентября 2019

Вы можете попробовать обнаружить смежные лица.Если две грани имеют общее ребро и они копланарны, их можно объединить.Это был бы немного более общий алгоритм.

Смысл алгоритма заключается в том, чтобы сначала построить граф смежности, где каждое ребро связано с гранями, смежными с ним.Затем переберите список ребер и определите те, где две смежные грани совпадают, если это так, объедините грани и отрегулируйте списки смежности.

Это немного сложнее, если вам требуется треугольная сетка.Наилучшим подходом может быть сначала создать сетку с треугольными гранями, а затем разбить их на треугольники.

Это довольно распространенная проблема, и нет никаких сомнений в том, что библиотеки могут сделать это за вас.Этот ответ может помочь: ThreeJS: возможно ли упростить объект / уменьшить количество вершин?

...