Аргумент type задает тип объекта, который будет представлен полиномом Безье. Можно назначать в качестве значения этого аргумента константы, задающие трех- и четырехмерные геометрические точки, цвет в формате RGBA, нормали, индексированные цвета и координаты текстур (от одно- до четырехмерных). Указатель на массив опорных точек полинома передается функции через аргумент point_array. Аргументы u_min и u_max определяют область существования параметра полинома. Аргумент stride представляет собой количество значений параметра между сегментами кривой. Например, для кубического В-сплайна приходятся три точки на каждый сегмент кривой. Значение аргумента order должно быть на единицу больше степени полинома. Для формирования кубической трехмерной кривой в форме В-сплайна, определенной на интервале (0, 1), функции glMaplf ( ) следует передать такой набор аргументов: point data[]={…}

glMaplf(GL_MAP_VERTEX_3, 0.0, 1.0, 3, 4, data);

Можно в одной и той же программе инициализировать несколько функций расчета полиномов, каждую со своим набором аргументов. Например, могут параллельно работать функции расчета полиномиальной кривой и нормали, аппроксимированной полиномом. После настройки функция активизируется посредством вызова

glEnable(type);

Кривые и криволинейные поверхности

Если функция расчета активизирована, то можно получить от нее значение полинома, вызвав функцию

glEvalCoordlf(и); Таким образом, обращение к glEvalCoordlf ( ) может заменить обращение к функциям glVertex( ), glColor( ) и glNormal( ). Все зависит от того, как она была настроена при инициализации. Пусть, например, функция расчета настроена на формирование кривой Безье на интервале (0, 10) по некоторому массиву опорных точек. Набор из 100 точек кривой, равномерно отстоящих на этом интервале, можно получить с помощью такого фрагмента программы:

glBegin(GL_LINE_STRIP)
for(i=0; i<100; i++) glEvalCoordlf( (float)i/100.0); glEnd();

Если значения параметра и распределены равномерно, то для вычисления точек на кривой следует использовать функции glMapGridlf ( ) и glEvalMeshl( ), например:


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