Вместо того чтобы отображать кривые Безье, можно использовать функцию glMapl и задать значения других типов данных с помощью семи символьных констант OpenGL. Символьная константа GL_MAPl_COLOR_4 в массиве ctrlPts позволяет задавать список из четырех элементов (красный, зеленый, синий, альфа-фактор). Затем можно сгенерировать линейно интерполированный набор цветов, используемый в различных приложениях, причем данные сгенерированные коды цвета не меняют текущие цветовые настройки. Аналогично с помощью GL_MAP1_INDEX можно задать список значений из таблицы индексов цвета. При использовании символьной константы GL_MAPl_NORMAL в массиве ctrlPts задается список трехмерных векторов нормали к поверхностям. Остальные четыре символьные константы применяются при наличии информации о текстуре поверхности.

Несколько функций glMapl можно активизировать одновременно, тогда для каждого разрешенного типа данных вызовы glEvalCoordl или glMapGridl и glEvalMeshl дают точки данных. Это позволяет генерировать комбинации координатных точек, кодов цвета, векторов нормали к поверхности и данных, касающихся текстуры поверхности. Однако одновременно активизировать GL_MAP1_VERTEX_3 и GL_MAP1_VERTEX_4 нельзя, и в любой момент времени может быть активным только один генератор поверхностной текстуры.

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

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

glMap2* (GL_MAP2_VERTEX_3, uMin, uMax, uStride, nuPts, vMin, vMax, vStride, nvPts, *ctrlPts); glEnable (GL_MAP2_VERTEX_3); К функции glMap2 присоединяется код-суффикс f или d, указывающий, какие данные используются - с плавающей запятой или двойной точности. Для поверхности задаются минимальные и максимальные значения обоих параметров: и и v. Трехмерные декартовы координаты контрольных точек Безье перечислены в двухмерном массиве ctrlPts, а целочисленный размер массива задается параметрами nuPts и nvPts. Если контрольные точки должны задаваться четырехмерными однородными координатами, вместо GL_MAP2_VERTEX_3 используется символьная константа GL_MAP2_VERTEX_4. Целочисленное смещение между началом записи с координатами контрольной точки ри координатами точки р^+і,* указывается в uStride. Целочисленное смещение между началом записи с координатами контрольной точки рjtk и координатами точки pJtk+\ указывается в vStride. Это позволяет смешивать координатную информацию с другими данными. Процедуры формирования поверхности Безье отключаются командой

glDisable GL_MAP2_VERTEX_3

Координаты точек на поверхности Безье можно вычислить следующим образом:

glEvalCoord2* (uValue, vValue); или так:

glEvalCoord2*v (uvArray); Чтобы отобразить на экране поверхность Безье, многократно вызывается процедура glEvalCoord2, которая генерирует ряд функций glVertex3. Этот процесс подобен генерации сплайновой кривой, за исключением того, что функция имеет два параметра и и». Например, используя приведенный ниже код, поверхность, определенную 16 контрольными точками, упорядоченными в сетку 4 на 4, можно отобразить как набор линий поверхности. Сдвиг между координатами точек в направлении и равен 3, а сдвиг между координатами точек в направлении v - 12. Координаты всех точек задаются тремя значениями, причем координата у в каждой группе из четырех точек постоянна.


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