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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@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 кб