Что противоположно триангуляции полигонов? - PullRequest
2 голосов
/ 28 августа 2010

После того, как я сделал 2D триангуляцию, некоторые треугольники имеют один и тот же цвет, и я хочу рекомбинировать их для рисования в графических контурах одинакового цвета.Я обнаружил, что если я просто рисую треугольники один за другим, некоторые графические средства визуализации показывают швы между треугольниками (по крайней мере, если задействованы сглаживание и / или прозрачность).

Итак, как мне взять набор(не перекрывающиеся) треугольники и создают графический путь, который может содержать дыры и непересекающиеся многоугольники?

Слепое добавление треугольников к графическому пути на самом деле очень хорошо подходит для заливки (хотя, конечно, не для обводки),но неправильно экспортировать эти дополнительные предметы интерьера.

1 Ответ

7 голосов
/ 30 августа 2010

Думайте о каждом треугольнике как о контуре, состоящем из трех векторов, идущих в цепи против часовой стрелки.

<--^
| /
|/ 
V

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

Например, для двух соседних треугольников объединение составляет 6 векторов

<--^^
| //|
|// |
VV-->

, что уменьшает до 4 векторов, потому что два диагональных вектора в середине отменяются, потому что они идентичны, но идут в противоположных направлениях:

<--^
|  |
|  |
V-->

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

<-----<-----<-----^
|                 |
|                 |
V     ^----->     ^
|     |     |     |
|     |     |     |
V     <-----V     ^
|                 |
|                 |
V----->----->----->
...