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

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

Построения
на плоскости (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 Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Geany
Статья по теме: 

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

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

   #define GL_GLEXT_PROTOTYPES
    #include <GL/gl.h>
    #include <GL/glut.h>
    #include <GL/glu.h>
    #include <math.h>
    using namespace std;
 
    /* Обьявление функции, которая будет рисовать фрактал */
    void func(double x, double y, double radius,double angle,int deep);
 
    /* Функция, прорисовывающая изображение в окне */
    void display(void){
 
      /* Очистка экрана цветом по-умолчанию */
      glClear (GL_COLOR_BUFFER_BIT);
 
      /* Задание цвета для рисования */
      glColor3f(1.0f,0.2f,0.5f);
 
      /* Начало рисования. Вершины 2n и 2n+1 будут обьединены в линию*/
      glBegin(GL_LINES);
 
      /* Вызов функции, рисующей фрактал. В функции передаются вершины в буфер */
      func(55,50,20,0,7);
 
      /* Функция, выгружающая буфер в сцену */
      glEnd();
 
      /*  Прорисовка текущего буфера */
      glFlush ();
    }
 
    /* Функция, определённая выше */
    void func(double x, double y, double radius,double angle,int deep){
 
      /* Для уменьшения кода в строках вводятся эти переменные
        pi5 равна Пи, делённой на 5
        h равна расстоянию от центра большего пятиугольника к центрам меньших      
      */
      double pi5=3.141596/5;
      double h=2*radius*cos(pi5);
 
      for(int i=0;i<5;i++){
        /*
          Вычисление некоторых параметров для рисования их на экране
          ang2 Поворот относительно центрального пятиугольника на 360/5 градусов
          x2 центр меньшего пятиугольника
          y2 центр меньшего пятиугольника
          ang3 уголь, на который нужно повернуть вершину изначально
          rad расстояние до каждого из углов меньшего пятиугольника от его центра          
        */
        double ang2=angle+pi5*i*2,
        x2=x-h*cos(ang2),
        y2=y-h*sin(ang2),
        rad2=radius/(2*cos(pi5)+1),
        ang3=angle+3.141596+(2*i+1)*pi5;
        for(int j=0;j<4;j++){
          /* В буфер записываются вершины. Эти две вершины будут соединены в прямые между собой*/
          glVertex2f(x+rad2*cos(ang3+j*pi5*2),y+rad2*sin(ang3+j*pi5*2));
          glVertex2f(x+rad2*cos(ang3+(j+1)*pi5*2),y+rad2*sin(ang3+(j+1)*pi5*2));
        }
        /* Условие выхода из рекурсии. Из максимальной глубины рекурсии не строятся меньшие пятиугольники*/
        if(deep>0)func(x2,y2,radius/(2*cos(pi5)+1),angle+3.141596+(2*i+1)*pi5,deep-1);
      }
    }
 
    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;
    }

Прикрепленный файлРазмер
DurerStar.zip7.57 кб
DurerStar_windows.zip164.98 кб