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

6.5.4. Три «базовые» формы: сфера, цилиндр и конус В этом разделе мы начнем с трех классических объектов - «базовых» («generic») версий сферы, цилиндра и конуса. Для каждого из этих объектов рассматриваются его неявная и параметрическая форма, а также способы создания сеток для их аппроксимации. Мы выведем формулы для определения нормального направления в каждой точке данного объекта. Отметим, что в главе 5 для рисования таких форм уже использовались функции OpenGL. Однако добавление своих собственных инструментов имеет два преимущества: во-первых, мы достигаем значительно более строгого контроля за деталями структуры создаваемой формы, а во-вторых, мы фактически получаем объект в виде сетки и можем применять к нему методы класса Mesh.

Базовая сфера Назовем сферу единичного радиуса с центром в начале координат «базовой сферой» (см. рис. 6.46, а). Она является основой для всех остальных используемых нами сфероподобных форм. Неявная форма для такой сферы хорошо известна:

F(x,y,z) = x2 + y2 + z2- 1. (6.28)

При альтернативном способе записи F(Р) мы получаем более элегантное выражение: F(P) = \Р\2 - 1. (Как изменятся эти формулы, если радиус сферы будет равен R?)

Френсис Хилл

Рис. 6.46. Базовая сфера (я); параметрическая форма (5); параллели и меридианы (а)

Параметрическое описание этой сферы непосредственно вытекает из стандартного описания точки в сферических координатах (см. приложение Б.) Пусть величина и соответствует долготе (азимуту), a v - широте. Тогда произвольная точка на сфере Р = (х, у, z) выражается в сферических координатах как (cos (v) cos (и), cos (v) sin (и), sin (г>)) (см. рис. 6.46, б). Для того чтобы охватить все точки на сфере, и должно изменяться в диапазоне (0,2л), a v - в диапазоне (-л/2, л/2)1. Поэтому параметрическая форма сферы имеет вид: Р(и, v) = (cos(z>) cos(m), cos(a) sin(m), sin(a)). (6.29)

Легко проверить, что эта форма согласуется с неявной: просто подставим члены уравнения (6.29) в соответствующие члены уравнения (6.28) и увидим, что для любых значений и и v равенство нулю сохраняется.


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