Advertisement
Guest User

Untitled

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