Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.62 KB | None | 0 0
  1.  
  2. //ZESTAW 7, ZADANIE 14 - Indywidualne
  3. #include <GL/glut.h>
  4. #include "math.h"
  5. #include "materials.h"
  6. #include <stdio.h>
  7.  
  8.  
  9.  
  10. // Definicja stalych
  11. #define DLUGOSC_BOKU 10.0
  12. #define OBSERWATOR_ODLEGLOSC 20.0
  13. #define OBSERWATOR_OBROT_X 20.0
  14. #define OBSERWATOR_OBROT_Y 20.0
  15. #define OBSERWATOR_FOV_Y 30.0
  16. int zmienna = 5;
  17. int zmienna2 = 5;
  18. int smooth = 1;
  19. int fill = 1;
  20. int zrodlo1 = 1;
  21. int zrodlo2 = 1;
  22. int obecnymaterial = 0;
  23. int normalne = 1;
  24. int promien = 10;
  25. float v = 10;
  26. float v1, v2, v3;
  27. float kat;
  28. int zmien = 1;
  29.  
  30. float material1[5][4] = {
  31. {0.174500, 0.011750, 0.011750, 0.550000}, // [0] wspolczynnik odbicia swiatla otoczenia
  32. {0.614240, 0.041360, 0.041360, 0.550000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  33. {0.727811, 0.626959, 0.626959, 0.550000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  34. {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  35. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  36. // Tablica parametrow materialu nr 2
  37. float material2[5][4] = {
  38. {1, 1, 1, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  39. {1, 1, 1, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  40. {1, 1, 1, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  41. {0, 0.0, 0.0, 0.0}, // [3] polysk
  42. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  43. float material3[5][4] = {
  44. {0.174500, 0.011750, 0.011750, 0.550000}, // [0] wspolczynnik odbicia swiatla otoczenia
  45. {0.614240, 0.041360, 0.041360, 0.550000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  46. {0.727811, 0.626959, 0.626959, 0.550000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  47. {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  48. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  49. // Tablica parametrow zrodla swiatla nr 1
  50. GLfloat swiatlo1[5][4] =
  51. {
  52. {0.8, 0.8, 0, 1.0}, // [0] otoczenie
  53. {0.1, 0.2, 0.3, 1.0}, // [1] rozproszenie
  54. {0.2, 0.8, 1, 1.0}, // [2] lustrzane
  55. {5, 10, 0, 1.0},// [3] polozenie
  56. {1.0, 1.0, 1.0, 0.0}// [4] kierunek swiecenia
  57. };
  58.  
  59.  
  60.  
  61. // Tablica parametrow zrodla swiatla nr 2
  62. GLfloat swiatlo2[5][4] = {
  63. {0, 1, 1, 1.0}, // [0] otoczenie
  64. {0, 0.2, 0.5, 1.0}, // [1] rozproszenie
  65. {0, 18, 1, 1.0}, // [2] lustrzane
  66. {10.0, -10.0, 10.0, 1.0},// [3] polozenie
  67. {-1.0, -1.0, -1.0, 0.0}// [4] kierunek swiecenia
  68. };
  69.  
  70.  
  71.  
  72. // Zmienne globalne
  73. double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
  74. int szerokoscOkna = 800;
  75. int wysokoscOkna = 600;
  76. int zm1 = 1;
  77. int a = 5;
  78. float length;
  79. GLfloat minOdl = -10.0;
  80. GLfloat maxOdl = -200.0;
  81. GLfloat obsOdl = -30.0;
  82. GLfloat rotObsY = 40.0;
  83. GLfloat rotObsX = 40.0;
  84. GLfloat rotObsZ = 0.0;
  85.  
  86. // Prototypy funkcji
  87. void RysujSzescian(int N);
  88. void UstawParametryWidoku(int szer, int wys);
  89. void WyswietlObraz(void);
  90. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  91. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y);
  92.  
  93. //////////////////////////////////////////////////////////////////////////////////////////
  94. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  95. // Srodek szescianu znajduje siÄ™ w punkcie (0,0,0).
  96.  
  97.  
  98. void PoliczNormal(float x1, float x2, float x3, float y1, float y2, float y3, float z1, float z2, float z3, float* normal)
  99. {
  100. float xa = x2 - x1;
  101. float ya = y2 - y1;
  102. float za = z2 - z1;
  103.  
  104. float xb = x3 - x1;
  105. float yb = y3 - y1;
  106. float zb = z3 - z1;
  107.  
  108. normal[0] = ya * zb - za * yb;
  109. normal[1] = za * xb - xa * zb;
  110. normal[2] = xa * yb - ya * xb;
  111. //normalizacja
  112. length = sqrtf(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]);
  113.  
  114. normal[0] /= length;
  115. normal[1] /= length;
  116. normal[2] /= length;
  117. }
  118. void UstawSwiatlaIMaterialy()
  119. {
  120. glEnable(GL_LIGHTING);
  121. // Odblokowanie zrodla swiatla nr 1
  122. if (zrodlo1 == 1) {
  123. glEnable(GL_LIGHT0);
  124. glLightfv(GL_LIGHT0, GL_AMBIENT, swiatlo1[0]);
  125. glLightfv(GL_LIGHT0, GL_DIFFUSE, swiatlo1[1]);
  126. glLightfv(GL_LIGHT0, GL_SPECULAR, swiatlo1[2]);
  127. glLightfv(GL_LIGHT0, GL_POSITION, swiatlo1[3]);
  128. glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, swiatlo1[4]);
  129.  
  130. }
  131. else {
  132. //wylaczenie zrodla swiatla nr 1
  133. glDisable(GL_LIGHT0);
  134. }
  135. // Odblokowanie zrodla swiatla nr 2
  136. if (zrodlo2 == 1) {
  137. glEnable(GL_LIGHT1);
  138. glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo2[0]);
  139. glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo2[1]);
  140. glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo2[2]);
  141. glLightfv(GL_LIGHT1, GL_POSITION, swiatlo2[3]);
  142. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo2[4]);
  143.  
  144. }
  145. else {
  146. //wylaczenie zrodla swiatla nr 2
  147. glDisable(GL_LIGHT1);
  148. }
  149.  
  150. switch (obecnymaterial)
  151. {
  152. case 0:
  153. glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  154. glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  155. glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  156. glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  157. glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  158. break;
  159. case 1:
  160. glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  161. glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  162. glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  163. glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  164. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  165. break;
  166. case 2:
  167. glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
  168. glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
  169. glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
  170. glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
  171. glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
  172. break;
  173. default:
  174. break;
  175. }
  176. }
  177.  
  178. void RysujTekstRastrowy(void* font, char* tekst)
  179. {
  180. int i = 0;
  181. while (tekst[i] != '\0')
  182. {
  183. glutBitmapCharacter(font, tekst[i]);
  184. i++;
  185. }
  186. }
  187.  
  188.  
  189.  
  190.  
  191. void RysujNakladke(void)
  192. {
  193. char tab[13][50] =
  194. { "+ - Oddalenie",
  195. "- - Przyblizenie",
  196. "p - Zmiana materialu stozka",
  197. "o - Sterowanie swiatlem nr. 1",
  198. "u - Sterowanie swiatlem nr. 2",
  199. "i - Widocznosc wektorow normalnych",
  200. "7 - Zmiana cienia (GL_SMOOTH i GL_FLAT)",
  201. "6 ^ - Zmiana wypelnienia (GL_FILL, GL_LINE)",
  202. "1 - Zmniejszanie ilosci podzialow pionowych",
  203. "2 - Zwiekszanie ilosci podzialow pionowych ",
  204. "4- Zmniejszanie ilosci podzialow poziomych",
  205. "5- Zwiekszenie ilosci podzialow poziomych",
  206. "Strzałki + zx - Sterowanie kamera",
  207. };
  208. int i;
  209.  
  210. // Zmiana typu rzutu z perspektywicznego na ortogonalny
  211. glDisable(GL_LIGHTING);
  212. glMatrixMode(GL_PROJECTION);
  213. glPushMatrix();
  214. glLoadIdentity();
  215. glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  216.  
  217. // Modelowanie sceny 2D (zawartosci nakladki)
  218. glMatrixMode(GL_MODELVIEW);
  219. glPushMatrix();
  220. glLoadIdentity();
  221.  
  222.  
  223.  
  224. // Okreslenie koloru tekstu
  225. glColor3f(1.0, 1.0, 1.0);
  226.  
  227. // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
  228.  
  229. for (i = 0;i < 13;i++)
  230. {
  231. glRasterPos2i(10, 10 + i * 13);
  232. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, tab[13 - i - 1]);
  233. }
  234.  
  235. glMatrixMode(GL_PROJECTION);
  236. glPopMatrix();
  237. glMatrixMode(GL_MODELVIEW);
  238. glPopMatrix();
  239. glEnable(GL_LIGHTING);
  240. }
  241.  
  242. void RysujStozekBezPodstaw(float R, float r, float y, float h, int n)
  243. {
  244. float alfa;
  245. int i;
  246. float x;
  247. float z;
  248.  
  249. float normal[3];
  250. float x1, x2, x3, z1, z2, z3, y1, y2, y3, xa, za;
  251.  
  252.  
  253. glBegin(GL_QUAD_STRIP);
  254.  
  255. alfa = 90.0 / n; //kat
  256. for (i = 0; i <= n; i++)
  257. {
  258.  
  259. x = cos(0.0174532925f * i * alfa);
  260. z = sin(0.0174532925f * i * alfa);
  261. xa = cos(0.0174532925f * (i + 1) * alfa);
  262. za = sin(0.0174532925f * (i + 1) * alfa);
  263.  
  264. glVertex3f(x * R, y + 0, z * R);
  265. glVertex3f(x * r, y + h, z * r);
  266.  
  267.  
  268.  
  269. }
  270.  
  271.  
  272. x = cos(0.0);
  273. z = sin(0.0);
  274.  
  275. // glVertex3f(R, y + 0, 0);
  276. // glVertex3f(r, y + h, 0);
  277.  
  278. glEnd();
  279.  
  280. }
  281.  
  282.  
  283.  
  284. void RysujKolo(float R, float y, int n)
  285. {
  286. float alfa;
  287. int i;
  288. float x;
  289. float z;
  290.  
  291. glColor3f(0.0, 0.0, 1.0);
  292. glBegin(GL_TRIANGLE_FAN);
  293.  
  294. glVertex3f(0, y, 0);
  295.  
  296. alfa = 90.0f / n;
  297. for (i = 0; i <= n; i++)
  298. {
  299. x = cos(0.0174532925f * i * alfa);
  300. z = sin(0.0174532925f * i * alfa);
  301.  
  302. glVertex3f(x * R, y + 0, z * R);
  303. }
  304.  
  305.  
  306. x = cos(0.0);
  307. z = sin(0.0);
  308.  
  309. glVertex3f(x * R, y + 0, z * R);
  310.  
  311. glEnd();
  312. }
  313.  
  314.  
  315. void ScianaBoczna(float R, float h)
  316. {
  317. glColor3f(1, 0.0, 0.5); // sciana boczna
  318. glBegin(GL_QUAD_STRIP);
  319. glVertex3f(R, 0, 0);
  320. glVertex3f(R, h, 0);
  321. glVertex3f(0, 0, 0);
  322. glVertex3f(0, h, 0);
  323. glVertex3f(0, 0, R);
  324. glVertex3f(0, h, R);
  325.  
  326.  
  327. glEnd();
  328.  
  329. }
  330.  
  331. void RysujWektory(float R, float r, float y, float h, int n)
  332. {
  333. float alfa;
  334. int i;
  335. float x;
  336. float z;
  337. float normal[3];
  338. float x1, x2, x3, z1, z2, z3, y1, y2, y3, xa, za;
  339.  
  340.  
  341.  
  342.  
  343. alfa = 90.0 / n; //kat
  344. for (i = 0; i <= n; i++)
  345. {
  346.  
  347. x = cos(0.0174532925f * i * alfa);
  348. z = sin(0.0174532925f * i * alfa);
  349. xa = cos(0.0174532925f * (i + 1) * alfa);
  350. za = sin(0.0174532925f * (i + 1) * alfa);
  351.  
  352. x1 = x * R;
  353. x2 = x * r;
  354. x3 = xa * R;
  355. y1 = y;
  356. y2 = y + h;
  357. y3 = y;
  358. z1 = z * R;
  359. z2 = z * r;
  360. z3 = za * R;
  361.  
  362. PoliczNormal(x1, x2, x3, y1, y2, y3, z1, z2, z3, normal);
  363.  
  364. if (normalne)
  365. {
  366. glBegin(GL_LINES);
  367.  
  368. glVertex3f(x * R, y + 0, z * R);
  369. glVertex3f(x1 + normal[0], y1 + normal[1], z1 + normal[2]);
  370. glVertex3f(x * r, y + h, z * r);
  371. glVertex3f(x2 + normal[0], y2 + normal[1], z2 + normal[2]);
  372.  
  373. glEnd();
  374. }
  375. }
  376.  
  377.  
  378.  
  379.  
  380. }
  381.  
  382.  
  383.  
  384. void RysujStozekZPodzialami(float R, float r, float h, int n, int m)
  385. {
  386. int i;
  387. float dR, dr, dh, y, tmp1, tmp2;
  388. dh = h / m; // wysokosc nowego stozka
  389. for (i = 0; i < m; i++)
  390. {
  391.  
  392. y = dh * i; // poczatkowa wysokosc
  393. tmp1 = y / h;
  394. tmp2 = (y + dh) / h;
  395. dR = R + (r - R) * tmp1; // promien dolnej podstawy nowego stozka
  396. dr = R + (r - R) * tmp2; // promien gornej podstawy nowego stozka
  397. if (i % 2 == 0)
  398. glColor3f(0.0, 1.0, 0.0);
  399. else
  400. glColor3f(1.0, 0.0, 1.0);
  401. RysujStozekBezPodstaw(dR, dr, y, dh, n);
  402. RysujWektory(dR, dr, y, dh, n);
  403. }
  404. RysujKolo(R, 0, n);
  405. RysujKolo(r, h, n);
  406. ScianaBoczna(R, h);
  407. }
  408.  
  409.  
  410. void RysujSzescian()
  411. {
  412.  
  413. // Pocztaek tworzenia ukladu wspolrzednych
  414. glBegin(GL_LINES);
  415.  
  416. // Os X
  417. glColor3f(1.0, 0.0, 0.0);
  418.  
  419. glVertex3f(-25.0, 0.0, 0.0);
  420. glVertex3f(25.0, 0.0, 0.0);
  421.  
  422. // Os Y
  423. glColor3f(0.0, 1.0, 0.0);
  424. glVertex3f(0.0, -25.0, 0.0);
  425. glVertex3f(0.0, 25.0, 0.0);
  426.  
  427. // Os Z
  428. glColor3f(0.0, 0.0, 1.0);
  429. glVertex3f(0.0, 0.0, -25.0);
  430. glVertex3f(0.0, 0.0, 25.0);
  431.  
  432. // Koniec tworzenia ukladu wspolrzednych
  433. glEnd();
  434. glColor3f(1.0, 1.0, 1.0);
  435. glShadeModel(GL_FLAT);
  436. // Sciany boczne
  437. glBegin(GL_QUAD_STRIP);
  438. glColor3f(1.0, 0, 0);
  439. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  440. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  441. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  442. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  443.  
  444. glColor3f(1.0, 0.5, 0.5);
  445. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  446. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  447. glColor3f(0.0, 1.0, 0);
  448. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  449. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  450. glColor3f(0.0, 0, 1.0);
  451. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  452. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  453. glEnd();
  454.  
  455. // Gorna sciana
  456. glColor3f(0.5, 0.5, 1.0);
  457. glBegin(GL_QUAD_STRIP);
  458. glVertex3f(-a / 2.0, a / 2.0, a / 2.0);
  459. glVertex3f(a / 2.0, a / 2.0, a / 2.0);
  460. glVertex3f(-a / 2.0, a / 2.0, -a / 2.0);
  461. glVertex3f(a / 2.0, a / 2.0, -a / 2.0);
  462. glEnd();
  463.  
  464. // Dolna sciana
  465. glBegin(GL_QUAD_STRIP);
  466. glColor3f(0.5, 0, 0.5);
  467. glVertex3f(-a / 2.0, -a / 2.0, a / 2.0);
  468. glVertex3f(a / 2.0, -a / 2.0, a / 2.0);
  469. glVertex3f(-a / 2.0, -a / 2.0, -a / 2.0);
  470. glVertex3f(a / 2.0, -a / 2.0, -a / 2.0);
  471. glEnd();
  472.  
  473.  
  474.  
  475. }
  476.  
  477.  
  478.  
  479. //////////////////////////////////////////////////////////////////////////////////////////
  480. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  481. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  482. void UstawParametryWidoku(int szer, int wys)
  483. {
  484. // Zapamietanie wielkosci widoku
  485. szerokoscOkna = szer;
  486. wysokoscOkna = wys;
  487.  
  488. // Ustawienie parametrow viewportu
  489. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  490.  
  491. // Przejscie w tryb modyfikacji macierzy rzutowania
  492. glMatrixMode(GL_PROJECTION);
  493. glLoadIdentity();
  494. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  495. }
  496.  
  497. void SwapLineFill(int zm1)
  498. {
  499. if (zm1 == 1)
  500. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  501. else
  502. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  503.  
  504. }
  505.  
  506. void SyncSmooth()
  507. {
  508. if (smooth)
  509. glShadeModel(GL_SMOOTH);
  510. else
  511. glShadeModel(GL_FLAT);
  512. }
  513. //////////////////////////////////////////////////////////////////////////////////////////
  514. // Funkcja wyswietlajaca pojedyncza klatke animacji
  515. void WyswietlObraz(void)
  516. {
  517. // Wyczyszczenie bufora koloru i bufora glebokosci
  518. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  519.  
  520. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  521. glMatrixMode(GL_MODELVIEW);
  522.  
  523. // Zastapienie aktywnej macierzy macierza jednostkowa
  524. glLoadIdentity();
  525.  
  526. // Ustalenie polozenia obserwatora
  527. glTranslatef(0, 0, obsOdl);
  528. glRotatef(rotObsX, 1, 0, 0);
  529. glRotatef(rotObsY, 0, 1, 0);
  530. glRotatef(rotObsZ, 0, 0, 1);
  531. // Narysowanie szescianu
  532. // RysujSzescian();
  533. glColor3f(1.0, 1.0, 1.0);
  534.  
  535. RysujStozekZPodzialami(2, 2, 3, zmienna, zmienna2);
  536. SwapLineFill(zm1);
  537. UstawSwiatlaIMaterialy();
  538. RysujNakladke();
  539. // Przelaczenie buforow ramki
  540. glutSwapBuffers();
  541. }
  542.  
  543.  
  544. //////////////////////////////////////////////////////////////////////////////////////////
  545. // Funkcja obslugi klawiatury
  546. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  547. {
  548. switch (klawisz)
  549. {
  550. case '+':
  551. if (obsOdl < minOdl)
  552. obsOdl++;
  553. break;
  554.  
  555. case '-':
  556. if (obsOdl > maxOdl)
  557. obsOdl--;
  558. break;
  559.  
  560. case 'z':
  561. rotObsZ++;
  562. break;
  563.  
  564. case 'x':
  565. rotObsZ--;
  566. break;
  567.  
  568. case '1':
  569. zmienna = (zmienna > 4) ? zmienna - 1 : zmienna;
  570. break;
  571. case '2':
  572. zmienna = (zmienna < 64) ? zmienna + 1 : zmienna;
  573. break;
  574. case '4':
  575. zmienna2 = (zmienna2 > 4) ? zmienna2 - 1 : zmienna2;
  576. break;
  577. case '5':
  578. zmienna2 = (zmienna2 < 64) ? zmienna2 + 1 : zmienna2;
  579. break;
  580. case '^':
  581. zm1 = 0;
  582. break;
  583. case '6':
  584. zm1 = 1;
  585. break;
  586. case '7':
  587. smooth = !smooth;
  588. SyncSmooth();
  589. break;
  590.  
  591. case 'p':
  592. obecnymaterial++;
  593. if (obecnymaterial > 2)
  594. obecnymaterial = 0;
  595. break;
  596. case 'o':
  597. zrodlo1 = !zrodlo1;
  598. break;
  599. case 'u':
  600. zrodlo2 = !zrodlo2;
  601. break;
  602. case 'i':
  603. normalne = !normalne;
  604. break;
  605.  
  606. }
  607. }
  608.  
  609. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
  610. {
  611. switch (klawisz)
  612. {
  613. case GLUT_KEY_UP:
  614. rotObsX++;
  615. break;
  616.  
  617. case GLUT_KEY_DOWN:
  618. rotObsX--;
  619. break;
  620.  
  621. case GLUT_KEY_LEFT:
  622. rotObsY++;
  623. break;
  624.  
  625. case GLUT_KEY_RIGHT:
  626. rotObsY--;
  627. break;
  628. }
  629. }
  630.  
  631. //////////////////////////////////////////////////////////////////////////////////////////
  632. // Glowna funkcja programu
  633. int main(int argc, char** argv)
  634. {
  635.  
  636. // Zainicjowanie biblioteki GLUT
  637. glutInit(&argc, argv);
  638.  
  639. // Ustawienie trybu wyswietlania
  640. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  641.  
  642. // Ustawienie polozenia dolenego lewego rogu okna
  643. glutInitWindowPosition(100, 100);
  644.  
  645. // Ustawienie rozmiarow okna
  646. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  647.  
  648. // Utworzenie okna
  649. glutCreateWindow("Szescian");
  650.  
  651. // Odblokowanie bufora glebokosci
  652. glEnable(GL_DEPTH_TEST);
  653.  
  654. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  655. glClearDepth(1000.0);
  656.  
  657. // Ustawienie koloru czyszczenia bufora ramki
  658. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  659.  
  660. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  661.  
  662. //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  663.  
  664.  
  665. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  666. glutDisplayFunc(WyswietlObraz);
  667.  
  668. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  669. // zmieniane sa rozmiary okna
  670. glutReshapeFunc(UstawParametryWidoku);
  671.  
  672. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  673. // zadnych zadan
  674. glutIdleFunc(WyswietlObraz);
  675.  
  676. // Zarejestrowanie funkcji obslugi klawiatury
  677. glutKeyboardFunc(ObslugaKlawiatury);
  678.  
  679. //DOPISANE
  680. glutSpecialFunc(ObslugaKlawiszySpecjalnych);
  681.  
  682. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  683. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  684. glutMainLoop();
  685.  
  686. return 0;
  687. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement