Guest User

Untitled

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