#include /* объявляется указатель с именем 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(); }