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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
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.rar461.33 кб