Вы можете продолжать использовать алгоритм 2D Делоне, но каждый раз делайте это между двумя соседними слоями (z1, z2). (z1
Предположим, что контурные линии выбираются и сохраняются в виде набора (x, y, z) в направлении против часовой стрелки на плоскости z. Вам необходимо построить набор точек границы / отверстия для триангуляции:
- обнаружение или вычисление перекрывающихся отрезков (x1, y1, z1) (x2, y2, z1) и (x1, y1, z2) (x2, y2, z2)
- сдвиньте (x1, y1, z1) внутрь с небольшим смещением вдоль направления средней нормали двух соседних отрезков. Аналогично, двигайтесь (x2, y2, z1) внутрь; переместить (x1, y1, z2) (x2, y2, z2) наружу. Теперь две (или более) линии контура разделены, и вы получите две (или более) точки границы / отверстия.
- применить трангуляцию Делоне в пределах области, определяемой границей и отверстиями (то есть генерировать случайные точки, точки опускания вне границы или внутри отверстий, строить треугольник). Я предполагаю, что Poly2Tri будет обрабатывать случаи, когда треугольник частично закрывает отверстие. Получив все треугольники в плоскости (x, y), восстановите смещение и вычислите z, интерполируя исходные данные.
Снова выполните триангуляцию для слоя (z2, z3) и т. Д. Обратите внимание, что точки отверстия / границы в точке z2 остаются прежними, но если происходит перекрытие, вместо того, чтобы двигаться внутрь, теперь оно движется наружу. В конце объедините все треугольники в одну сетку.