gluDeleteNurbsRenderer (curveName); В качестве примера использования процедур GLU для вывода на экран сплай-новой кривой приводится код, генерирующий кубический полином Безье. Чтобы получить данную кубическую кривую, параметру степени присваивается значение 4. Используется четыре контрольные точки и выбирается восьмиэлементная открытая равномерная последовательность с четырьмя повторяющимися значениями на каждом конце.

GLfloat knotVector [8] = {0.0, 0.0, 0.0, 0.0,

1.0, 1.0, 1.0, 1.0};

GLfloat ctrlPts [4][3] = { {-4.0, 0.0, 0.0}, {-2.0, 8.0, 0.0},

{2.0, -8.0, 0.0}, {4.0, 0.0, 0.0} };

GLUnurbsObj *cubicBezCurve;

cubicBezCurve = gluNewNurbsRenderer ( ); gluBeginCurve (cubicBezCurve);

gluNurbsCurve (cubicBezCurve, 8, knotVector, 3,

SctrlPts [0][0], 4, GL_MAP1_VERTEX_3); gluEndCurve(cubicBezCurve); Чтобы создать рациональный би-сплайн, символьная константа GL_MAP1_ VERTEX_3 заменяется константой GL_MAP1_VERTEX_4. Затем четырехмерные однородные координаты (хь, У h -, zh ■> h) используются для задания контрольных точек, и получающееся в результате однородное деление дает искомую рациональную полиномиальную форму.

Кроме того, можно использовать функцию gluNurbsCurve и задать список кодов цвета, векторов нормали или свойств текстурных поверхностей, как это демонстрировалось для функций glMapl и д1Мар2. В качестве последнего аргумента функции gluNurbsCurve можно использовать любую символьную константу, такую как GL_MAPl_COLOR_4 или GL_MAP1_N0RMAL. Каждая функция вызывается внутри пары gluBeginCurve/gluEndCurve с двумя ограничениями: нельзя перечислять более одной функции для каждого типа данных, и необходимо включить ровно одну функцию генерации би-сплайна.

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

gluNurbsProperty (splineName, property, value); Параметру splineName присваивается имя би-сплайна, параметру property присваивается символьная константа GLU, определяется свойство визуализации, которое требуется задать, а параметру value присваивается либо численное значение с плавающей запятой, либо символьная константа GLU, которая задает значение выбранного свойства. После оператора gluNewNurbsRenderer можно задать несколько функций gluNurbsProperty. Множество свойств, которые можно задать с помощью функции gluNurbsProperty, включает параметры поверхности, как обсуждается в следующем разделе.

ФУНКЦИИ GLU БИ-СПЛАЙНОВЫХ ПОВЕРХНОСТЕЙ

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

GLUnurbsObj *surfName surfName = gluNewNurbsRenderer ( ); gluNurbsProperty (surfName, propertyl, valuel); gluNurbsProperty (surfName, property2, value2); gluNurbsProperty (surfName, property3, value3);

gluBeginSurface (surfName);

gluNurbsSurface (surfName, nuKnots, uKnotVector, nvKnots,

vKnotVector, uStride, vStride, sctrlPts [0][0][0], uDegParam, vDegParam, GL_MAP2_VERTEX_3) ; gluEndSurface (surfName);


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