Язык программирования:
C/C++
Среда программирования:
Microsoft Visual Studio 2013
#include <GL/glut.h> float rot = 0.0;//переменная обозначающая угол поворота void Draw()// функция рисования { glClear(GL_COLOR_BUFFER_BIT);//очистка glPushMatrix();//сохраняем матрицу нашей фигуры glRotatef(-rot, 0.0, 0.0, 1.0);// перемещаем нашу фигуру for (int i = 0; i < 40; i ++) { glColor3ub(29 + i * 5, 5 + i * 5, 0 + i * 3);// изменяем цвет каждого квадрата от самого темного к светлому glPushMatrix();//сохранение матрицы квадрата glRotatef(-i*0.5, 0.0, 0.0, 1.0);// поворачиваем каждый квадрат на 0.5 градус glBegin(GL_QUADS);//рисуем наши квадраты glVertex2f(-100, -100); glVertex2f(-100,100); glVertex2f(100, 100); glVertex2f(100, -100); glEnd(); glPopMatrix();//восстановление матрицы квадрата } glColor3ub(255, 255, 255); glPushMatrix();//сохранение матрицы квадрата glRotatef(-21, 0.0, 0.0, 1.0); glBegin(GL_QUADS);// рисуем центральный белый квадрат glVertex2f(-100 , -100 ); glVertex2f(-100, 100 ); glVertex2f(100, 100); glVertex2f(100 , -100); glEnd(); glPopMatrix();//восстановление матрицы квадрата glPopMatrix();//восстановление матрицы нашей фигуры rot += 2;// изменяем угол поворота if (rot >= 360)//проверка на прохождение полного круга rot -= 360; glutSwapBuffers(); } void Timer(int value)//таймер { glutPostRedisplay();// обновляем экран glutTimerFunc(50, Timer, 0);// обновляем экран каждые 50 мсек } void Initialize()// функция инициализации окна { glClearColor(0.0, 0.0, 0.0, 1.0);//очищаем фон цветом glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-200.0, 200.0, -200.0, 200.0,-200.0,200.0);//рисуем координатную сеть, где середина экрана точка(0,0,0) glMatrixMode(GL_MODELVIEW); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);// буфер рисования и буф сторонних вычислений glutInitWindowSize(400, 400);//размеры окна glutInitWindowPosition(100, 200);//позиция окна glutCreateWindow("Turning square");//название окна glutDisplayFunc(Draw);//вызов функции рисования Initialize();//вызов функции инициализации окна glutTimerFunc(50, Timer, 0);//вызов таймера glutMainLoop();//основной цикл return 0; }
Прикрепленный файл | Размер |
---|---|
Samokhin_Turning_square.rar | 154.09 кб |