Язык программирования:
C/C++
Среда программирования:
Microsoft Visual Studio 2013
#include <GL/glut.h> #include<Windows.h> int rot = 0;//переменная обозначающая угол поворота int i = 0;//переменная изменяющая цвет int r = 65;//начальное значение красного цвета int g = 150;//начальное значение зеленого void Draw()// функция рисования { glClear(GL_COLOR_BUFFER_BIT);//очистка glColor3ub(r+i, g-i,0);//изменение цвета glPushMatrix();//сохраняем матрицу нашей фигуры glRotatef(-rot, 0.0, 0.0, 1.0);//поворачиваем нашу фигуру glBegin(GL_QUADS);//рисуем вертикальный прямоугольник glVertex2f(-40.0,-150.0); glVertex2f(-40.0, 150.0); glVertex2f(40, 150.0); glVertex2f(40, -150.0); glEnd(); glBegin(GL_QUADS);//рисуем горизонтальный прямоугольник glVertex2f(-150.0, -40.0); glVertex2f(-150.0, 40.0); glVertex2f(150.0, 40.0); glVertex2f(150.0, -40.0); glEnd(); glPopMatrix();//восстановление матрицы нашей фигуры if (rot <= 45) i += 3;//изменение от зеленого цвета к красному if (rot > 46) i -= 3;//изменение от красного цвета к зеленому glutSwapBuffers(); } void Timer(int value)//таймер { rot += 1;// изменение угла поворота if (rot == 45) { Sleep(500);//пауза на 0.5 сек //крест красного цвета r = 200; g = 15; i = 0; } if (rot == 90) { Sleep(500); // крест зеленого цвета r = 65; g = 150; rot = 0; i = 0; } glutPostRedisplay();// обновляем экран glutTimerFunc(15, Timer, 0);// обновляем экран каждые 15 мсек } 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); glMatrixMode(GL_MODELVIEW); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);// буфер рисования и буф сторонних вычислений glutInitWindowSize(400, 400);//размеры окна glutInitWindowPosition(100, 200);//позиция окна glutCreateWindow("Prohibiting Cross");//название окна glutDisplayFunc(Draw);//вызов функции рисования Initialize();//вызов функции инициализации окна glutTimerFunc(50, Timer, 0);//вызов таймера glutMainLoop();//основной цикл return 0; }
Прикрепленный файл | Размер |
---|---|
Samokhin_Prohibiting_Cross.rar | 279.28 кб |