Упрощение триангулированных полигонов - PullRequest
0 голосов
/ 06 февраля 2020

Задача состоит в том, чтобы процедурно построить многоугольник, который тянется за транспортным средством в трехмерном пространстве. Я периодически получаю контуры новых заполненных сегментов, триангулирую их и рисую. Вот несколько примеров того, как выглядят сетки внутри квадратного «чанка» (я разделяю его для оптимизации рендеринга) enter image description here enter image description here

Это существует как один me sh - т.е. я добавляю треугольники к существующему me sh.

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

А потом есть вещь, которая иногда вместо одной формы Я могу получить несколько, т.е. есть дыры.

Теперь это работает. Но, конечно, это не оптимально. На самом деле, вы можете видеть, что me sh можно сильно упростить, особенно на границах чанка, где в любом случае это прямая линия.

Вот мое текущее мышление о том, как я хочу это сделать:

  1. Когда к чанку какое-то время не прикасались (т. Е. Триасы не добавляются

    • транспортное средство отошло от него)
  2. найти контур или контуры различных элементов внутри куска - отбросить вершины посередине и найти только внешний край. Если есть отверстия - обрабатывайте эти блоки как отдельные контуры.

  3. удаляйте вершины из тех контуров, которые не содержат значимого отклонения - т.е. когда они находятся почти или на прямой линии между двумя соседями.
  4. Снова триангулируйте результат, значительно упростив.

Результат должен быть таким:

enter image description here

I ' Я сталкиваюсь с небольшой проблемой понимания - как мне преобразовать группу треугольников обратно в контуры?

Кроме того, возможно, есть более эффективный способ сделать это? Я тоже не против рассмотрения оригинального триангуляционного / поли творения. Единственное, на что я не могу повлиять - это контур, который рассчитывается в другом месте и передается мне.

...