Некоторые инструменты визуализации, подобно OpenGL, могут надежно рисовать только выпуклые полигоны. Они могут неправильно нарисовать, например, стрелку с рис. 6.30. Если ваше программное обеспечение относится к такому же типу, то вы можете разбить невыпуклый полигон основания на совокупность выпуклых полигонов и экструдировать каждый из них. На рис. 6.31 дается несколько примеров, в том числе выдавленные буквы алфавита.

Френсис Хилл

(6.8)

Френсис Хилл

Рис. 6.31. Экструзивные объекты, составленные из выпуклых призм

6.4. Экструзивные формы Объекты, подобные приведенным на рисунке, составляются из совокупности выпуклых призм. Некоторые из составляющих призм примыкают друг к другу и поэтому могут иметь общие стены - целиком или частично. Но поскольку координаты вершин вычисляются с большой точностью, граница между двумя стенами обычно невидима.

Для данного семейства форм нам нужен метод, строящий сетку по данным совокупности призм, например:

void Mesh:: makePrismArrayC.)

который принимает в качестве аргументов соответствующий список (выпуклых) полигонов основания (расположенных в плоскости ху), а также, возможно, вектор d, описывающий направление и величину экструзии. Список вершин должен содержать вершины полигонов основания и крышки каждой призмы, а сами стенки и основания каждой призмы должны находиться в списке граней. Рисование такой сетки включает в себя много лишней работы, потому что граничащие стенки будут рисоваться (причем дважды) даже тогда, когда они в конечном счете невидимы.

Частный случай: экструзия полос из четырехугольников Существует простое, но очень интересное семейство призм, которое очень легко строится и эффективно управляется. Это призмы, полигон основания которых может быть представлен в виде полосы четырехугольников (quad-strip), то есть совокупности четырехугольников, соединенных в цепочку (подобно кирпичам, выложенным в ряд) таким образом, что их соседние грани полностью совпадают, как показано на рис. 6.32, а. Вспомним рис. 2.21, где указывается, что полоса четырехугольников является графическим примитивом OpenGL. Полоса четырехугольников описывается последовательностью своих вершин:


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