Язык программирования:
C/C++
Среда программирования:
Microsoft Visual C++ 2010 Express
#include "stdafx.h" #include <glut.h> #include <stdio.h> void Initialize(){ //Выбрать фоновый (очищающий) цвет glClearColor(0.0,0.0,0.0,0.0); //Установить проекцию glMatrixMode(GL_PROJECTION); //обнуление трансформации (обнуляем матрицу) glLoadIdentity(); glOrtho(0.0,100.0,0.0,100.0,-100.0,100.0); } double i=0, j=0; double k=15;//переменная, определяющая "высоту" конкретного пламени int flag=0;//переменная, которая определяет увеличение/уменьшение полосы double len=0;//переменная, которая определяет на сколько изменить длину полосы void Draw(){//основная функция glClear (GL_COLOR_BUFFER_BIT); for (i=0; i<=100; i+=0.8){//рисуем пламя в виде полос glBegin(GL_POLYGON); //рисуем полосу в виде прямоугольника, задавая свой цвет каждой вершине glColor3f(1.0,0.5,0.0); glVertex3f(i,5+j,0.0); glColor3f(1.0,0.0,0.0); glVertex3f(i,35+len+j,0.0); glColor3f(1.0,0.0,0.0); glVertex3f(i+1,35+len+j*2,0.0); glColor3f(1.0,1.0,0.0); glVertex3f(i+1,5+j/5,0.0); glEnd(); //меняем длину полосы в зависимости от значения j, чтобы получить пламя if (j<k && flag==0) j+=1; if (j>=k) flag=1; if (flag==1 && j>0) j-=1; if (j<=0){ flag=0; j=0; k+=5;} if (k>=30) k=15;//меняем значение, чтобы изменить длину пламени } glutSwapBuffers(); // Отрисовка из буффера glFlush(); } int A=0; void Timer(int value){ // ф-ия таймера ++A; glutDisplayFunc(Draw);// вызываем ф-ию Draw //перемещаем полосы, меняя их длины с помощью len len=0; if (flag==0) while (len<=j) len+=0.2;//увеличиваем значение у при новом вызове таймера glutPostRedisplay(); // ф-ия перерисовки окна glutTimerFunc(200, Timer, 1); // снова вызываем ф-ию таймера через 200 мили секунд } int main(int argc, char **argv) { // войти в главный цикл // инициализация GLUT и создание окна glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(200,100); //Позиция окна glutInitWindowSize(500,500); // размер окна glutCreateWindow("Языки пламени"); // имя окна // очистка буфера цвета и глубины (очищаем экран) glClear (GL_COLOR_BUFFER_BIT); Initialize(); // регистрация обратных вызовов glutDisplayFunc(Draw); //вызов ф-ии Draw glutTimerFunc(5000, Timer, 1); // вызов ф-ии таймера glMatrixMode(GL_MODELVIEW); // Выбор видовой матрицы glutMainLoop(); //программы GLUT входят в цикл обработки сообщений функцией glutMainLoop() return 1; }
Прикрепленный файл | Размер |
---|---|
Kursaitova Asie Tongues of flame.zip | 1.94 Мб |