glMapGridlf(100,0.0, 10.0); glEvalMeshl(GL_LINE, 0, 100);
После вызова glMapGridlf ( ) устанавливается равномерная сетка в 100 отсчетов, а после вызова glEvalMeshl ( ) будет сформирована кривая.
10.12.2. Поверхности Безье Поверхности Безье формируются в OpenGL примерно по той же методике, что и кривые, только роль функции инициализации играет не glMapl* ( ), a glMap2*( ), а для считывания результатов следует обращаться к фун кции glEvalCoord2*( ) вместо glEvalCoordl*( ). В обеих функциях нужно специфицировать данные, относящиеся к двум независимым параметрам и и v. Например, функция glMap2f() имеет такой формат вызова:
glMap2f(type, u_min, u_max, u_stride, u_order,
v_min, v_max, v_stride, v__order, point_array)
Настройка функции вычисления на работу с бикубической поверхностью Безье, определенной на области (0, 1)х(0, 1), выполняется таким вызовом glMap2f ( ):
glMap2f(GL_MAP_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4, data);
Для обоих независимых параметров нужно задать порядок полинома (аргументы u_order и v_order) и количество значений параметра между сегментами (аргументы u_stride и v_stride), что обеспечивает дополнительную гибкость при формировании поверхности. Обратите внимание на то, что значение v_stride для второго параметра равно 12, поскольку в массиве опорных точек data данные хранятся по строкам. Поэтому для перехода к следующему элементу той же строки нужно "перешагнуть" три числа в формате float, а для перехода к следующему элементу в этом же столбце нужно "перескочить" через 3x4=12 чисел в формате float. Способ вызова программы расчета зависит от того, какой результат мы хотим получить, - вывести на экран сеть или сформировать многоугольники для последующего раскрашивания. Если ставится задача сформировать на экране сеть, то соответствующий фрагмент программы должен выглядеть примерно так, как показано ниже:
for(j=0; j<100; j++) {
glBegin(GL_LINE_STRIP);
10.12. Кривые и поверхности в OpenGL
for(i=0; i<100; i++) glEvalCoord2f( (float)i/100.0, (float)j/100.0) ; glEnd();