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

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

Построения
на плоскости (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++
Среда программирования: 
Eclipse Mars.2(4.5.2)

#include <cmath>
#include <vector>
#include <GL/glut.h>
#define WIDTH 500
#define HEIGHT 500
 
using namespace std;
 
int theta = 0; //угол поворота
 
struct Point {
	double x, y; //координаты точки
} point;
vector <Point> spiral; //массив точек
 
//получение координат точек
void build_spiral () {
	//построение спирали на отрезке [0, 67pi] с шагом 1 градус
	for ( double phi = 0; phi <= 67 * M_PI; phi +=  M_PI / 180 ) {
		//уравнение архимедовой спирали в декартовых координатах
		point.x = phi * cos (phi);
		point.y = phi * sin (phi);
		spiral.push_back (point);
	}
}
 
void reshape ( int w, int h ) {
	glViewport ( 0, 0, WIDTH, HEIGHT ); //область вывода
	glLoadIdentity (); //замена текущей матрицы на единичную
	gluOrtho2D ( -WIDTH / 2, WIDTH / 2,  -HEIGHT / 2, HEIGHT / 2 ); //плоскость отсечения
	glMatrixMode ( GL_MODELVIEW ); //матрица преобразований
}
 
void display () {
	glClear ( GL_COLOR_BUFFER_BIT ); //очистка текущего буфера цвета
	glClearColor ( 1.0, 1.0, 1.0, 1.0 ); //цвет фона(RGBA, белый)
	glColor3ub ( 0, 0, 0 ); //цвет рисования(RGB, черный)
	glPushMatrix (); //поместить текущую матрицу в стек матриц
	glRotatef ( theta, 0, 0, 1 ); //повернуть текущую матрицу
	glScaled ( 1.7, 1.7, 1 ); //масштабирование
	glLineWidth ( 5 ); //толщина линии
	//сглаживание
        glHint ( GL_LINE_SMOOTH_HINT, GL_NICEST );
        glEnable ( GL_LINE_SMOOTH );
        glEnable ( GL_BLEND );
        glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	glBegin ( GL_LINES );
	for ( unsigned i = 1; i < spiral.size(); i ++ ) {
		glVertex2d ( spiral[i].x, spiral[i].y );
		glVertex2d ( spiral[i - 1].x, spiral[i - 1].y );
	}
	glEnd ();
	//построение окружности в центре окна
	glBegin ( GL_TRIANGLE_FAN );
	glVertex2d ( 0, 0 ); //центр
	for( int i = 0; i <= 50; i++ ) {
		double phi = (double)i / 50.0 * M_PI * 2.0;
		glVertex2d ( 2.5 * cos ( phi ), 2.5 * sin ( phi ) );
	}
	glEnd ();
	glPopMatrix (); //вытолкнуть последнюю матрицу из текущего стека матриц
	glutSwapBuffers (); //переключение буфера кадра
}
 
void timer ( int state ) {
	theta = (theta - 45) % 360; //поворачиваем спираль на 45 градусов по часовой стрелке
	glutPostRedisplay(); //вызываем функцию перерисовки окна
	glutTimerFunc ( 80, timer, 0);
}
 
int main ( int argc, char** argv ) {
	glutInit( &argc, argv ); //инициализация OpenGL Utility Toolkit
	glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); //режим окна(двойной буфер и RGB-палитра)
	glutInitWindowSize ( WIDTH, HEIGHT ); //установка размеров окна(ширина и высота в пикселях)
	glutInitWindowPosition ( 200, 30 );//положение окна относительно левого верхнего угла экрана
	glutCreateWindow ( "Spiral" ); //создание окна
	build_spiral(); //получение координат спирали
	glutReshapeFunc ( reshape );  //перерисовка окна
	glutDisplayFunc ( display );//инициализация функции, отвечающей за рисование в окне
	glutTimerFunc ( 80, timer, 0); //таймер, срабатывает каждые 80 мс
	glutMainLoop (); //вход в главный цикл
	return 0;
}

Прикрепленный файлРазмер
kolesnikova_rotating_spiral.zip124.9 кб