Команды библиотеки giu позволяют строить невыпуклые многоугольники
Для хранения точек на границе вырезаемой области — звездочки — ввелев массив:
trim: Array (0..20, 0..1) of GLfloat;
Массив заполняется координатами точек, лежащих поочередно на двух влоя женных окружностях-procedure InitTrim; var
i: Integer; bag in
For i := 0 to 20 do
If Odd(i) then begin // нечетные точки — на внешней окружности trim [i, 01 := 0.5 * cos (i * Pi / 10) + 0.5,-trim [i, 1] 0.5 * sin (i * Pi / 10) * 0.5; end
else begin // четные точки — на внутренней окружности
crim [i, 01 :- 0.25 * cos (1 * Pi / 10) + 0.5; trim [i, 1] :- 0.25 * sin (i * Pi / 10) + 0.5;
end; end;
Внутри операторных скобок построения NURBS-поверхности вслед за командой gluNurbsSurface задаем область вырезки:
rl-jBeginTrim (theNurbl;
gluPwlCurve (theNurb, 21, Striltl, 2, GL0MAP1 TRIM2); zluEndTrlm (theNurbl;
При задании области вырезки используются опять-таки специальные командные скобки, собственно область вырезки задается командой giuFwicurve. Команда задает замкнутую кусочно-линейную кривую; часть NURBS-поверхности, не вошедшая внутрь этой области, не воспроизводится. Второй аргумент — количество точек границы, третий — адрес массива этих точек, четвертым параметром является символьная константа, задающая тип вырезки.
В примере при каждом нажатии пробела вызывается процедура инициализации поверхности, так что вид звездочки каждый раз получается разным, случайным.
Следуюший пример (подкаталог Ех53) также иллюстрирует вырезку NURBS-поверхности.
Опубликовал vovan666
November 01 2013 13:46:27 ·
0 Комментариев ·
4938 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.