Подразделение сплайна проще всего применяется к участкам кривой Безье, поскольку кривая начинается в первой контрольной точке и заканчивается в последней, параметр и всегда изменяется в диапазоне от 0 до 1, и легко определить, какие контрольные точки “достаточно близки” к траектории кривой. Чтобы применить подразделение Безье к другим сплайновым представлениям, реализуется следующая последовательность операций.

1. Преобразовать текущее сплайновое представление в представление Безье.

2. Применить алгоритм подразделения Безье.

3. Преобразовать представление Безье в исходное сплайновое представление.

ФУНКЦИИ OpenGL АППРОКСИМАЦИИ СПЛАЙНАМИ

С помощью функций OpenGL можно выводить на экран сплайны Безье и би-сплайны, а также настроечные кривые сплайновых поверхностей. Корневая библиотека содержит функции Безье, a OpenGL Utility (GLU) имеет функции построения би-сплайнов и настроечных функций. Функции Безье часто реализованы на аппаратном уровне, а функции GLU позволяют работать с би-сплайнами.

ФУНКЦИИ OpenGL СПЛАЙНОВ БЕЗЬЕ

Задание параметров и активизация процедур отображения кривых выполняется с помощью следующих функций OpenGL.

glMapl* (GL_MAP1_VERTEX_3, uMin, uMax, stride, nPts, *ctrlPts); glEnable (GL_MAP1_VERTEX_3); Обратная процедура выполняется с помощью такой команды. glDisable {GL_MAP1_VERTEX_3); Код-суффикс f или d, присоединенный к glMapl, указывает на использование данных с плавающей запятой (floating point) или двойной точности (double). Минимальное и максимальное значения параметра кривой и задаются в uMin и uMax, хотя эти значения для кривых Безье обычно равны 0 и 1 соответственно. Значения (числа с плавающей запятой) контрольных точек Безье в трехмерных декартовых координатах перечисляются в массиве ctrlPts, а число элементов в этом массиве задается параметром nPts как положительное целое число. Параметру stride присваивается целочисленное смещение, указывающее число элементов данных между началом одной точки в массиве ctrlPts и началом следующего списка координат. Для трехмерного списка контрольных точек задается stride = 3. Параметр stride может иметь большее значение, если контрольные точки задаются с использованием четырехмерных однородных координат, или вместе с координатами указываются другие данные, например, коды цвета. Чтобы выразить положения контрольных точек в четырехмерных однородных координатах (x, у, z, h), достаточно изменить значение stride и поменять символьную константу в glMapl и glEnable на GL_MAP1_VERTEX_4.

Задав параметры Безье и активизируя процедуры генерации кривых, нужно вычислить точки на пути сплайна и отобразить полученную кривую. Точки вдоль траектории кривой рассчитываются с помощью функции

glEvalCoordl* (uValue); Когда функция glEvalCoordl обрабатывает значение параметра кривой и, она генерирует функцию glVertex3. Таким образом, чтобы получить кривую Безье, нужно последовательно вызывать функцию glEvalCoordl, дающую набор точек на кривой для использованных выбранных значений из диапазона от uMin до иМах. Соединяя эти точки прямыми отрезками, можно аппроксимировать сплайновую кривую ломаной линией.


⇐ вернуться назад | | далее ⇒