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. Определенный би-сплайн уничтожается командой