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

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

Построения
на плоскости (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 ; //переменная увеличивающая градус
float angle2 ;//переменная уменьшающая градус
int t = 500; //кол-во рисуемых линий
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); // очистка буфера
	glLineWidth(3); //задание толщины линии
 
	glPushMatrix();//сохранение матрицы
	glBegin(GL_LINE_STRIP);//рисование замкнутых ломаных
	glColor3ub(255, 255, 255);//установка цвета
	//рисование верхнего круга
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / (float)t * 3.1415f * 2;// 360 градусов
		x = sin(a)*3.5;
		y = cos(a)/1.2+3.8;
		glVertex2f(x, y);//рисуем точки по которым будет проводиться линия
 
	}
	glEnd();//завершение glBegin
	glPopMatrix();//восстановление матрицы
 
	//рисование нижнего круга
	glPushMatrix();
	glBegin(GL_LINE_STRIP);
	glColor3ub(255, 255, 255);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / (float)t * 3.1415f * 2;
		x = sin(a)*3.0;
		y = cos(a)*1.6-2.9;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//рисование линий
	glPushMatrix();
	glBegin(GL_LINES);
	glColor3ub(255, 0, 0);
 
	float a =  3.1415f * 1.0;//180 градусов
	float a1 =  3.1415f * angle;//увеличение градуса
	//цикл в котором создается 36 линий с одинаковым промежутком в 10 градусов, вершины которых лежат на верхнем и нижнем кругах
	for(int i =  0; i < 36; i++)
	{
		//верхняя точка
		x = cos(a1-(a/18)*i)*3.5;
		y = (sin(a1-(a/18)*i))/1.2+3.8;
		glVertex2f(x, y);
		//нижняя точка
		x = sin(a1+(a/18)*i)*3.0;
		y = (cos(a1+(a/18)*i)*1.6-2.9);
		glVertex2f(x, y);
 
	}
 
	glEnd();
	glPopMatrix();
	glutSwapBuffers();
}
//установка таймера
void Timer(int)
{
	angle = angle + 0.01 + angle2;//меняет положение вершин линий 
	if(angle > 0.5 )//когда произошел сдвиг на 90 градусов начинает обратное движение
	{	
		angle2 = -0.02;
	}
	if(angle < 0)//когда вернулось начальное положение повторяем увеличение снова
	{
		angle2 = 0;
	}
	glutTimerFunc(15,Timer,0);//обновлять экран каждые 15мсек
	glutPostRedisplay();//обновляет экран
}
 
int main(int argc, char **argv) {
 
	// инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);// буфер рисования и буф сторонних вычислений
	glutInitWindowPosition(100, 100);//позиция окна
	glutInitWindowSize(500, 500);//размеры окна
	glutCreateWindow("Twisted cylinder");//название окна
	glClearColor(0.0, 0.0, 0.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_cylinder.rar745.92 кб