Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.24 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3.  
  4. #include <iostream>
  5. #include <gl/glut.h>
  6. #include <gl/gl.h>
  7. #include <time.h>
  8.  
  9. // Funkcaja określająca, co ma być rysowane
  10. // (zawsze wywoływana, gdy trzeba przerysować scenę)
  11.  
  12. float W(int x)
  13. {
  14.     if (x < 0)
  15.         x = x * -1;
  16.     float s = -0.002f * x + 0.5f;
  17.     return s;
  18. }
  19.  
  20. float losujKolor(float pkl, float pkr)
  21. {
  22.     int x = 5;
  23.     float c = 1 - 2 * W(x) * (float)((rand() % 23)%128) + W(x) * pkl + W(x) * pkr;
  24.     c = (int)c % 128;
  25.  
  26.     return c;
  27. }
  28.  
  29. void rysujKwadraty(float a, float x, float y, int poz, int per, float pkl, float pkr) //a-długość boku, x i y-punkty rysowania początku dywanu, poz-głębokość, per-perturbacje
  30. {
  31.     //std::cout << "poziom: " << poz << "\n";
  32.     //for(int i=0; i<10; i++)
  33.     if (poz > 0)
  34.     {
  35.         float A = a / 2.0f;
  36.  
  37.         rysujKwadraty(A, x, y, poz - 1, per, pkl, pkr);
  38.         rysujKwadraty(A, x + A, y, poz - 1, per, pkl, pkr);
  39.         //rysujKwadraty(A, x + 2.0f *A, y, poz - 1, per);
  40.  
  41.         rysujKwadraty(A, x, y - A, poz - 1, per, pkl, pkr);
  42.         rysujKwadraty(A, x + A, y - A, poz-1, per, pkl, pkr);
  43.         /*rysujKwadraty(A, x + 2.0f *A, y - A, poz - 1, per);
  44.  
  45.         rysujKwadraty(A, x, y - 2.0f * A, poz - 1, per);
  46.         rysujKwadraty(A, x + A, y - 2.0f * A, poz - 1, per);
  47.         rysujKwadraty(A, x + 2.0f *A, y - 2.0f * A, poz - 1, per);/**/
  48.     }
  49.     else
  50.     {
  51.         float xr = (rand() % per) % 2;
  52.         float yr = (rand() % per) % 2;
  53.         float B = a / 2.0f;
  54.  
  55.         //glColor3ub(255.0f, 0.0f, 0.0f);
  56.  
  57.         glBegin(GL_POLYGON);
  58.         glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
  59.         glVertex2f(-1.0f*(B)+x + xr, -1.0f*(B)+y + yr);
  60.  
  61.         xr = (rand() % per) % 2;
  62.         yr = (rand() % per) % 2;
  63.         glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
  64.         glVertex2f((B)+x + xr, -1.0f*(B)+y + yr);
  65.  
  66.         xr = (rand() % per) % 2;
  67.         yr = (rand() % per) % 2;
  68.         glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
  69.         glVertex2f((B)+x + xr, (B)+y + yr);
  70.  
  71.         xr = (rand() % per) % 2;
  72.         yr = (rand() % per) % 2;
  73.         glColor3ub(losujKolor(pkl, pkr), losujKolor(pkl, pkr), losujKolor(pkl, pkr));
  74.         glVertex2f(-1.0f*(B)+x + xr, (B)+y + yr);
  75.         glEnd();
  76.     }
  77. }
  78.  
  79. void RenderScene(void)
  80. {
  81.     float A = 180, x = A / 2, y = x;
  82.     int poziom = 7;
  83.     int perturbacje = 1;
  84.     glClear(GL_COLOR_BUFFER_BIT);
  85.  
  86.     /*std::cout << "podaj długość boku kwadratu: ";
  87.     std::cin >> A;
  88.     std::cout << "podaj poziom zagłębienia: ";
  89.     std::cin >> poziom;
  90.     std::cout << "podaj poziom perturbacji: ";
  91.     std::cin >> perturbacje;//*/
  92.  
  93.     rysujKwadraty(A, -1.0f*x, y, poziom, perturbacje, rand() % 23 + 105, 0);
  94.  
  95.     glFlush();
  96. }
  97.  
  98. /*************************************************************************************/
  99. // Funkcja ustalająca stan renderowania
  100. void MyInit(void)
  101. {
  102.     glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
  103.     // Kolor okna wnętrza okna - ustawiono na szary
  104. }
  105.  
  106. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  107. // Parametry horizontal i vertical (szerokość i wysokość okna) są
  108. // przekazywane do funkcji za każdym razem, gdy zmieni się rozmiar okna
  109. {
  110.     GLfloat AspectRatio;
  111.     // Deklaracja zmiennej AspectRatio określającej proporcję wymiarów okna
  112.  
  113.     if (vertical == 0)
  114.         // Zabezpieczenie pzred dzieleniem przez 0
  115.         vertical = 1;
  116.  
  117.     glViewport(0, 0, horizontal, vertical);
  118.     // Ustawienie wielkościokna okna urządzenia (Viewport)
  119.     // W tym przypadku od (0,0) do (horizontal, vertical)
  120.  
  121.     glMatrixMode(GL_PROJECTION);
  122.     // Określenie układu współrzędnych obserwatora
  123.  
  124.     glLoadIdentity();
  125.     // Określenie przestrzeni ograniczającej
  126.  
  127.     AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  128.     // Wyznaczenie współczynnika proporcji okna
  129.  
  130.     // Gdy okno na ekranie nie jest kwadratem wymagane jest
  131.     // określenie okna obserwatora.
  132.     // Pozwala to zachować właściwe proporcje rysowanego obiektu
  133.     // Do określenia okna obserwatora służy funkcja glOrtho(...)
  134.  
  135.     if (horizontal <= vertical)
  136.         glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
  137.     else
  138.         glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
  139.  
  140.     glMatrixMode(GL_MODELVIEW);
  141.     // Określenie układu współrzędnych    
  142.     glLoadIdentity();
  143. }
  144.  
  145. /*************************************************************************************/
  146. // Główny punkt wejścia programu. Program działa w trybie konsoli
  147. void main(int argc, char* argv[])
  148. {
  149.     srand(time(NULL));
  150.     /*std::cout << "Hello World!\n";
  151.     glutInit(&argc, argv);
  152.     system("PAUSE");
  153.     glutCreateWindow("napis");
  154.     system("PAUSE");//*/
  155.  
  156.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  157.     // Ustawienie trybu wyświetlania
  158.     // GLUT_SINGLE - pojedynczy bufor wyświetlania
  159.     // GLUT_RGBA - model kolorów RGB
  160.  
  161.     glutInit(&argc, argv);
  162.     glutCreateWindow("Dywan Sierpińskiego");
  163.     // Utworzenie okna i określenie treści napisu w nagłówku okna
  164.  
  165.     glutDisplayFunc(RenderScene);
  166.     // Określenie, że funkcja RenderScene będzie funkcją zwrotną (callback)
  167.     // Biblioteka GLUT będzie wywoływała tą funkcję za każdym razem, gdy
  168.     // trzeba będzie przerysować okno
  169.  
  170.     glutReshapeFunc(ChangeSize);
  171.     // Dla aktualnego okna ustala funkcję zwrotną odpowiedzialną za
  172.     // zmiany rozmiaru okna
  173.  
  174.     MyInit();
  175.     // Funkcja MyInit (zdefiniowana powyżej) wykonuje wszelkie
  176.     // inicjalizacje konieczne przed przystąpieniem do renderowania
  177.  
  178.     glutMainLoop();
  179.     // Funkcja uruchamia szkielet biblioteki GLUT
  180. }
  181.  
  182. // Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
  183. // Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie
  184.  
  185. // Porady dotyczące rozpoczynania pracy:
  186. //   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
  187. //   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
  188. //   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
  189. //   4. Użyj okna Lista błędów, aby zobaczyć błędy
  190. //   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
  191. //   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement