Для получения долек нам необходимо nSlice значений и в диапазоне от 0 до 2я. Обычно эти значения выбираются с постоянным шагом: и, - 2ro'/nSl i ce, i - 0,1.....nSl i ce - 1. Что же касается слоев, то мы выбираем половину из них над экватором, а половину - под ним. Верхний и нижний слои будут состоять из треугольников, а все остальные - из четырехугольников. Это означает, что мы должны задать (nStacks + 1) широты: vi = п/2 - 7r//nStacks, где] = 0,1.....nStacks.

Теперь можно создавать список вершин. На рисунке показано, как можно нумеровать вершины (порядок нумерации - это дело удобства): северный полюс помещаем в pt[0], нижние точки верхних слоев-в следующие 12 вершин и т. д. При 12 дольках и 8 ломтиках всего будет 98 точек. (Почему?)

6.5. Каркасные аппроксимации гладких объектов

Френсис Хилл

Рис. 6.49. Каркасная аппроксимация базовой сферы (а); нумерация вершин (5)

Столь же легко может быть создан список нормалей: в norm[k] будет храниться нормаль к сфере в вершине pt[k]. Элемент norm[k] вычисляется посредством подстановки в параметрическую форму вектора п(ы, V) тех значений (и, v), которые были использованы для точек. Для случая сферы такое вычисление особенно просто, поскольку norm[k] - это то же самое, что pt[k].

Список граней будет содержать 96 граней, из которых 24 являются треугольниками. Можно поместить верхние треугольники в первые 12 граней, 12 четырехугольников следующего слоя в следующие 12 граней и т. д. Первые несколько граней будут содержать следующие данные: Число вершин: 3 3 3

Индексы вершин: 012 023 034 Индексы нормалей: 012 023 034

Отметим, что normlndex всегда совпадает с vert Index для всех сеток, которые стремятся изображать гладкие формы, поэтому структура данных содержит избыточную информацию. (По этой причине можно было бы использовать для таких сеток более подходящую структуру данных. Какой она могла бы быть?) Такой способ «полигонизации» для сферы прост, однако для более сложных форм он может быть весьма хитроумным. (Дальнейшие обсуждения этой темы можно найти в литературе.)


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