Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Как реализовать в данном примере границы расчёта?
Не работает, выводит это: Process terminated with status 4258096 (0 minute(s), 2 second(s)) при этом открывается консоль с тем же числом

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
C/C++
Среда программирования: 
microsoft visual studio 2013

#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
float aut1, aut2, aut3,aut4,aut5,aut6,aut7;//блок
float tua1,tua2,tua3,tua4,tua5,tua6,tua7;//переменная возвращающая белый цвет
float color1 = 255;//белый цвет по умолчанию
float color2 = 255;
float color3 = 255;
float color4 = 255;
float color5 = 255;
float color6 = 255;
float color7 = 255;
float x, 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);// очистка буфера
 
			//1 полигон
			glBegin(GL_POLYGON);//рисуем полигон
			glColor3ub(color1,color1,color1);//цвет 105
			glVertex2f(-0.5, 0.5);//координаты
			glVertex2f(-1.0, 1.0);
			glVertex2f(-1.0, 1.5);
			glVertex2f(-0.5, 2.0);
			glVertex2f(-0.0, 1.5);
			glVertex2f(-0.0, 1.0);
			glEnd();//завершение Begin
			//2 полигон
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color2,color2,color2);//цвет
			glVertex2f(-0.5+1.05, 0.5);
			glVertex2f(-1.0+1.05, 1.0);
			glVertex2f(-1.0+1.05, 1.5);
			glVertex2f(-0.5+1.05, 2.0);
			glVertex2f(-0.0+1.05, 1.5);
			glVertex2f(-0.0+1.05, 1.0);
			glEnd();
			//3 полигон
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color3,color3,color3);//цвет
			glVertex2f(-0.5+1.552, 0.5-1.05);
			glVertex2f(-1.0+1.552, 1.0-1.05);
			glVertex2f(-1.0+1.552, 1.5-1.05);
			glVertex2f(-0.5+1.552, 2.0-1.05);
			glVertex2f(-0.0+1.552, 1.5-1.05);
			glVertex2f(-0.0+1.552, 1.0-1.05);
			glEnd();
			//4 полигон
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color4,color4,color4);//цвет
			glVertex2f(-0.5+1.05, 0.5-2.1);
			glVertex2f(-1.0+1.05, 1.0-2.1);
			glVertex2f(-1.0+1.05, 1.5-2.1);
			glVertex2f(-0.5+1.05, 2.0-2.1);
			glVertex2f(-0.0+1.05, 1.5-2.1);
			glVertex2f(-0.0+1.05, 1.0-2.1);
			glEnd();
			//5 полигон
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color5,color5,color5);//цвет
			glVertex2f(-0.5, 0.5-2.1);
			glVertex2f(-1.0, 1.0-2.1);
			glVertex2f(-1.0, 1.5-2.1);
			glVertex2f(-0.5, 2.0-2.1);
			glVertex2f(-0.0, 1.5-2.1);
			glVertex2f(-0.0, 1.0-2.1);
			glEnd();	
			//6 полигон
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color6,color6,color6);//цвет
			glVertex2f(-0.5-0.52, 0.5-1.05);
			glVertex2f(-1.0-0.52, 1.0-1.05);
			glVertex2f(-1.0-0.52, 1.5-1.05);
			glVertex2f(-0.5-0.52, 2.0-1.05);
			glVertex2f(-0.0-0.52, 1.5-1.05);
			glVertex2f(-0.0-0.52, 1.0-1.05);
			glEnd();
			//7 полигон
 
			glBegin(GL_POLYGON);//рисуем  полигон
			glColor3ub(color7,color7,color7);//цвет
			glVertex2f(-0.5+0.52, 0.5-1.05);
			glVertex2f(-1.0+0.52, 1.0-1.05);
			glVertex2f(-1.0+0.52, 1.5-1.05);
			glVertex2f(-0.5+0.52, 2.0-1.05);
			glVertex2f(-0.0+0.52, 1.5-1.05);
			glVertex2f(-0.0+0.52, 1.0-1.05);
			glEnd();
			glutSwapBuffers();
 
}
//установка таймера
void Timer(int)
{
 
	color1 = color1 - 5 + aut1 + tua1;//становление черным первый полигон
 
	color2 = color2 + tua2;//становление белым второй полигон
	color3 = color3 + tua3;
	color4 = color4 + tua4;
	color5 = color5 + tua5;
	color6 = color6 + tua6;
	color7 = color7 + tua7;
 
	if (color1 < 150)//когда первый полигон стал серым
	{
		color2 = color2 - 5 + aut2 + tua2;//становление черным второго полигона
		if (color1 < 80)	{		aut1 = 5;	}//когда первый полигон стал черным остановить изменение цвета
	}
 
	if (color2 < 150)
	{
		color3 = color3 - 5 + aut3;
		if (color2 < 80)	{		aut2 = 5;	}
	}
 
	if (color3 < 150)
	{
		color4 = color4 - 5 + aut4;
		if (color3 < 80)	{	aut3 = 5;	}
	}
 
	if (color4 < 150)
	{
		color5 = color5 - 5 + aut5;
		if (color4 < 80)		{	aut4 = 5;	}
	}
 
	if (color5 < 150)
	{
		color6 = color6 - 5 + aut6;
		if (color5 < 80)	{	aut5 = 5;	}
	}
 
	if (color6 < 150)
	{
		color7 = color7 - 5 + aut7;
		if (color6 < 80)	{	aut6 = 5;	}
	}
 
 
	if (color7 < 80)//когда последний полигон стал черным
		{
		aut7 = 5;//блок
 
		tua1 = 5;//исчезновение первого
		if (color1 > 150)//когда на половину исчез
			{
				tua2 = 5;//исчезновение второго
				if (color1 > 250)//когда исчез
				{
					tua1 = 0;//блок
				}
			}
 
		if (color2 > 150)
			{
				tua3 = 5;
				if (color2 > 250)	{	tua2 = 0;	}
			}
 
		if (color3 > 150)
			{
				tua4 = 5;
				if (color3 > 250)	{	tua3 = 0;	}
			}
 
		if (color4 > 150)
			{
				tua5 = 5;
				if (color4 > 250)	{	tua4 = 0;	}
			}
 
		if (color5 > 150)
			{
				tua6 = 5;
				if (color5 > 250)	{	tua5 = 0;	}
			}
 
		if (color6 > 250)//когда предпоследний полигон стал белым обнуляю параметры
			{
			tua6 = 0;	aut1 = 0;	aut2 = 0;	aut3 = 0;   aut4 = 0;  aut5 = 0;	    aut6 = 0;	    aut7 = 0;
		    tua1 = 0; tua2 = 0;	 tua3 = 0;	 tua4 = 0; tua5 = 0;	 tua6 = 0;	 tua7 = 0;
		    color1 = 255; color2 = 255; color3 = 255; color4 = 255;	 color5 = 255; color6 = 255; color7 = 255;
			}
 
 
 
		}
 
	glutTimerFunc(8,Timer,0);//обновлять экран каждые 8мсек
	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("OverWatch");//название окна
	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;
}

Прикрепленный файлРазмер
BrunsOverWatch.rar943.43 кб