Вообще, операторы и параметры GLU, используемые для определения би-сплайновой поверхности, подобны операторам и параметрам би-сплайновой кривой. После вызова процедур визуализации би-сплайна с помощью команды gluNewNurbsRenderer можно задать несколько дополнительных свойств поверхности. В таком случае параметры поверхности задаются с помощью вызова функции gluNurbsSurface. Аналогично можно определить множественные поверхности с разными именами-идентификаторами. Если доступной памяти не хватает для хранения би-сплайнового объекта, система возвращает в переменную surfName значение 0. Параметры uKnotVector и vKnotVector (величины с плавающей запятой) определяют массивы значений узлов в параметрических направлениях и и v. Число элементов в каждом векторе узлов задается параметрами nuKnots и nvKnots. Степень полинома по параметру и указывается как значение uDegParam - 1, а степень полинома по параметру v - как значение vDegParam - 1. Значения с плавающей запятой трехмерных координат контрольных точек перечисляются в массиве ctrlPts, который содержит (nuKnots - uDegParam) х (nvKnots - vDegParam) элементов. Целочисленный сдвиг между началами записей соседних контрольных точек в параметрическом направлении и задается целочисленным параметром uStride, а сдвиг в параметрическом направлении v задается целочисленным параметром vStride. Удаление сплайновой поверхности из памяти выполняется с помощью той же самой функции gluDeleteNurbsRenderer, что использовалась для би-сплайна.

По умолчанию би-сплайновая поверхность автоматически отображается процедурами GLU как набор закрашенных многоугольников, но можно выбрать другие варианты и параметры вывода на экран. Для би-сплайновой поверхности можно задать девять свойств, причем значение каждого свойства можно выбирать из нескольких возможных. В качестве примера присвоения свойств приведем код, в котором задается каркасное мозаичное (с помощью треугольных участков) изображение поверхности.

gluNurbsProperty (surfName, GLU_NURBS_MODE,

GLU_NURBS_TESSELLATOR); gluNurbsProperty (surfName, GLU_DISPLAY_MODE,

GLU_OUTLINE_POLYGON); Процедура мозаичного представления GLU делит поверхность на набор треугольников и отображает каждый треугольник в виде контура. Кроме того, данные треугольные примитивы можно извлечь, используя функцию gluNurbsCallback. Другими значениями свойства GLU_DISPLAY_MODE являются GLU_OUTLINE_PATCH и GLU_FILL (значение по умолчанию). Используя значение GLU_OUTLINE_PATCH, также можно получить каркасное изображение, но при этом поверхность не делится на треугольные участки. Вместо этого подчеркиваются контуры исходной поверхности, а также все заданные настроечные кривые. Единственное другое значение, которое может присваиваться свойству GLU_NURBS_MODE - GLU_NURBS_RENDERER (значение по умолчанию), при установке которого объекты визуализируются так, что обратная связь с мозаичными данными недоступна.

Число точек выборки на единицу длины задается свойствами GLU_U_STEP и GLU_V_STEP. По умолчанию значения обоих - 100. Чтобы задать частоту дискретизации и или v, также необходимо присвоить свойству GLU_SAMPLING_METHOD значение GLU_DOMAIN_DISTANCE. Задавая свойство GLU_SAMPLING_METHOD, можно использовать несколько других значений, определяющих, как должно выполняться мозаичное представление поверхности. Свойства GLU_SAMPLING_TOLERANCE и GLU_PARAMETRIC_TOLERANCE используются для установки максимального шага дискретизации. Задавая свойство GLU_CULLING со значением GL_TRUE, можно улучшить производительность визуализации, не выполняя мозаичное представление объектов, расположенных за объемом наблюдения. Значение по умолчанию функции выборки GLU - GL_FALSE. Наконец, свойство GLU_AUTO_LOAD_MATRIX позволяет загружать с сервера OpenGL матрицы для преобразований проектирования, изменения точки наблюдения и окна просмотра, значение по умолчанию которого -


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