6.5.7. Преобразованные сферы

Найдите неявную форму для базовой сферы, которая была масштабирована вдоль оси х с множителем 2 и вдоль оси у с множителем 3 и затем повернута на 30° вокруг оси z.

6.5.5. Формирование полигональной сетки для криволинейной поверхности Исследуем теперь, как создать каркасный объект, аппроксимирующий гладкую поверхность, такую как сфера, цилиндр или конус. Процесс создания такой сетки называется «полигонализацией» («polygonalization») или, более строго, разбиением на ячейки (tesselation); он означает замену поверхности совокупностью треугольников или четырехугольников. Вершины этих полигонов лежат на самой поверхности и соединяются прямыми ребрами (которые, как правило, не лежат на данной поверхности). Затем выбирается множество значений и и & и в этих значениях вычисляется параметрическая форма поверхности («берутся замеры» формы при выбранных значениях параметров), в результате чего получается совокупность вершин. Затем эти вершины помещаются в список вершин. После этого создается список граней: каждая грань описывается тремя или четырьмя индексами, указывающими на соответствующие вершины в списке вершин. С каждой вершиной грани связывается нормальный вектор к поверхности. Этот нормальный вектор является в каждой вершине нормалью к истинной основной поверхности. (Отметим, что эта нормаль отличается от той, которая использовалась при отображении полиэдров с плоскими гранями: там вершина каждой грани ассоциировалась с нормалью к этой грани.)

На рис. 6.49 показано, как эта процедура работает для базовой сферы. Мы хотим разрезать сферу по линиям долготы и широты. Используя термины OpenGL - «дольки» («slices») и «ломтиких» («stacks») (см. раздел «Рисование элементарных форм, поддерживаемых OpenGL»), - мы разрезаем сферу на nSlice долек по экватору и nStacks ломтиков от южного полюса к северному. В примере на рисунке 12 долек и 8 ломтиков. Чем больше значения nSlice и nStacks, тем лучше сетка аппроксимирует истинную сферу.


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