Если вам нужно работать только с прямоугольником в 3D, вам просто нужно получить два вектора ребер, а затем вы можете сгенерировать все внутренние точки разделенного прямоугольника.Например, скажем, ваш квад определяется как (x0,y0),...,(x3,y3)
, чтобы обойти квад.Векторы ребер относительно точки (x0,y0)
равны u = (x1-x0,y1-y0)
и v = (x3-x0,y3-y0)
.
Теперь вы можете генерировать все внутренние точки.Предположим, вы хотите, чтобы M ребер было по первому ребру, а N - по второму, тогда внутренние точки просто
(x0,y0) + i/(M -1)* u + j/(N-1) * v
, где i
и j
идут от 0 .. M-1
и 0 .. N-1
соответственно,Вы можете выяснить, какие вершины необходимо соединить вместе, просто отработав это на бумаге.
Этот вид равномерного подразделения также хорошо работает для треугольных сеток, но каждое ребро должно иметь одинаковое количество подразделенных ребер.
Если вы хотите подразделить общую сетку, вы можете просто сделать это для каждого отдельного треугольника / четверки.Этот вид равномерного разделения приводит к плохому качеству сеток, поскольку все исходные плоские грани остаются плоскими.Если вы хотите что-то более сложное, вы можете взглянуть на Lid subidivision, Catmull-Clark и т. Д. Они обычно ограничены степенями двух степеней, но если вы исследуете оригинальные формулировки, я думаю, что вы можете получить трафареты подразделений дляВласть двух дивизий.Теория, лежащая в основе этого, немного сложнее, чем я могу здесь разумно описать.