В трехмерном пространстве область рисования считается единичным квадратом, лежащим в плоскости ху, как показано на рис. 6.71, б, а основание призмы находится внутри этого квадрата. Так уста6.7. Тематические задания навливается размер основания в трехмерном «мире». Призма представляет собой полигон основания, протянутый (экструдированный) на единичное расстояние вдоль оси г. Выполните эту программу для нескольких призм, вводимых пользователем. Посмотрите, правильно ли ваша реализация OpenGL рисует невыпуклые полигоны основания.

Разработка и построение сетки для призмы

Рис. 6.71. Разработка и построение сетки для призмы Тематическое задание 6.4. Совокупность призм и экструдированные полосы из четырехугольников Уровень сложности III.

Напишите две подпрограммы, описанные в разделе «Совокупности экструзивных призм"images/tmp8E4A-439.png" />

1. Совокупности призм. Выберите подходящий тип данных для представления совокупности призм. Заметим, что подпрограмма makePrismArrayO аналогична подпрограмме, формирующей сетку для единичной призмы. Выполните эту подпрограмму хотя бы для печатных букв к и W. (Если хотите, то сделайте еще букву d.)

2. Экструзивные полосы из четырехугольников, используемые для создания труб. Процесс построения списков вершин, нормалей и граней сетки фактически сводится к правильной обработке множества индексов этих массивов. Для облегчения разработки подпрограммы, осуществляющей это, в качестве основания рассмотрим полосу из четырехугольников, описываемую своими вершинами с помощью равенства (6.9):

quad-strip = {p0,pv...,pMJ.

Здесь р( = (х, у{, 0) лежит в плоскости ху, как показано на рис. 6.72, а. После экструзии каждая последующая пара вершин образует «перетяжку» («waist») трубки, как показано на рис. 6.72, б. Трубка состоит из num = М/2 - 1 сегментов.

Нулевая перетяжка определяется вершинами р0, pv pl + d,p0 + d, где d - вектор экструзии. Эти вершины добавляются в список вершин следующим образом:


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