#include #include #include #include GLfloat ctrlpoints[4][4][3]={ {{-1.5,-1.5,4.0},{-0.5,-1.5,2.0},{0.5,-1.5,-1.0},{1.5,- 1.5,2.0}}, {{-1.5,-0.5,1.0},{-0.5,-0.5,3.0},{0.5,-0.5,0.0},{1.5,-0.5,- 1.0}}, {{-1.5,0.5,4.0},{-0.5,0.5,0.0},{0.5,0.5,3.0},{1.5,0.5,4.0}}, {{-1.5,1.5,-2.0},{-0.5,1.5,-2.0},{0.5,1.5,0.0},{1.5,1.5,-1.0}} }; void display() { int i,j; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(0.0,0.0,0.0); glLoadIdentity(); glRotatef(85.0,1.0,1.0,1.0); for(j=0;j<=8;j++) { glBegin(GL_LINE_STRIP); for(i=0;i<=30;i++) glEvalCoord2f((GLfloat)i/30.0,(GLfloat)j/8.0); glEnd(); glBegin(GL_LINE_STRIP); for(i=0;i<=30;i++) glEvalCoord2f((GLfloat)j/8.0,(GLfloat)i/30.0); glEnd(); } glFlush(); } void init() { glClearColor(1.0,1.0,1.0,0.0); glLineWidth(2.0); glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]); glEnable(GL_MAP2_VERTEX_3); glMapGrid2f(20,0.0,1.0,20,0.0,1.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); } void reshape(int w, int h) { // Размер поля просмотра устанавливается равынм размеру окна glViewport(0, 0, (GLsizei) w, (GLsizei) h); // Обновление матрицы наблюдения glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Предотвращает деление на 0 if (w <= h) glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLfloat)w/(GLfloat)h, 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); // Обновление матрицы наблюдения glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }