Глава 6. Моделирование поверхностей полигональными сетками

Френсис Хилл

Рис. 6.35. Трубка, созданная путем последовательной экструзии полигона Конструирование трубок на базе трехмерных кривых Как конструировать интересные и полезные трубки и змейки? Можно создавать все матрицы М. вручную, однако это выглядит по меньшей мере странно. Намного проще представить трубу, окружающую некоторую кривую, которую мы будем называть хребтом (spine) трубы и которая изгибается в пространстве определенным заданным образом*. Мы будем представлять эту кривую параметрически в виде C(t). Например, винтовая линия (см. раздел «Применение параметрического задания кривой»), стереоскопически показанная на рис. 6.36, а, имеет следующее параметрическое представление:

C(t) = (cos(r), sin(r), bt), (6.11)

где b - некоторая константа.

Френсис Хилл

Рис. 6.36. Стереорисунок спирали Для формирования различных перетяжек трубы вычислим С(р) для множества значений параметра {ґ0, і,,...} и построим преобразованный полигон в каждой точке С(£.) в плоскости, перпендикулярной к кривой, как показано на рис. 6.37. Это равносильно созданию локальной системы координат в каждой выбранной точке вдоль хребта: локальная «ось г» показывает направление вдоль кривой, а локальные «оси х и у» направлены перпендикулярно к оси г (и перпендикулярно друг другу). Полигон перетяжки при этом располагается в локальной яу-плоскости. Все, что нам нужно, - это задать вершины каждой перетяжки.

Удобнее всего предоставить самой кривой С(ґ) определять локальную систему координат. В широко известном методе дифференциальной геометрии в каждой точке вдоль хребта создается базис (репер)

1 Язык моделирования VRML 2.0 включает в себя узел «экструзии», работающий аналогичным образом: разработчик может выбрать «хребет», вдоль которого размещаются полигоны, каждый со своим собственным преобразованием.

6.4. Экструзивные формы Френе (Frenet frame) [Gray, 91]. При каждом интересующем нас значении t вычисляется касательный к кривой вектор T(tt). Затем вычисляются два вектора N(t) и B(t.), перпендикулярные к вектору Т(г.) и друг к другу. Эти три вектора и образуют базис Френе, соответствующий значению tr


⇐ Предыдущая| |Следующая ⇒