Advertisement
Guest User

Untitled

a guest
Oct 10th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. /*************************************************************************************/
  2.  
  3.  
  4. // Troch� bardziej skomplikowany program wykorzystuj�cy funkcje biblioteki OpenGL
  5.  
  6.  
  7.  
  8. /*************************************************************************************/
  9.  
  10. #include "pch.h"
  11. #include <windows.h>
  12. #include <gl/gl.h>
  13. #include <gl/glut.h>
  14.  
  15. /*************************************************************************************/
  16.  
  17.  
  18. // Funkcaja okre�laj�ca, co ma by� rysowane
  19. // (zawsze wywo�ywana, gdy trzeba przerysowa� scen�)
  20.  
  21. int level = 5;
  22. float sz = 100;
  23. int perturbacje = 5;
  24.  
  25. float perturbatedValue(float value,float perturbatedBy) {
  26. return value + perturbatedBy;
  27. }
  28.  
  29. void draw_sierpinski(float x, float y, float sz, int level)
  30. {
  31. if (level > 0)
  32. {
  33. sz = sz / 3;
  34.  
  35. draw_sierpinski(x, y, sz, level - 1);
  36. draw_sierpinski(x - sz, y, sz, level - 1);
  37. draw_sierpinski(x - sz - sz, y, sz, level - 1);
  38.  
  39. draw_sierpinski(x, y - sz, sz, level - 1);
  40. //draw_sierpinski(x - sz , y - sz, sz, level - 1); - zeby srodkowy kwadrat sie nie renderowal
  41. draw_sierpinski(x - sz - sz, y - sz, sz, level - 1);
  42.  
  43. draw_sierpinski(x, y - sz - sz, sz, level - 1);
  44. draw_sierpinski(x - sz, y - sz - sz, sz, level - 1);
  45. draw_sierpinski(x - sz - sz, y - sz - sz, sz, level - 1);
  46. }
  47.  
  48. else
  49. {
  50.  
  51. glColor3ub(rand() % 255, rand() % 255, rand() % 255);
  52. glBegin(GL_POLYGON);
  53.  
  54.  
  55. glVertex2f(perturbatedValue(x, rand() % perturbacje) , perturbatedValue(y, rand() % perturbacje)); //r
  56. glVertex2f(perturbatedValue(x, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //rb
  57. glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue(y - sz,rand() % perturbacje)); //lb
  58. glVertex2f(perturbatedValue(x - sz, rand() % perturbacje), perturbatedValue( y, rand() % perturbacje)); //lt
  59. glEnd();
  60. }
  61. }
  62.  
  63. void RenderScene(void)
  64.  
  65. {
  66.  
  67. glClear(GL_COLOR_BUFFER_BIT);
  68. // Czyszczenie okna aktualnym kolorem czyszcz�cym
  69.  
  70.  
  71. glColor3f(0.0f, 1.0f, 0.0f);
  72. // Ustawienie aktualnego koloru rysowania na zielony
  73.  
  74. draw_sierpinski(50, 50, sz, level);
  75.  
  76. glFlush();
  77. // Przekazanie polece� rysuj�cych do wykonania
  78.  
  79. }
  80.  
  81. /*************************************************************************************/
  82.  
  83.  
  84. // Funkcja ustalaj�ca stan renderowania
  85.  
  86.  
  87.  
  88.  
  89. void MyInit(void)
  90.  
  91. {
  92.  
  93. glClearColor(0.5f, 0.5f, 0.5f, 0.0f);
  94. // Kolor okna wn�trza okna - ustawiono na szary
  95.  
  96. }
  97.  
  98. /*************************************************************************************/
  99.  
  100.  
  101. // Funkcja s�u��ca do kontroli zachowania proporcji rysowanych obiekt�w
  102. // niezale�nie od rozmiar�w okna graficznego
  103.  
  104.  
  105.  
  106. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  107.  
  108. // Parametry horizontal i vertical (szeroko�� i wysoko�� okna) s�
  109. // przekazywane do funkcji za ka�dym razem, gdy zmieni si� rozmiar okna
  110.  
  111. {
  112.  
  113. GLfloat AspectRatio;
  114.  
  115. // Deklaracja zmiennej AspectRatio okre�laj�cej proporcj� wymiar�w okna
  116.  
  117.  
  118.  
  119. if (vertical == 0)
  120. // Zabezpieczenie pzred dzieleniem przez 0
  121.  
  122. vertical = 1;
  123.  
  124. glViewport(0, 0, horizontal, vertical);
  125. // Ustawienie wielko�ciokna okna urz�dzenia (Viewport)
  126. // W tym przypadku od (0,0) do (horizontal, vertical)
  127.  
  128. glMatrixMode(GL_PROJECTION);
  129. // Okre�lenie uk�adu wsp�rz�dnych obserwatora
  130.  
  131. glLoadIdentity();
  132. // Okre�lenie przestrzeni ograniczaj�cej
  133.  
  134. AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
  135. // Wyznaczenie wsp�czynnika proporcji okna
  136.  
  137. // Gdy okno na ekranie nie jest kwadratem wymagane jest
  138. // okre�lenie okna obserwatora.
  139. // Pozwala to zachowa� w�a�ciwe proporcje rysowanego obiektu
  140. // Do okre�lenia okna obserwatora s�u�y funkcja glOrtho(...)
  141.  
  142.  
  143. if (horizontal <= vertical)
  144.  
  145. glOrtho(-100.0, 100.0, -100.0 / AspectRatio, 100.0 / AspectRatio, 1.0, -1.0);
  146.  
  147. else
  148.  
  149. glOrtho(-100.0*AspectRatio, 100.0*AspectRatio, -100.0, 100.0, 1.0, -1.0);
  150.  
  151.  
  152.  
  153. glMatrixMode(GL_MODELVIEW);
  154. // Okre�lenie uk�adu wsp�rz�dnych
  155.  
  156. glLoadIdentity();
  157.  
  158. }
  159.  
  160. /*************************************************************************************/
  161.  
  162.  
  163. // G��wny punkt wej�cia programu. Program dzia�a w trybie konsoli
  164.  
  165.  
  166.  
  167.  
  168. void main(void)
  169.  
  170. {
  171.  
  172. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  173. // Ustawienie trybu wy�wietlania
  174. // GLUT_SINGLE - pojedynczy bufor wy�wietlania
  175. // GLUT_RGBA - model kolor�w RGB
  176.  
  177.  
  178. glutCreateWindow("Drugi program w OpenGL");
  179. // Utworzenie okna i okre�lenie tre�ci napisu w nag��wku okna
  180.  
  181. glutDisplayFunc(RenderScene);
  182. // Okre�lenie, �e funkcja RenderScene b�dzie funkcj� zwrotn� (callback)
  183. // Biblioteka GLUT b�dzie wywo�ywa�a t� funkcj� za ka�dym razem, gdy
  184. // trzeba b�dzie przerysowa� okno
  185.  
  186.  
  187. glutReshapeFunc(ChangeSize);
  188. // Dla aktualnego okna ustala funkcj� zwrotn� odpowiedzialn� za
  189. // zmiany rozmiaru okna
  190.  
  191. MyInit();
  192. // Funkcja MyInit (zdefiniowana powy�ej) wykonuje wszelkie
  193. // inicjalizacje konieczneprzed przyst�pieniem do renderowania
  194.  
  195.  
  196. glutMainLoop();
  197. // Funkcja uruchamia szkielet biblioteki GLUT
  198.  
  199. }
  200.  
  201. /*************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement