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

Вход на сайт

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

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

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

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

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

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Microsoft Visual Studio 2013
Статья по теме: 

При запуске программы открывается окно, в котором рисуется искомый фрактал.

Код программы: 

#define GL_GLEXT_PROTOTYPES
#include <windows.h>
#include <GL/gl.h>
#include <glut.h>
#include <GL/glu.h>
#include <math.h>
 
/* Обьявление функции, которая будет рисовать фрактал */
void func(double x, double y, double angle, double len, int deph);
 
/* Функция, прорисовывающая изображение в окне */
void display(void){
	/* Очистка экрана цветом по-умолчанию */
	glClear(GL_COLOR_BUFFER_BIT);
 
	/* Задание цвета для рисования */
	glColor3f(1.0f, 0.2f, 0.5f);
 
	/* Начало рисования. Вершины 2n и 2n+1 будут обьединены в линию*/
	glBegin(GL_LINES);
 
	/* Вызов функции, рисующей фрактал. В функции передаются вершины в буфер */
	func(50, 50, 1.1, 50, 12);
	/* Функция, выгружающая буфер в сцену */
	glEnd();
 
	/*  Прорисовка текущего буфера */
	glFlush();
}
 
/* Функция, определённая выше */
void func(double x, double y, double angle, double len, int deph){
	double angp = 0.5; //изменение угла
	for (int i = -1; i<5; i += 2){
		//если не достигнута глубина рекурсии - продолжить построение фрактала
		if (deph>0)
			func(x + cos(angle + i*angp)*len / 2, y + sin(angle + i*angp)*len / 2, angle + i*angp, len / 2, deph - 1);
		/* В буфер записываются вершины. Эти две вершины будут соединены в прямые между собой*/
		glVertex2d(x, y);
		glVertex2d(x + cos(angle + i*angp)*len / 2, y + sin(angle + i*angp)*len / 2);
	}
}
 
void init(void){
	/* Установка цвета по-умолчанию */
	glClearColor(0.0, 0.0, 0.0, 0.0);
	/* Задаются параметры сцены. Матрица преобразований для проекции, координаты сдвигаются в 0 и границы экрана устанавливаются в заданные*/
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0, 100.0, 0.0, 100.0, -100.0, 100.0);
}
/* Позволяет закрыть программу нажатием клавиши "эскейп" */
void processNormalKeys(unsigned char key, int x, int y) {
	if (key == 27)
		exit(0);
}
 
 
int main(int argc, char** argv){
	/* Инициализируются буферы для glut-a*/
	glutInit(&argc, argv);
	/* Задаются режимы смешивания цветов и количество буферов*/
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	/* Задаётся размер окна 500 на 500*/
	glutInitWindowSize(500, 500);
	/* Окно сдвигается на 100 единиц по икс и по игрек */
	glutInitWindowPosition(100, 100);
	/* Создаётся окно с названием, размером и смещениями, которые были указаны */
	glutCreateWindow("Fractal");
	/* Вызывается функция инициализации, задания начальных параметров */
	init();
	/* Устанвливается фукция прорисовки, переданная как параметр */
	glutDisplayFunc(display);
	/* Задаётся функция, которая будет обрабатывать нажатия клавиш*/
	glutKeyboardFunc(processNormalKeys);
	/* Начинается выполнение прорисовки и обработка клавиш*/
	glutMainLoop();
	return 0;
}

Прикрепленный файлРазмер
Pifagor.zip166.29 кб