#include <gl\glut.h>
/* объявляется указатель с именем nobj, который указывает на структуру LUnurbsObj */
GLUnurbsObj* nobj;
//массив точек определяющего многоугольника
GLfloat cltarray[][3] = {{-0.9, -0.8, 0.0}, {-0.2, 0.8, 0.0}, {0.2, -0.5, 0.0}, {0.9, 0.8, 0.0}};
void init(void)
{
glClearColor(1,1,1,1);
//создается NURBS-объект
nobj = gluNewNurbsRenderer();
gluNurbsProperty(nobj, GLU_SAMPLING_TOLERANCE, 25.0);
}
void Display()
{
//массив содержащий значения открытого равномерного узлового вектора
GLfloat knot[] = {0.0,0.0,0.0,1.0,2.0,2.0,2.0};
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(3.0);
glColor3f(0,0.3,1);
// генерация и отображение NURBS кривой
gluNurbsCurve(nobj, 7, knot, 3, &cltarray[0][0], 3, GL_MAP1_VERTEX_3);
glPointSize(4.0);
glColor3f(0.0,0.0,1);
glBegin(GL_POINTS);
for (int i = 0; i < 4; i++){
glVertex3f(cltarray[i][0], cltarray[i][1], cltarray[i][2]);
}
glEnd();
glFlush();
}
void main()
{
//задаем параметры окна
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
//задаем размеры окна
glutInitWindowSize(480, 480);
// задаем позицию окна
glutInitWindowPosition(100,100);
//создаем окна
glutCreateWindow(" ");
init();
//задаем функцию обратного вызова изображения на экран
glutDisplayFunc(Display);
//отображение окна
glutMainLoop();
}