Advertisement
Guest User

Untitled

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