Этот подход может сработать, но вы должны сделать некоторые расчеты того, сколько нужно перевести для каждого шага. Я бы порекомендовал генерировать вытянутую геометрию более разумным способом.
Например, вы не должны рисовать крышки ящиков (пол и потолок) для промежуточных ящиков. Вы также должны убедиться, что стороны соприкасаются идеально, иначе вы получите артефакты.
Я рекомендую использовать путь для определения плоскостей, в которых проходит каждый набор вершин. Траектория должна состоять из ряда точек и вектора ориентации для каждой точки, который определяет, сколько нужно повернуть вокруг вектора направления. При этом вы можете очень легко вычислить 4 вершины кольца, просто используя базовую векторную математику.
Так, например, вы начинаете с заглушки [(0,5,0,5,0), (- 0,5,0,5,0), (- 0,5, -0,5,0), (0,5, -0,5,0)] и переместите его вдоль траектории (первая - центральная точка, вторая - правый вектор) [(0,0,0), (1,0,0)], [(0,5,10), (1,1,0 )], [(10,5,12), (0,1,0)] * +1007 *
Теперь вы сначала рассчитываете все три вектора ориентации. Нормой является разница между текущей и следующей точкой, поэтому (0,5,10) - (0,0,0) = (0,5,10). Правый вектор должен быть спроецирован на плоскость, определяемую нормалью, поэтому мы сначала рассчитываем вектор роста с использованием перекрестного произведения: (0,5,10) x (1,0,0) = (0,10, -5) , И в качестве последнего шага мы рассчитываем спроецированный правый вектор, который является перекрестным произведением между нормой и ростом: (0,5,10) x (-2,4, -2) = (-125,0,0). Все три вектора должны быть нормализованы, и если вы поместите их рядом, вы получите красивую матрицу преобразования, которую вы примените к векторам шапки, получая 4 вершины для текущего шага:
|-1 0 0 | |0.5| |-0.5 |
| 0 0.894427 0.447214| * |0.5| = | 0.447213| etc.
| 0 -0.447214 0.894427| |0 | | 0.223607|
(я, наверное, немного запутался с признаками, вам, возможно, придется поменять местами факторы для получения правильных результатов)
Затем вы повторяете одну и ту же процедуру для каждого шага на пути и каждый раз рисуете 4 кольца.