Предоставьте пользователю возможность изменять натяжение, смещенность и непрерывность каждой из внутренних контрольных точек посредством нажатия клавиш. Например, пользователь может отметить мышью требуемую контрольную точку и нажать клавишу «v» для уменьшения значения натяжения в этой точке на некоторую небольшую фиксированную величину, а клавишу «V» - для соответствующего увеличения натяжения. Пользователь может нажать клавиши <<Ь» или «В» для изменения смещенности и «с» или «С» - для изменения непрерывности.
Тематическое задание 11.8. Многоуважаемый чайник Уровень сложности II.
Напишите программу, рисующую средствами OpenGL классический чайник с различных точек зрения. Не используйте GLUT-версию чайника; сформируйте свой собственный чайник из фрагментов поверхностей.
Таблица 11.2. Данные для профиля крышки чайника
i | X | z |
0,8 | ||
2,7 | ||
0,2 | 2,55 | |
0,4 | 2,4 | |
1,3 | 2,4 | |
1,3 | 2,25 |
Чайник состоит из четырех основных частей. Корпус (body) является поверхностью вращения, профиль которой состоит из трех кривых Безье в плоскости xz, как описано в разделе «Поверхности враще-
Создание кривых и поверхностей
ния на базе В-сплайнов». Ручка (handle) состоит из четырех лоскутов Безье, как описано в разделе «Лоскуты Безье». Крышка (lid) - это поверхность вращения, профиль которой описывается двумя кривыми Безье (рис. 11.67), а данные для нее приведены в табл 11.2. Носик (spout), подобно ручке, состоит из четырех лоскутов Безье. На рис. 11.68, а показан носик в разрезе, а также сечение контрольного полиэдра для лоскутов. Как и ручка, поверхность носика симметрична относительно плоскости xz. Весь верхний «/-положительный лоскут содержит следующие 16 контрольных точек: на базе С9 D0: (1,7,0,0,0,45), (1,7,0,66,0,45), (1,7,0,66,1,275), (1,7,0,0,1,275); на базе С,, D-. (3,1,0,0,0,675), (3,1,0,66,0,675), (2,6,0,66,1,275), (2,6,0,0,1,275); на базе Сг, D2: (2,4,0,0,1,875), (2,4,0,25,1,875), (2,3,0,25,1,95), (2,3,0,0,1,95);