Advertisement
Guest User

Untitled

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