Мы рассмотрим, как конструировать сложные трехмерные формы, задавая совокупность граней. Одни объекты могут быть точно представлены полигональной сеткой, а другие только аппроксимируются ею. Например, сарай на рис. 6.1, а действительно имеет плоские грани, и при визуализации ребра между гранями должны быть видны. Однако цилиндр на рис. 6.1, б должен иметь гладкую боковую поверхность. Такая закругленность не может быть достигнута только с помощью полигонов: отдельные плоские поверхности вполне различимы, так же как и ребра между ними. Существуют, однако, технологии визуализации, с помощью которых подобная сетка выглядит гладкой, как на рис. 6.1, в. Детали так называемого закрашивания Гуро (Gouraud shading) будут рассматриваться в главе 8.
Рис. 6.1. Различные формы, смоделированные с помощью сеток Мы начнем с описания полигональных сеток в довольно общем виде и увидим, как задавать их и управлять ими в программе (с использованием OpenGL или без него). Далее мы применим эти идеи к моделированию многогранников, которым свойственны плоские грани, и изучим несколько интересных семейств полиэдров. Затем мы перейдем к задаче использования сетки для аппроксимации гладких криволинейных поверхностей и разработаем необходимые инструменты для создания и обработки таких моделей.
6.2. Введение в трехмерное моделирование полигональными сетками Я никогда не забываю ни одного лица, но в вашем случае я сделаю исключение.
Гручо Маркс (Groucho Marx)
фреза торцевая с мех крепление 5-гранных пластин ф 160 мм.
Мы будем использовать сетки для моделирования как монолитных (сплошных) форм, так и тонких оболочек. Объект считается монолитным (solid), если его полигональные грани плотно примыкают друг к другу и ограничивают некоторое пространство. В других случаях грани объекта совмещаются без or-
Моделирование поверхностей полигональными сетками
раничения пространства, тогда они представляют собой поверхность бесконечно малой толщины. В обоих случаях назовем эту совокупность полигонов полигональной сеткой (poligonal mesh) или просто сеткой (mesh).
Полигональная сетка задается списком полигонов и информацией о направлении, куда «обращен» каждый полигон. Информация о направлении часто задается в виде нормали к плоскости его грани. Эта информация используется при закрашивании объекта для определения того, сколько света от источника рассеивается на этой грани. На рис. 6.2 показаны нормальные векторы к различным граням сарая. При детальном изучении этого вопроса в главе 8 мы увидим, что одна из составляющих яркости поверхности берется пропорциональной косинусу угла (угол 6 на рисунке для боковой стенки сарая) между нормалью к поверхности и вектором, указывающим на источник света. Таким образом, ориентация поверхности по отношению к источнику света играет существенную роль в окончательном изображении.