Advertisement
Guest User

Untitled

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