Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.66 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Program wyswietlajacy szescian w rzucie perspektywicznym. Dlugosc boku szescianu
  4. // moze byc interaktywnie zmieniana za pomoca klwiszy '+' i '-'.
  5. //
  6. //////////////////////////////////////////////////////////////////////////////////////////
  7.  
  8.  
  9. //ZESTAW 4, ZADANIE 4 - Indywidualne
  10. #include "GL/glut.h"
  11. #include <math.h>
  12.  
  13. // Definicja stalych
  14. #define DLUGOSC_BOKU 10.0
  15. #define OBSERWATOR_ODLEGLOSC 20.0
  16. #define OBSERWATOR_OBROT_X 20.0
  17. #define OBSERWATOR_OBROT_Y 20.0
  18. #define OBSERWATOR_FOV_Y 30.0
  19.  
  20. //zmienna podziałów pionowych
  21. int zmienna = 4;
  22. //zmienna podziałów poziomych
  23. int zmienna2 = 4;
  24.  
  25. // Zmienne globalne
  26. double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
  27. int szerokoscOkna = 800;
  28. int wysokoscOkna = 600;
  29. int zm1 = 1;
  30. int smooth = 1;
  31. int a = 5;
  32.  
  33. int mat1 = 0;
  34. int mat2 = 0;
  35.  
  36. GLfloat minOdl = -10.0;
  37. GLfloat maxOdl = -200.0;
  38. GLfloat obsOdl = -30.0;
  39. GLfloat rotObsY = 40.0;
  40. GLfloat rotObsX = 40.0;
  41. GLfloat rotObsZ = 0.0;
  42.  
  43. int N = 5;
  44. int M = 5;
  45.  
  46. // Tablica parametrow swiatla 1
  47. GLfloat swiatlo1[10][4] = {
  48. {0.0, 0.0, 0.0, 1.0}, // [0] otoczenie
  49. {1.0, 1.0, 1.0, 1.0}, // [1] rozproszenie
  50. {1.0, 1.0, 1.0, 1.0}, // [2] lustrzane
  51. {0.0, 0.0, 1.0, 1.0}, // [3] polozenie
  52. {-1.0, 0.0, 0.0, 0.0}, // [4] kierunek swiecenia
  53. {0.0, 0.0, 0.0, 0.0}, // [5] tlumienie katowe swiatla
  54. {30.0, 0.0, 0.0, 0.0},// [6] kat odciecia swiatla
  55. {1.0, 0.0, 0.0, 0.0}, // [7] stale tlumienie
  56. {0.0, 0.0, 0.0, 0.0}, // [8] tlumienie liniowe
  57. {0.0, 0.0, 0.0, 0.0} }; // [9] tlumienie kwadratowe
  58.  
  59. // Tablica parametrow zrodla swiatla nr 1
  60. GLfloat swiatlo2[10][4] = {
  61. {0,0.7, 0, 1.0}, // [0] otoczenie
  62. {0, 0.7, 0, 1.0}, // [1] rozproszenie
  63. {0, 18, 1, 1.0}, // [2] lustrzane
  64. {10, 10.0, 10.0, 1.0},// [3] polozenie
  65. {-1.0, -1.0, -1.0, 0.0},// [4] kierunek swiecenia
  66. {0.0, 0.0, 0.0, 0.0}, // [5] tlumienie katowe swiatla
  67. {180.0, 0.0, 0.0, 0.0},// [6] kat odciecia swiatla
  68. {1.0, 0.0, 0.0, 0.0}, // [7] stale tlumienie
  69. {0.0, 0.0, 0.0, 0.0}, // [8] tlumienie liniowe
  70. {0.0, 0.0, 0.0, 0.0} }; // [9] tlumienie kwadratowe
  71.  
  72. float material1[5][4] = {
  73. {0.021500, 0.174500, 0.021500, 0.550000}, // [0] wspolczynnik odbicia swiatla otoczenia
  74. {0.075680, 0.614240, 0.075680, 0.550000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  75. {0.633000, 0.727811, 0.633000, 0.550000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  76. {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  77. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  78. // Tablica parametrow materialu nr 2
  79. float material2[5][4] = {
  80. {0.250000, 0.148000, 0.064750, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  81. {0.400000, 0.236800, 0.103600, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  82. {0.774597, 0.458561, 0.200621, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  83. {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  84. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  85. float material3[5][4] = {
  86. {0.247250, 0.199500, 0.074500, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  87. {0.751640, 0.606480, 0.226480, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  88. {0.628281, 0.555802, 0.366065, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  89. {52.2, 0.0, 0.0, 0.0}, // [3] polysk
  90. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  91.  
  92.  
  93. // Prototypy funkcji
  94. void RysujSzescian(int N);
  95. void UstawParametryWidoku(int szer, int wys);
  96. void WyswietlObraz(void);
  97. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  98. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y);
  99.  
  100. //////////////////////////////////////////////////////////////////////////////////////////
  101. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  102. // Srodek szescianu znajduje siÄ™ w punkcie (0,0,0).
  103.  
  104. //sciany boczne
  105. void RysujStozekBezPodstaw(float R, float r, float y, float h, int n)
  106. {
  107. float alfa;
  108. int i;
  109. float x;
  110. float z;
  111.  
  112. if (smooth)
  113. glShadeModel(GL_SMOOTH);
  114. else
  115. glShadeModel(GL_FLAT);
  116.  
  117. //glColor3f(1.0, 0.0, 0.0);
  118. glBegin(GL_TRIANGLE_STRIP);
  119.  
  120.  
  121. alfa = 90.0 / n; //kÄ…t
  122. for (i = 0; i <= n; i++)
  123. {
  124.  
  125. x = cos(0.0174532925f * i * alfa);
  126. z = sin(0.0174532925f * i * alfa);
  127.  
  128. glVertex3f(x * R, y + 0, z * R);
  129. glVertex3f(x * r, y + h, z * r);
  130.  
  131. }
  132.  
  133.  
  134. x = cos(0.0);
  135. z = sin(0.0);
  136.  
  137. // glVertex3f(x * R, y + 0, z * R);
  138. //glVertex3f(x * r, y + h, z * r);
  139.  
  140. glEnd();
  141.  
  142. //sciana boczna po plaszczyznie X
  143. glBegin(GL_TRIANGLE_STRIP);
  144. glColor3f(1.0, 0.0, 0.5);
  145. glVertex3f(0, y, R);
  146. glVertex3f(0, y, 0);
  147. glVertex3f(0, y + h, r);
  148. glVertex3f(0, y + h, 0);
  149. glEnd();
  150.  
  151. //sciana boczna po plaszczyznie Z
  152. glBegin(GL_TRIANGLE_STRIP);
  153. glColor3f(1.0, 0.5, 1.0);
  154. glVertex3f(0, y + h, 0);
  155. glVertex3f(0, y, 0);
  156. glVertex3f(r, y + h, 0);
  157. glVertex3f(R, y, 0);
  158. glVertex3f(0, y, 0);
  159. glEnd();
  160. }
  161.  
  162.  
  163. void zmianaMaterialu() {
  164. if (mat1 == 1) {
  165. glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  166. glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  167. glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  168. glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  169. glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  170. }
  171. else if (mat2 == 1) {
  172. glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  173. glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  174. glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  175. glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  176. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  177. }
  178. else {
  179. glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
  180. glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
  181. glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
  182. glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
  183. glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
  184. }
  185. }
  186.  
  187. //podstawa
  188. void RysujKolo(float R, float y, int n)
  189. {
  190. float alfa;
  191. int i;
  192. float x;
  193. float z;
  194.  
  195. glColor3f(0.0, 1.0, 1.0);
  196. glBegin(GL_TRIANGLE_FAN);
  197.  
  198. glVertex3f(0, y, 0);
  199.  
  200. alfa = 90.0f / n; //kąt 90 stopni (ćwierć stożka)
  201. for (i = 0; i <= n; i++)
  202. {
  203. x = cos(0.0174532925f * i * alfa);
  204. z = sin(0.0174532925f * i * alfa);
  205. glVertex3f(x * R, y + 0, z * R);
  206. }
  207.  
  208.  
  209. x = cos(0.0);
  210. z = sin(0.0);
  211.  
  212. //glVertex3f(x * R, y + 0, z * R);
  213.  
  214. glEnd();
  215. }
  216.  
  217. /*
  218. void ScianaBoczna(float R, float h)
  219. {
  220. glColor3f(1, 0.0, 1); // sciana boczna
  221. glBegin(GL_TRIANGLE_STRIP);
  222. glVertex3f(0, h, 0);
  223. glVertex3f(R, 0, 0);
  224. glVertex3f(-R, 0, 0);
  225. glEnd();
  226.  
  227.  
  228. }
  229.  
  230. */
  231.  
  232. void RysujStozekZPodzialami(float R, float r, float h, int n, int m)
  233. {
  234. int i;
  235. float dR, dr, dh, y, tmp1, tmp2;
  236. dh = h / m; // wysokosc nowego stozka
  237. for (i = 0; i < m; i++)
  238. {
  239.  
  240. y = dh * i; // poczatkowa wysokosc
  241. tmp1 = y / h;
  242. tmp2 = (y + dh) / h;
  243. dR = R + (r - R) * tmp1; // promien dolnej podstawy nowego stozka
  244. dr = R + (r - R) * tmp2; // promien gornej podstawy nowego stozka
  245. /*if (i % 2 == 0)
  246. glColor3f(0.0, 1.0, 1.0);
  247. else*/
  248. glColor3f(0.5, 0.5, 1.0);
  249. RysujStozekBezPodstaw(dR, dr, y, dh, n);
  250. }
  251. RysujKolo(R, 0, n);
  252. RysujKolo(r, h, n);
  253. // ScianaBoczna(R, h);
  254. }
  255.  
  256. void RysujStozekSciety()
  257. {
  258.  
  259. glBegin(GL_TRIANGLE_FAN); // gorna podstawa
  260. glColor3f(0.0, 0.0, 1.0);
  261. glVertex3f(0, 25, 0);
  262. for (int i = 0; i * 360 / N <= 360; i++)
  263. {
  264. glVertex3f(10 * cos((float)(i * 360 / N) * 3.1415926535 / 180.0), 25, 10 * sin((float)(i * 360 / N) * 3.1415926535 / 180.0));
  265. }
  266. glEnd()
  267. ;
  268. glBegin(GL_TRIANGLE_FAN); //dolna podstawa
  269. glColor3f(0.0, 1.0, 0.0);
  270. glVertex3f(0, 0, 0);
  271. for (int i = 0; i * 360 / N <= 360; i++)
  272. {
  273. glVertex3f(20 * cos((float)(i * 360 / N) * 3.1415926535 / 180.0), 0, 20 * sin((float)(i * 360 / N) * 3.1415926535 / 180.0));
  274. }
  275. glEnd();
  276.  
  277.  
  278. glBegin(GL_TRIANGLES);
  279. glColor3f(1.0, 0.0, 0.0);
  280. for (int i = 0; i * 360.0 / N <= 360.0; i++)
  281. {
  282. glVertex3f(20 * cos((float)(i * 360 / N) * 3.1415926535 / 180.0), 0, 20 * sin((float)(i * 360 / N) * 3.1415926535 / 180.0));
  283. glVertex3f(10 * cos((float)(i * 360 / N) * 3.1415926535 / 180.0), 25, 10 * sin((float)(i * 360 / N) * 3.1415926535 / 180.0));
  284. glVertex3f(10 * cos((float)((i + 1) * 360 / N) * 3.1415926535 / 180.0), 25, 10 * sin((float)((i + 1) * 360 / N) * 3.1415926535 / 180.0));
  285.  
  286. glVertex3f(20 * cos((float)(i * 360 / N) * 3.1415926535 / 180.0), 0, 20 * sin((float)(i * 360 / N) * 3.1415926535 / 180.0));
  287. glVertex3f(20 * cos((float)((i+1) * 360 / N) * 3.1415926535 / 180.0), 0, 20 * sin((float)((i+1) * 360 / N) * 3.1415926535 / 180.0));
  288. glVertex3f(10 * cos((float)((i + 1) * 360 / N) * 3.1415926535 / 180.0), 25, 10 * sin((float)((i + 1) * 360 / N) * 3.1415926535 / 180.0));
  289. }
  290. glEnd();
  291. }
  292.  
  293. void Uklad_wspolrzednych()
  294. {
  295.  
  296. // Pocztaek tworzenia ukladu wspolrzednych
  297. glBegin(GL_LINES);
  298.  
  299. // Os X
  300. glColor3f(1.0, 0.0, 0.0);
  301.  
  302. glVertex3f(-25.0, 0.0, 0.0);
  303. glVertex3f(25.0, 0.0, 0.0);
  304.  
  305. // Os Y
  306. glColor3f(0.0, 1.0, 0.0);
  307. glVertex3f(0.0, -25.0, 0.0);
  308. glVertex3f(0.0, 25.0, 0.0);
  309.  
  310. // Os Z
  311. glColor3f(0.0, 0.0, 1.0);
  312. glVertex3f(0.0, 0.0, -25.0);
  313. glVertex3f(0.0, 0.0, 25.0);
  314.  
  315. // Koniec tworzenia ukladu wspolrzednych
  316. glEnd();
  317.  
  318.  
  319.  
  320. /*
  321. // Sciany boczne
  322. glBegin(GL_QUAD_STRIP);
  323. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  324. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  325. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  326. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  327.  
  328. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  329. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  330.  
  331. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  332. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  333.  
  334. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  335. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  336. glEnd();
  337.  
  338. // Gorna sciana
  339. glBegin(GL_QUAD_STRIP);
  340. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  341. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  342. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  343. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  344. glEnd();
  345.  
  346. // Dolna sciana
  347. glBegin(GL_QUAD_STRIP);
  348. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  349. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  350. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  351. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  352. glEnd();
  353.  
  354. */
  355.  
  356. }
  357.  
  358.  
  359.  
  360. //////////////////////////////////////////////////////////////////////////////////////////
  361. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  362. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  363. void UstawParametryWidoku(int szer, int wys)
  364. {
  365. // Zapamietanie wielkosci widoku
  366. szerokoscOkna = szer;
  367. wysokoscOkna = wys;
  368.  
  369. // Ustawienie parametrow viewportu
  370. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  371.  
  372. // Przejscie w tryb modyfikacji macierzy rzutowania
  373. glMatrixMode(GL_PROJECTION);
  374. glLoadIdentity();
  375. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  376. }
  377.  
  378. void SwapLineFill(int zm1)
  379. {
  380. if (zm1 == 1)
  381. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  382. else
  383. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  384.  
  385. }
  386.  
  387. void SwapShadeModel(int zm2)
  388. {
  389. if (zm2 == 1)
  390. glShadeModel(GL_SMOOTH);
  391. else
  392. glShadeModel(GL_FLAT);
  393.  
  394. }
  395. //////////////////////////////////////////////////////////////////////////////////////////
  396. // Funkcja wyswietlajaca pojedyncza klatke animacji
  397. void WyswietlObraz(void)
  398. {
  399. // Wyczyszczenie bufora koloru i bufora glebokosci
  400. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  401.  
  402. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  403. glMatrixMode(GL_MODELVIEW);
  404.  
  405. // Zastapienie aktywnej macierzy macierza jednostkowa
  406. glLoadIdentity();
  407.  
  408. // Ustalenie polozenia obserwatora
  409. glTranslatef(0, 0, obsOdl);
  410. glRotatef(rotObsX, 1, 0, 0);
  411. glRotatef(rotObsY, 0, 1, 0);
  412. glRotatef(rotObsZ, 0, 0, 1);
  413. // Narysowanie szescianu
  414. Uklad_wspolrzednych();
  415. //RysujStozekSciety();
  416. glColor3f(1.0, 1.0, 1.0);
  417. RysujStozekZPodzialami(5, 0, 5, zmienna, zmienna2);
  418. SwapLineFill(zm1);
  419. //SwapShadeModel(zm2);
  420. // Przelaczenie buforow ramki
  421. glutSwapBuffers();
  422. }
  423.  
  424.  
  425. //////////////////////////////////////////////////////////////////////////////////////////
  426. // Funkcja obslugi klawiatury
  427. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  428. {
  429. switch (klawisz)
  430. {
  431. //przybliżanie
  432. case '+':
  433. case '=':
  434. if (obsOdl < minOdl)
  435. obsOdl++;
  436. break;
  437. //oddalanie
  438. case '-':
  439. case '_':
  440. if (obsOdl > maxOdl)
  441. obsOdl--;
  442. break;
  443. //rotacja wokół osi Z
  444. case 'z':
  445. rotObsZ++;
  446. break;
  447.  
  448. case 'x':
  449. rotObsZ--;
  450. break;
  451. //zwiekszanie podziałów pionowych
  452. case '1':
  453. zmienna = (zmienna > 4) ? zmienna - 1 : zmienna;
  454. break;
  455. case '2':
  456. zmienna = (zmienna < 64) ? zmienna + 1 : zmienna;
  457. break;
  458. case '4':
  459. zmienna2 = (zmienna2 > 4) ? zmienna2 - 1 : zmienna2;
  460. break;
  461. case '5':
  462. zmienna2 = (zmienna2 < 64) ? zmienna2 + 1 : zmienna2;
  463. break;
  464. case '&':
  465. zm1 = 0;
  466. break;
  467. case '7':
  468. zm1 = 1;
  469. break;
  470. case '9':
  471. smooth = !smooth;
  472.  
  473. break;
  474. }
  475. }
  476.  
  477. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
  478. {
  479. switch (klawisz)
  480. {
  481. //rotacja wokół osi X
  482. case GLUT_KEY_UP:
  483. rotObsX++;
  484. break;
  485.  
  486. case GLUT_KEY_DOWN:
  487. rotObsX--;
  488. break;
  489. //rotacja wokół osi Y
  490. case GLUT_KEY_LEFT:
  491. rotObsY++;
  492. break;
  493.  
  494. case GLUT_KEY_RIGHT:
  495. rotObsY--;
  496. break;
  497. }
  498. }
  499.  
  500. //////////////////////////////////////////////////////////////////////////////////////////
  501. // Glowna funkcja programu
  502. int main(int argc, char** argv)
  503. {
  504.  
  505. // Zainicjowanie biblioteki GLUT
  506. glutInit(&argc, argv);
  507.  
  508. // Ustawienie trybu wyswietlania
  509. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  510.  
  511. // Ustawienie polozenia dolenego lewego rogu okna
  512. glutInitWindowPosition(100, 100);
  513.  
  514. // Ustawienie rozmiarow okna
  515. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  516.  
  517. // Utworzenie okna
  518. glutCreateWindow("Szescian");
  519.  
  520. // Odblokowanie bufora glebokosci
  521. glEnable(GL_DEPTH_TEST);
  522.  
  523. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  524. glClearDepth(1000.0);
  525.  
  526. // Ustawienie koloru czyszczenia bufora ramki
  527. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  528.  
  529. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  530.  
  531. //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  532.  
  533.  
  534. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  535. glutDisplayFunc(WyswietlObraz);
  536.  
  537. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  538. // zmieniane sa rozmiary okna
  539. glutReshapeFunc(UstawParametryWidoku);
  540.  
  541. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  542. // zadnych zadan
  543. glutIdleFunc(WyswietlObraz);
  544.  
  545. // Zarejestrowanie funkcji obslugi klawiatury
  546. glutKeyboardFunc(ObslugaKlawiatury);
  547.  
  548. //DOPISANE
  549. glutSpecialFunc(ObslugaKlawiszySpecjalnych);
  550.  
  551. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  552. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  553. glutMainLoop();
  554.  
  555. return 0;
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement