#include #include #include #include using namespace std; //Инициализация void init1(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } //Отображение void display1(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); //Очистить матрицу glLoadIdentity(); //Видовая трансформация(камера) gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); //Модельная трансформация glScalef(1.0,2.0,1.0); glutWireCube(1.0); glFlush(); } //Изменение размеров окна void reshape1(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0); glMatrixMode(GL_MODELVIEW); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Инициализация void init2(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } //Изменение размеров окна void reshape2(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0,(GLfloat) w/(GLfloat) h,1.0,20.0); glMatrixMode(GL_MODELVIEW); } //Отображение void display2(void) { GLdouble eqn[4]={0.0,1.0,0.0,0.0}; GLdouble eqn2[4]={1.0,0.0,0.0,0.0}; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glPushMatrix(); glTranslatef(0.0,0.0,-5.0); //Отсечь нижнюю половину (y<0) glClipPlane(GL_CLIP_PLANE0,eqn); glEnable(GL_CLIP_PLANE0); //Отсечь левую половину (x<0) glClipPlane(GL_CLIP_PLANE1,eqn2); glEnable(GL_CLIP_PLANE1); glRotatef(90.0,1.0,0.0,0.0); glutWireSphere(2.0,20,16); glPopMatrix(); glFlush(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int year=0, day=0; //Инициализация void init3(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } //Изменение размеров окна void reshape3(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0,(GLfloat) w/ (GLfloat) h,1.0,20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); } //Отображение void display3(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glPushMatrix(); //Рисуем солнце glutWireSphere(1.0,20,16); glRotatef((GLfloat)year,0.0,1.0,0.0); glTranslatef(2.0,0.0,0.0); glRotatef((GLfloat)day,0.0,1.0,0.0); //Рисуем планету glutWireSphere(0.2,10,8); glPopMatrix(); glutSwapBuffers(); } //Реакция на клавиатуру void keyboard(unsigned char key,int x, int y) { switch(key) { case 'd': day=(day+10)%360; glutPostRedisplay(); break; case 'D': day=(day-10)%360; glutPostRedisplay(); break; case 'y': year=(year+5)%360; glutPostRedisplay(); break; case 'Y': year=(year-5)%360; glutPostRedisplay(); break; default: break; } } int main(int argc, char **argv) { setlocale(LC_CTYPE, "rus"); int number; cout <<"1 - Куб" <>number; if (number == 1) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow("Transformed Cube"); init1(); glutDisplayFunc(display1); glutReshapeFunc(reshape1); glutMainLoop(); } else if (number == 2) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow("Wireframe Sphere with Two Clipping Planes"); init2(); glutDisplayFunc(display2); glutReshapeFunc(reshape2); glutMainLoop(); } else if (number == 3) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow("Planetary System"); init3(); glutDisplayFunc(display3); glutReshapeFunc(reshape3); glutKeyboardFunc(keyboard); glutMainLoop(); } else { return 0; } return 0; }