Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. /* System */
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include <iostream>
  5. #include <math.h>
  6.  
  7. /* Biblioteka GLUT */
  8. #include <GL/freeglut.h>
  9.  
  10. int numberOfIterations;
  11.  
  12.  
  13. /* Biblioteka GLUT */
  14. #include <GL/freeglut.h>
  15.  
  16. using namespace std;
  17. /* Deklaracje funkcji narzędziowych */
  18.  
  19. /* Funkcja do rysowania */
  20. void DrawScene(void);
  21.  
  22. /* Funkcja do inicjacji OpenGLa */
  23. void InitOpenGL(void);
  24.  
  25. /* Funkcja wywoływana w momentach zmiany rozmiarów okna */
  26. void ReshapeWindow(int width, int height);
  27.  
  28. /* Deklaracja globalnych zmiennych */
  29.  
  30. /* Globalny identyfikator głównego okna programu */
  31. int mainWindow;
  32.  
  33.  
  34.  
  35.  
  36.  
  37. // && (dlugosc_kwadratu<90 || dlugosc_kwadratu>120)
  38. /* Funkcja main */
  39. int main(int argc, char **argv)
  40. {
  41.     std::cout << "input how much iterations should we perform" <<endl;
  42.     std::cin >> numberOfIterations;
  43.  
  44.     // Inicjujemy bibliotekę GLUT
  45.     glutInit(&argc, argv);
  46.     // Inicjujemy: format koloru, jeden bufor ramki
  47.     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  48.     // Ustawiamy początkowe wymiary okna
  49.     glutInitWindowSize(800, 800);
  50.     // Ustawiamy pozycję okna - lewy górny naroznik
  51.     glutInitWindowPosition(150, 150);
  52.     // Tworzymy główne okno programu
  53.     mainWindow = glutCreateWindow("Pierwsze Laboratorium");
  54.  
  55.     // Sprawdzamy powodzenie operacji
  56.     if (mainWindow == 0) {
  57.         puts("Nie mozna stworzyc okna!!!\nWyjscie z programu.\n");
  58.         exit(-1);
  59.     }
  60.  
  61.     // Czynimy aktywnym okno główne programu
  62.     glutSetWindow(mainWindow);
  63.  
  64.     // Tutaj rejestrujemy funkcje narzędziowe - tzw. callbacks
  65.     glutDisplayFunc(DrawScene);
  66.     glutReshapeFunc(ReshapeWindow);
  67.  
  68.     // ustawienia początkowe
  69.     InitOpenGL();
  70.  
  71.     // Wejście do pętli programu
  72.     glutMainLoop();
  73.  
  74.     return(0);
  75. }
  76.  
  77. /* W tej funkcji określamy to co ma byc narysowane na ekranie.
  78.  * Jest wywoływana zawsze wtedy, gdy trzeba przerysować ekran - bufor ramki.
  79.  */
  80.  
  81.  
  82.  
  83. void DrawScene(void)
  84. {
  85.     // Czyścimy okno aktualnym (domyślnym) kolorem
  86.     glClear(GL_COLOR_BUFFER_BIT);
  87.     // Ustawiamy grubość linii
  88.     glLineWidth(5.0f);
  89.     // Tworzenie prymitywów graficznych zawsze ograniczamy funkcjami glBegin i glEnd
  90.     glBegin(GL_QUADS);
  91.  
  92.     glColor3f(1.0f, 0.0f, 0.0f);
  93.     glVertex2f(0.0f, 0.0f);
  94.  
  95.     glColor3f(0.0f, 1.0f, 0.0f);
  96.     glVertex2f(0.0f, 90.0f);
  97.  
  98.     glColor3f(0.0f, 0.0f, 1.0f);
  99.     glVertex2f(90.0f, 90.0f);
  100.  
  101.     glColor3f(0.0f, 0.0f, 1.0f);
  102.     glVertex2f(90.0f, 0.0f);
  103.  
  104.     float x = 0;
  105.     float y = 0;
  106.  
  107.     for (int i = 1; i <= numberOfIterations; i++)
  108.     {
  109.         float lengthOfNewSquare = 90 / pow(3, i);
  110.         for (int row = 0; row < pow(3, i); row++)
  111.         {
  112.             for (int column = 0; column < pow(3, i); column++)
  113.             {
  114.                 if (row % 3 == 1 && column % 3 == 1) {
  115.                     glColor3f(0, 0, 0);
  116.                     glVertex2f(x, y);
  117.                     glColor3f(0, 0, 0);
  118.                     glVertex2f(x + lengthOfNewSquare, y);
  119.                     glColor3f(0, 0, 0);
  120.                     glVertex2f(x + lengthOfNewSquare, y + lengthOfNewSquare);
  121.                     glColor3f(0, 0, 0);
  122.                     glVertex2f(x, y + lengthOfNewSquare);
  123.                 }
  124.                 x = x + lengthOfNewSquare;
  125.                 if (x >= 90)
  126.                     x = 0;
  127.             }
  128.             y = y + lengthOfNewSquare;
  129.             if (y >= 90)
  130.                 y = 0;
  131.         }
  132.     }
  133.  
  134.  
  135.  
  136.     glEnd();
  137.     // Komenda wykonania poleceń rysujących
  138.     glFlush();
  139. }
  140.  
  141. /* Ta funkcja służy do wstępnej konfiguracji OpenGLa.
  142.  * Zanim coś narysujemy musimy wywołać tę funkcję.
  143.  */
  144. void InitOpenGL(void)
  145. {
  146.     // Usawiamy domyślny, czarny kolor tła okna - bufor ramki malujemy na czarno
  147.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  148. }
  149.  
  150. /* Tę funkcję wywołuje system w momencie gdy uytkownik zmieni myszą
  151.  * rozmiar głownego okna. jej zadaniem jest zachowanie propocji wymiarów
  152.  * rysowanych obiektów niezależnie od wymiarów okna.
  153.  */
  154. void ReshapeWindow(int width, int height)
  155. {
  156.     int aspectRatio; // = width / height
  157.  
  158.     // Na wypadek dzielenia przez 0
  159.     if (height == 0) height = 1;
  160.  
  161.     // Wyliczamy współczynnik proporcji
  162.     aspectRatio = width / height;
  163.  
  164.     // Ustawiamy wielkości okna okna urządzenia w zakresie
  165.     // od 0,0 do wysokość, szerokość
  166.     glViewport(0, 0, width, height);
  167.  
  168.     // Ustawiamy układ współrzędnych obserwatora
  169.     glMatrixMode(GL_PROJECTION);
  170.  
  171.     // Resetujemy macierz projkecji
  172.     glLoadIdentity();
  173.  
  174.     // Korekta  
  175.     if (width <= height)
  176.         glOrtho(-100.0, 100.0, -100.0 / aspectRatio, 100.0 / aspectRatio, 1.0, -1.0);
  177.     else
  178.         glOrtho(-100.0*aspectRatio, 100.0*aspectRatio, -100.0, 100.0, 1.0, -1.0);
  179.  
  180.     // Ustawiamy macierz modelu
  181.     glMatrixMode(GL_MODELVIEW);
  182.  
  183.     // Resetujemy macierz modelu
  184.     glLoadIdentity();
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement