Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <GLUT/GLUT.h>
  3. #include <cstdlib>
  4. #include <OpenGL/OpenGL.h>
  5. #include <ctime>
  6. #include <math.h>
  7.  
  8. int depth=3;
  9.  
  10. void drawSq(float x, float y, int size) {
  11.  
  12. glBegin(GL_POLYGON);
  13. glColor3f(1.0f, 1.0f, 1.0f); //kwadraty rysowane kolorem białym
  14. glVertex2f(x,y);
  15. glVertex2f(x+size,y);
  16. glVertex2f(x+size,y-size);
  17. glVertex2f(x,y-size);
  18. glEnd();
  19.  
  20. }
  21.  
  22.  
  23. void mainLoop (float x, float y, int d){
  24.  
  25. int rozmiar = pow (3, d);
  26.  
  27. for(int i=0;i<3;i++)
  28. for(int j=0;j<3;j++)
  29. if(i!=1||j!=1){ //sprawdzam czy to nie srodkowy
  30.  
  31. if(d>0) drawSq( (x+j*rozmiar/3),(y-i*rozmiar/3),rozmiar/3); //sprawdzam czy to juz ostatnia iteracjaa tej glebokosci
  32. else mainLoop((x+j*rozmiar/3),(y-i*rozmiar/3),rozmiar/3,d-1); //jak nie ostatnia to wywoluje znow funkcje
  33.  
  34. }
  35.  
  36. }
  37.  
  38. void RenderScene(void)
  39.  
  40. {
  41.  
  42. glClear(GL_COLOR_BUFFER_BIT);
  43. // Czyszczenie okna aktualnym kolorem czyszczącym
  44.  
  45. mainLoop(90, -90, depth);
  46.  
  47. glFlush();
  48. // Przekazanie poleceń rysujących do wykonania
  49.  
  50. }
  51.  
  52. void MyInit(void)
  53.  
  54. {
  55.  
  56. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  57. // Kolor okna wnętrza okna - ustawiono na czarny
  58.  
  59. }
  60.  
  61. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  62.  
  63. // Parametry horizontal i vertical (szerokość i wysokość okna) są
  64. // przekazywane do funkcji za każdym razem, gdy zmieni się rozmiar okna
  65.  
  66. {
  67.  
  68. GLfloat AspectRatio;
  69.  
  70. // Deklaracja zmiennej AspectRatio określającej proporcję wymiarów okna
  71.  
  72.  
  73.  
  74. if (vertical == 0)
  75. // Zabezpieczenie pzred dzieleniem przez 0
  76.  
  77. vertical = 1;
  78.  
  79.  
  80. glViewport(0, 0, horizontal, vertical);
  81. // Ustawienie wielkościokna okna urządzenia (Viewport)
  82. // W tym przypadku od (0,0) do (horizontal, vertical)
  83.  
  84.  
  85. glMatrixMode(GL_PROJECTION);
  86. // Określenie układu współrzędnych obserwatora
  87.  
  88. glLoadIdentity();
  89. // Określenie przestrzeni ograniczającej
  90.  
  91. AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  92. // Wyznaczenie współczynnika proporcji okna
  93.  
  94. // Gdy okno na ekranie nie jest kwadratem wymagane jest
  95. // określenie okna obserwatora.
  96. // Pozwala to zachować właściwe proporcje rysowanego obiektu
  97. // Do określenia okna obserwatora służy funkcja glOrtho(...)
  98.  
  99.  
  100.  
  101. if (horizontal <= vertical)
  102.  
  103. glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
  104.  
  105. else
  106.  
  107. glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
  108.  
  109. glMatrixMode(GL_MODELVIEW);
  110. // Określenie układu współrzędnych
  111.  
  112. glLoadIdentity();
  113.  
  114. }
  115.  
  116.  
  117. int main(int argc, char** argv)
  118.  
  119. {
  120. glutInit(&argc, argv);
  121.  
  122. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  123. // Ustawienie trybu wyświetlania
  124. // GLUT_SINGLE - pojedynczy bufor wyświetlania
  125. // GLUT_RGBA - model kolorów RGB
  126.  
  127.  
  128.  
  129. glutCreateWindow("Dywan Sierpinskiego");
  130. // Utworzenie okna i określenie treści napisu w nagłówku okna
  131.  
  132.  
  133. glutDisplayFunc(RenderScene);
  134. // Określenie, że funkcja RenderScene będzie funkcją zwrotną (callback)
  135. // Biblioteka GLUT będzie wywoływała tą funkcję za każdym razem, gdy
  136. // trzeba będzie przerysować okno
  137.  
  138.  
  139. glutReshapeFunc(ChangeSize);
  140. // Dla aktualnego okna ustala funkcję zwrotną odpowiedzialną za
  141. // zmiany rozmiaru okna
  142.  
  143. MyInit();
  144. // Funkcja MyInit (zdefiniowana powyżej) wykonuje wszelkie
  145. // inicjalizacje konieczneprzed przystąpieniem do renderowania
  146.  
  147.  
  148. glutMainLoop();
  149. // Funkcja uruchamia szkielet biblioteki GLUT
  150.  
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement