vl + j * (v2 - vl) / nv);

glEnd ( );

}

Таким образом, для поверхности, отображенной как набор закрашенных многоугольных граней (mode = GL_FILL), выход процедур glMapGrid2 и glEvalMesh2 почти такой же, как и у следующего фрагмента программы, и отличается только условием отсутствия ошибки округления у начальных и конечных значений переменных цикла.

for (k = nul; к < nu2; к++)

{

glBegin (GL_QUAD_STRIР);

for (j = nvl; j <= nv2; j ++) {

glEvalCoord2f (ul + к * (u2 - ul) / nu,

vl + j * (v2 - vl) / nv);

glEvalCoord2f (ul + (k + 1) * (u2 - ul) / nu,

vl + j * (v2 - vl) / nv) ;

}

}

Функцию д1Мар2 можно использовать для определения других типов данных, как это описывалось выше для функции glMapl. С этой целью используются такие символьные константы, как GL_MAP2_COLOR_4 и GL_MAP2_NORMAL. Кроме того, можно активизировать несколько функций д1Мар2 для генерации различных комбинаций данных.

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

Хотя би-сплайновые процедуры GLU называются функциями “NLTRBS” (неравномерные рациональные би-сплайны), их можно использовать для генерации би-сплайнов, не являющихся ни неравномерными, ни рациональными. Следовательно, эти процедуры GLU можно использовать для отображения полиномиальных би-сплайнов, имеющих равномерное расположение узлов. Кроме того, процедуры GLU можно использовать для получения сплайнов Безье (рациональных или нерациональных). Чтобы получить би-сплайн (или сплайн Безье), нужно определить имя сплайна, активизировать процедуру визуализации GLU, а затем определить параметры сплайна.

Приведенный ниже код иллюстрирует стандартную последовательность вызовов функций при отображении би-сплайна.

GLUnurbsObj *curveName;

curveName = gluNewNurbsRenderer { );

gluBeginCurve (curveName);

gluNurbsCurve (curveName, nknots, *knotVector, stride,

♦ctrlPts, degParam, GL_MAP1_VERTEX_3) ; gluEndCurve (curveName); В первой строке кривой присваивается имя, затем для этой кривой вызываются процедуры визуализации би-сплайнов GLU с использованием команды gluNewNurbsRenderer. Значение 0 присваивается параметру curveName, когда доступной памяти не хватает для создания би-сплайна. Внутри пары gluBegin-Curve/gluEndCurve задаются параметры кривой с помощью функции gluNurbsCurve. Это позволяет определять множественные участки кривой, и каждому участку присваивается свое имя. Параметр knotVector (число в формате с плавающей запятой) определяет набор значений узлов, а целочисленный параметр nknots задает число элементов вектора узлов. Степень полинома равна degParam - 1. Значения трехмерных координат контрольных точек перечисляются в параметре массива ctrlPts, который содержит nknots - degParam элементов. Наконец, целочисленный сдвиг между началами координат соседних точек в массиве ctrlPts задается целочисленным параметром stride. Если положения контрольных точек записа ны непрерывно (а не вставлены между данными других типов), значение stride устанавливается равным 3. Определенный би-сплайн уничтожается командой


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