Язык программирования:
C/C++
Среда программирования:
microsoft visual studio 2013
#include <glut.h> #include <math.h> #include <stdlib.h> #include <iostream> using namespace std; float angle = 6.0;//движение по y, куб 1 float angle2 = 0.0;//поворот float angle3 = 6.0;//движение по y, куб 2 float angle4 = 0.0;//смещение по x float angle5 = 6.0;//движение по y, куб 3 float angle6 = 0.0;//поворот float angle7 = 1.0;//масштабирование float angle8 = 0.0;//смещение по х float angle9 = 0.0;//смещение по y float aut;//предел 1 float aut2;//предел 2 float aut3;//предел 3 float aut4;//предел 4 float aut5;//предел 5 float aut6;//предел 6 float aut7;//предел 7 float x;//координаты x float y;//координаты y //сохранение пропорций void proporsion(int w, int h) { if (h==0) { h=1; } float ratio = float(w)/h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,ratio,500,500); glMatrixMode(GL_MODELVIEW); } //рисование void paint(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буфера glPushMatrix();//сохранение матрицы glTranslatef(angle8, angle9, 0);//перемещение фигуры glRotatef(angle6, 1,1,0);//поворот фигуры glScalef(angle7, angle7, 0);//масштабирование фигуры //куб 1 glPushMatrix(); //сохранение матрицы glTranslatef(angle4, 0, 0);//перемещение фигуры glRotatef(angle2, 0,0,1);//поворот фигуры glBegin(GL_QUADS);//рисование квадратов glColor3ub(0,0,0);//установка цвета glVertex2f(-0.5, -0.5);//точка 1 glVertex2f(-0.5, 0.5);//точка 2 glVertex2f(0.5, 0.5);//точка 3 glVertex2f(0.5, -0.5);//точка 4 glEnd();//завершение glBegin //куб 2 glPushMatrix();//сохранение матрицы glBegin(GL_QUADS);//рисование квадратов glColor3ub(0,0,0);//установка цвета glVertex2f(-0.5, -0.5+angle); glVertex2f(-0.5, 0.5+angle); glVertex2f(0.5, 0.5+angle); glVertex2f(0.5, -0.5+angle); glEnd();//завершение glBegin glPopMatrix();//восстановление матрицы glPopMatrix();//восстановление матрицы glPushMatrix();//сохранение матрицы //куб 3 glTranslatef(angle4, 0, 0);//перемещение фигуры glBegin(GL_QUADS);//рисование квадратов glColor3ub(0,0,0);//установка цвета glVertex2f(-0.5, -0.5+angle3); glVertex2f(-0.5, 0.5+angle3); glVertex2f(0.5, 0.5+angle3); glVertex2f(0.5, -0.5+angle3); glEnd();//завершение glBegin glPopMatrix();//восстановление матрицы //куб 4 glPushMatrix();//сохранение матрицы glBegin(GL_QUADS);//рисование квадратов glColor3ub(0,0,0);//установка цвета glVertex2f(-0.5, -0.5+angle5); glVertex2f(-0.5, 0.5+angle5); glVertex2f(0.5, 0.5+angle5); glVertex2f(0.5, -0.5+angle5); glEnd();//завершение glBegin glPopMatrix();//восстановление матрицы glPopMatrix();//восстановление матрицы glPopMatrix();//восстановление матрицы glutSwapBuffers(); } //установка таймера void Timer(int) { angle -= 0.1 - aut; if(angle < 1.1)//когда первый куб приземлился { aut = 0.1;//клин angle2 = angle2 + 5 - aut2;//поворот на 90 гр } if(angle2 > 89)//когда повернут на 90 { aut2 = 5;//клин angle3 -= 0.1 - aut3;//падает второй куб } if (angle3 < 1.1)//когда второй куб упал { aut3 = 0.1;//клин angle4 +=0.1 - aut4;//смешение фигуры } if (angle4 > 1.0)//когда сместилась { aut4 = 0.1;//клин angle5 -= 0.1 - aut5;//падает 3й куб } if (angle5 < 1.1)//когда упал { aut5 = 0.1;//клин angle6 += 5 - aut6;//поворот angle7 = angle7 - 0.01 + aut7;//уменьшение } if (angle7 < 0.51)//когда фигура уменьшилась до начальных размеров { //возвращение начальных параметров angle = 6.0; angle2 = 0.0; angle3 = 6.0; angle4 = 0.0; angle5 = 6.0; angle6 = 0.0; angle7 = 1.0; angle8 = 0.0; angle9 = 0.0; aut = 0; aut2 = 0; aut3 = 0; aut4 = 0; aut5 = 0; aut6 = 0; aut7 = 0; } if(angle6 > 90)//когда прокрутил на 90 смещение фигуры { angle8 = -0.25; angle9 = -0.25; } if(angle6 > 179)//когда прокрутил на 180 { aut6 = 5;//клин } glutTimerFunc(15,Timer,0);//обновлять экран каждые 15мсек glutPostRedisplay(); } int main(int argc, char **argv) { // инициализация glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//double: буфер рисования и буф сторонних вычислений glutInitWindowPosition(100, 100);//позиция окна glutInitWindowSize(500, 500);//размеры окна glutCreateWindow("куб");//название окна glClearColor(1.0, 1.0, 1.0, 1.0);//цвет окна glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);//установка границ glutDisplayFunc(paint);//вызов функции рисования glutReshapeFunc(proporsion);//вызов функции сохранения пропорций glutTimerFunc(0,Timer,0);//вызов таймера glutMainLoop();//основной цикл return 1; }
Прикрепленный файл | Размер |
---|---|
Bruns_Cube.rar | 461.33 кб |