Как вытянуть плоскую 2D сетку, придав ей глубину - PullRequest
5 голосов
/ 03 октября 2010

У меня есть набор копланарных, соединенных треугольников, то есть двумерная сетка. Теперь мне нужно выдавить его на несколько единиц по оси Z. Сетка определяется набором вершин, которые визуализатор имеет смысл, сопоставляя с массивом треугольников.

Пример Mesh:

Вершины: (0,0,0), (10,0,0), (10,10,0), (0,10,0) <- (x, y, z) Треугольники: (1, 2, 3) & (3, 4, 1) <- числа здесь обозначают положение вершины выше. </p>

Итак, у нас есть 2D-квадрат. Теперь мне нужно добавить больше вершин и треугольников в этот список, чтобы сделать вытянутую форму. Треугольники должны быть по часовой стрелке, в противном случае они отбракованы с обратной стороны.

Есть ли простой алгоритм для этого? Спасибо.

1 Ответ

10 голосов
/ 03 октября 2010

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

0) пусть n будет исходным числом вершин (4 в вашем примере)

1)Для каждой вершины в вашем массиве вершин, добавьте (0,0, z) к нему и добавьте результат в ваш массив вершин, в общей сложности 2 * n вершин.Итак, для вашего примера, вы добавите вершины (0,0, z), (10,0, z), (10,10, z), (0,10, z) к вашему массиву вершин, в общей сложностииз 2 * 4 = 8 вершин.

2) Создайте список краевых (в отличие от внутренних) ребер для вашей исходной сетки.Для этого создайте список всех ребер треугольника (3 ребра, идущие по часовой стрелке для каждого треугольника).Затем удалите пары равных, но противоположных ребер (это внутренние ребра).Для вашего примера вы начнете с 6 ребер, и в итоге получите 4 ребра после удаления пары ребер (3,1) и (1,3).

3) для каждого треугольника (a, b,в) в вашем списке треугольников создайте соответствующий треугольник (a + n, b + n, c + n).Это будут выдавленные грани

4) Наконец, вы хотите создать стороны вашей выдавленной формы.Для каждого ребра (a, b) в списке ребер границ, который вы создали на шаге 2, добавьте треугольники (a, b, b + n) и (b + n, a + n, a)

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

...