Advertisement
Guest User

JD

a guest
Feb 24th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <cmath>
  3. #ifdef __APPLE__
  4.  
  5. #include <GLUT/glut.h>
  6.  
  7. #else
  8.  
  9. #include <GL/glut.h>
  10.  
  11. #endif
  12.  
  13.  
  14. // Pocztkowy rozmiar i pozycja prostokta
  15.  
  16. GLfloat x_1 = 100.0f;
  17.  
  18. GLfloat y_1 = 150.0f;
  19.  
  20. GLsizei rsize = 50;
  21.  
  22.  
  23. // Rozmiar kroku (liczba pikseli) w osi x i y
  24.  
  25. GLfloat xstep = 1.0f;
  26.  
  27. GLfloat ystep = 1.0f;
  28.  
  29. // Dane zmieniajcych się rozmiarów okna
  30.  
  31. GLfloat windowWidth;
  32.  
  33. GLfloat windowHeight;
  34.  
  35. ///////////////////////////////////////////////////////////
  36.  
  37. // Wywoływana w celu przerysowania sceny
  38.  
  39. void RenderScene(void) {
  40.  
  41. // Wyczyszczenie okna aktualnym kolorem czyszczącym
  42.  
  43. glClear(GL_COLOR_BUFFER_BIT);
  44.  
  45.  
  46. // Aktualny kolor rysujący - czerwony
  47.  
  48. // R G B
  49.  
  50. glColor3f(1.0f, 0.0f, 0.0f);
  51.  
  52.  
  53. // Narysowanie prostokąta wypełnionego aktualnym kolorem
  54.  
  55. int triangleAmount = 6;
  56. GLfloat twicePi = 2.0f * 3.14;
  57.  
  58. glBegin(GL_TRIANGLE_FAN);
  59. glVertex2f(x_1, y_1);
  60.  
  61. for (int i = 0; i <= triangleAmount; i++)
  62. {
  63. glVertex2f(
  64. x_1 + (10.0*cos(i*twicePi / triangleAmount)) * 5,
  65. y_1 + (10.0*sin(i*twicePi / triangleAmount)) * 5);
  66. }
  67. glEnd();
  68. glFlush();
  69.  
  70. // Wysłanie poleceń do wykonania - !!! dla animacji to jest inne polecenie
  71.  
  72. glutSwapBuffers();
  73.  
  74. }
  75.  
  76. ///////////////////////////////////////////////////////////
  77.  
  78. // Wywoływana przez bibliotek GLUT w czasie, gdy okno nie
  79.  
  80. // jest przesuwane ani nie jest zmieniana jego wielkość
  81.  
  82. void TimerFunction(int value) {
  83.  
  84. // Odwrócenie kierunku, jeżeli osiągnięto lewą lub prawą krawędź
  85.  
  86. if (x_1 > windowWidth - rsize || x_1 - rsize < 0)
  87.  
  88. xstep = -xstep;
  89.  
  90.  
  91. // Odwrócenie kierunku, jeżeli osiągnięto dolną lub górną krawędź
  92.  
  93. if (y_1 > windowHeight - rsize || y_1 - rsize < 0)
  94.  
  95. ystep = -ystep;
  96.  
  97.  
  98.  
  99. // Kontrola obramowania. Wykonywana jest na wypadek, gdyby okno
  100.  
  101. // zmniejszyło swoj wielkość w czasie, gdy kwadrat odbijał się od
  102.  
  103. // krawędzi, co mogłoby spowodować, że znalazł by się poza
  104.  
  105. // przestrzenią ograniczajcą.
  106.  
  107. if (x_1 > windowWidth - rsize)
  108.  
  109. x_1 = windowWidth - rsize - 1;
  110.  
  111.  
  112. if (y_1 > windowHeight - rsize)
  113.  
  114. y_1 = windowHeight - rsize - 1;
  115.  
  116.  
  117. // Wykonanie przesunięcia kwadratu
  118.  
  119. x_1 += xstep*10;
  120.  
  121. y_1 += ystep*10;
  122.  
  123.  
  124. // Ponowne rysowanie sceny z nowymi współrzędnymi
  125.  
  126. glutPostRedisplay();
  127.  
  128. glutTimerFunc(33, TimerFunction, 1);
  129.  
  130. }
  131.  
  132. ///////////////////////////////////////////////////////////
  133.  
  134. // Konfigurowanie stanu renderowania
  135.  
  136. void SetupRC(void) {
  137.  
  138. // Ustalenie niebieskiego koloru czyszczącego
  139.  
  140. glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
  141.  
  142. }
  143.  
  144. ///////////////////////////////////////////////////////////
  145.  
  146. // Wywoływana przez bibliotek GLUT przy każdej zmianie wielkości okna
  147.  
  148. void ChangeSize(GLsizei w, GLsizei h) {
  149.  
  150. // Zabezpieczenie przed dzieleniem przez zero
  151.  
  152. if (h == 0)
  153.  
  154. h = 1;
  155.  
  156.  
  157. // Ustalenie wielkości widoku zgodnego z rozmiarami okna
  158.  
  159. glViewport(0, 0, w, h);
  160.  
  161.  
  162. // Ustalenie układu współrzędnych
  163.  
  164. glMatrixMode(GL_PROJECTION);
  165.  
  166. glLoadIdentity();
  167.  
  168.  
  169. // Keep the square square, this time, save calculated
  170.  
  171. // width and height for later use
  172.  
  173. if (w <= h)
  174.  
  175. {
  176.  
  177. windowHeight = 250.0f*h / w;
  178.  
  179. windowWidth = 250.0f;
  180.  
  181. }
  182.  
  183. else
  184.  
  185. {
  186.  
  187. windowWidth = 250.0f*w / h;
  188.  
  189. windowHeight = 250.0f;
  190.  
  191. }
  192.  
  193.  
  194. // Ustanowienie przestrzeni ograniczającej (lewo, prawo, dół, góra, blisko, daleko)
  195.  
  196. glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);
  197.  
  198.  
  199. glMatrixMode(GL_MODELVIEW);
  200.  
  201. glLoadIdentity();
  202.  
  203. }
  204.  
  205. ///////////////////////////////////////////////////////////
  206.  
  207. // Główny punkt wejścia programu
  208.  
  209. void main(int argc, char* argv[]) {
  210.  
  211. glutInit(&argc, argv);
  212.  
  213. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  214.  
  215. glutInitWindowSize(800, 600);
  216.  
  217. glutCreateWindow("Bounce");
  218.  
  219. glutDisplayFunc(RenderScene);
  220.  
  221. glutReshapeFunc(ChangeSize);
  222.  
  223. glutTimerFunc(33, TimerFunction, 1);
  224.  
  225. SetupRC();
  226.  
  227. glutMainLoop();
  228.  
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement