pt[4i] - р2|. pt[4i + 1] - p2l,j.

pt[4i + 2] = р21„ + d. pt[4i + 3] = p2( + d

где i = 0,..., num, как показано на рис. 6.72, б.

Теперь возьмемся за список граней. Вначале добавим все «внешние стенки» каждого сегмента трубки. Затем добавляем «концевые стенки» (то есть первая концевая стенка использует вершины первой

14 Ф. Хилл

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

перетяжки). У каждого из num сегментов имеется четыре стенки. Для каждой стенки в список вносятся четыре вершины в порядке против часовой стрелки, если смотреть с внешней стороны. В порядке следования индексов имеются закономерности, однако они сложны. Проверьте, что следующие индексы вершин правильно описывают каждую из четырех стенок k-то сегмента: вершины j-й стенки k-ro сегмента имеют индексы і0, і,, і2, і3, где

i0-4k+j, i,-i0 + 4,

і'з - 4k + (J + 3) mod4, i2-i3 + 4, дляЛ-0, l,...,numHj-0,1,2,3.

Чему равны индексы двух концевых граней трубки?

Построение сетки на базе полосы из четырехугольников

Рис 6.72. Построение сетки на базе полосы из четырехугольников: а) полоса из четырехугольников в плоскости ху; б) четыре экструзивных отрезка Каждая грань имеет нормаль, определяемую по методу Ньюэлла, и ее нетрудно вычислить, когда индексы вершин помещаются в список граней. Все нормали вершин одной грани используют один и тот же нормальный вектор: face[L].norniindex - {L, L, L, L}, для каждого L.

Поэкспериментируйте с подпрограммой makeExtrudedQuadStripO, моделируя и рисуя арки вроде той, которая показана на рис. 6.31, а также несколько печатных букв, в которых в качестве основания используются полосы четырехугольников.

Тематическое задание 6.5. Трубки и змейки на базе параметрической кривой Уровень сложности III.

Напишите и протестируйте подпрограмму:

void Mesh:: makeTube(Point2 Р[]. int numPts. float t[], int numTimes)

которая строит плоскогранные сетки путем нанизывания полигона с вершинами Р0, Pt.....PN_t на хребтовую кривую C(t). Перетяжки получающейся трубки формируются на хребте при дискретных значениях параметра t0, tM_v и в каждой точке С(г(.) строится базис Френе. Функция С(г) «зашита» в код программы как формула, а ее производные формируются численно.


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