include gl glut объявляется указатель именем nobj который указывает на

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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();
}