Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.99 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. #include "glut.h"
  9. #include <math.h>
  10. #include <time.h>
  11. #include <stdint.h>
  12.  
  13.  
  14. #define odlMin 5
  15. #define odlMax 200
  16. #define Pi 3.14159265359
  17.  
  18. int podzialPionowy = 8;
  19. int podzialPoziomy = 8;
  20. int szerokoscOkna = 800;
  21. int wysokoscOkna = 600;
  22.  
  23. GLboolean tryb = GL_TRUE;
  24.  
  25. GLfloat odlObs = 50.0;
  26. GLfloat rotObsY = 40.0;
  27. GLfloat rotObsX = 40.0;
  28. GLfloat rotObsZ = 0.0;
  29.  
  30. float length;
  31.  
  32.  
  33. float normal[3];
  34.  
  35. int source1 = 1;
  36. int source2 = 1;
  37. int obecnymaterial = 0;
  38. int normalne = 1;
  39. int smooth = 1;
  40. int fill = 1;
  41.  
  42. // Tablica parametrow materialu nr 1
  43. float material1[5][4] = {
  44. {0.192250, 0.192250, 0.192250, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  45. {0.507540, 0.507540, 0.507540, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  46. {0.508273, 0.508273, 0.508273, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  47. {51.2, 0.0, 0.0, 0.0}, // [3] polysk
  48. {0.5, 0.0, 0.2, 1.0} }; // [4] kolor swiatla emitowanego
  49.  
  50. // Tablica parametrow materialu nr 2
  51. float material2[5][4] = {
  52. {0.250000, 0.148000, 0.064750, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  53. {0.400000, 0.236800, 0.103600, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  54. {0.774597, 0.458561, 0.200621, 1.000000}, // [2] wspolczynnik odbicia swiatla lustrzanego
  55. {76.8, 0.0, 0.0, 0.0}, // [3] polysk
  56. {0.0, 0.1, 0.3, 1.0} }; // [4] kolor swiatla emitowanego
  57.  
  58. // Tablica parametrow materialu nr 3
  59. float material3[5][4] = {
  60. {0.231250, 0.231250, 0.231250, 1.000000}, // [0] wspolczynnik odbicia swiatla otoczenia
  61. {0.277500, 0.277500, 0.277500, 1.000000}, // [1] wspolczynnik odbicia swiatla rozproszonego
  62. {0.773911, 0.773911, 0.773911, 1.000000 }, // [2] wspolczynnik odbicia swiatla lustrzanego
  63. {52.2, 0.0, 0.0, 0.0}, // [3] polysk
  64. {0.0, 0.0, 0.0, 1.0} }; // [4] kolor swiatla emitowanego
  65.  
  66. // Tablica parametrow zrodla swiatla nr 1
  67. GLfloat swiatlo1[5][4] = {
  68. {0.2, 0.2, 0, 1.0}, // [0] otoczenie
  69. {0.2, 0.2, 0.0, 1.0}, // [1] rozproszenie
  70. {0.2, 0.8, 0.0, 1.0}, // [2] lustrzane
  71. {0, 10.0, 0, 1.0}, // [3] polozenie
  72. {-1.0, -1.0, -1.0, 0.0} // [4] kierunek swiecenia
  73. };
  74.  
  75. // Tablica parametrow zrodla swiatla nr 2
  76. GLfloat swiatlo2[5][4] = {
  77. {0, 1, 1, 1.0}, // [0] otoczenie
  78. {0, 1, 1, 1.0}, // [1] rozproszenie
  79. {0, 28, 1, 1.0}, // [2] lustrzane
  80. {0, 0, -10.0, 1.0}, // [3] polozenie
  81. {-1.0, -1.0, -1.0, 0.0} // [4] kierunek swiecenia
  82. };
  83.  
  84.  
  85. // Prototypy funkcji
  86. void RysujSzescian(double a);
  87. void UstawParametryWidoku(int szer, int wys);
  88. void WyswietlObraz(void);
  89. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  90. void PoliczNormal(float x1, float x2, float x3, float y1, float y2, float y3, float z1, float z2, float z3, float* normal);
  91.  
  92. void RysujTekstRastrowy(void* font, char* tekst)
  93. {
  94. int i = 0;
  95. while (tekst[i] != '\0')
  96. {
  97. glutBitmapCharacter(font, tekst[i]);
  98. i++;
  99. }
  100. }
  101.  
  102. #define numberofoptions 11
  103.  
  104. void RysujNakladke(void)
  105. {
  106. char tab[numberofoptions][50] =
  107. {"1 - Przyblizenie",
  108. "2 - Oddalenie",
  109. "5 - Zmiana materialu walca",
  110. "6 - Sterowanie swiatlem nr. 1",
  111. "7 - Sterowanie swiatlem nr. 2",
  112. "8 - Widocznosc wektorow normalnych",
  113. "9 - Zmiana cienia (GL_SMOOTH i GL_FLAT)",
  114. "0 - Zmiana wypelnienia (GL_FILL, GL_LINE)",
  115. "a,z - Zmniejszanie ilosci podzialow",
  116. "s,x - Zwiekszanie ilosci podzialow",
  117. "(l,r,d,u arrows),. - Sterowanie kamera",
  118. };
  119. int i;
  120.  
  121. // Zmiana typu rzutu z perspektywicznego na ortogonalny
  122. glMatrixMode(GL_PROJECTION);
  123. glPushMatrix();
  124. glLoadIdentity();
  125. glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  126.  
  127. // Modelowanie sceny 2D (zawartosci nakladki)
  128. glMatrixMode(GL_MODELVIEW);
  129. glPushMatrix();
  130. glLoadIdentity();
  131.  
  132. // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
  133. glDisable(GL_LIGHTING);
  134.  
  135. // Okreslenie koloru tekstu
  136. glColor3f(1.0, 1.0, 1.0);
  137.  
  138. // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
  139.  
  140. for (i = 0; i < numberofoptions; i++)
  141. {
  142. glRasterPos2i(10, 10 + i * 13);
  143. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, tab[numberofoptions - i - 1]);
  144. }
  145.  
  146. glMatrixMode(GL_PROJECTION);
  147. glPopMatrix();
  148. glMatrixMode(GL_MODELVIEW);
  149. glPopMatrix();
  150. }
  151.  
  152. void UstawSwiatlaIMaterialy()
  153. {
  154. glEnable(GL_LIGHTING);
  155. // Odblokowanie zrodla swiatla nr 1
  156. if (source1 == 1) {
  157. glEnable(GL_LIGHT0);
  158. glLightfv(GL_LIGHT0, GL_AMBIENT, swiatlo1[0]);
  159. glLightfv(GL_LIGHT0, GL_DIFFUSE, swiatlo1[1]);
  160. glLightfv(GL_LIGHT0, GL_SPECULAR, swiatlo1[2]);
  161. glLightfv(GL_LIGHT0, GL_POSITION, swiatlo1[3]);
  162. glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, swiatlo1[4]);
  163.  
  164. }
  165. else {
  166. //wylaczenie zrodla swiatla nr 1
  167. glDisable(GL_LIGHT0);
  168. }
  169. // Odblokowanie zrodla swiatla nr 2
  170. if (source2 == 1) {
  171. glEnable(GL_LIGHT1);
  172. glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo2[0]);
  173. glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo2[1]);
  174. glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo2[2]);
  175. glLightfv(GL_LIGHT1, GL_POSITION, swiatlo2[3]);
  176. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo2[4]);
  177.  
  178. }
  179. else {
  180. //wylaczenie zrodla swiatla nr 2
  181. glDisable(GL_LIGHT1);
  182. }
  183.  
  184. switch (obecnymaterial)
  185. {
  186. case 0:
  187. glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  188. glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  189. glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  190. glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  191. glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  192. break;
  193. case 1:
  194. glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  195. glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  196. glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  197. glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  198. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  199. break;
  200. case 2:
  201. glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
  202. glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
  203. glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
  204. glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
  205. glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
  206. break;
  207. default:
  208. break;
  209. }
  210. }
  211.  
  212. void PoliczNormal(float x1, float x2, float x3, float y1, float y2, float y3, float z1, float z2, float z3)
  213. {
  214. float xa = x2 - x1;
  215. float ya = y2 - y1;
  216. float za = z2 - z1;
  217.  
  218. float xb = x3 - x1;
  219. float yb = y3 - y1;
  220. float zb = z3 - z1;
  221.  
  222. normal[0] = ya * zb - za * yb;
  223. normal[1] = za * xb - xa * zb;
  224. normal[2] = xa * yb - ya * xb;
  225.  
  226. float length = sqrtf(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]);
  227.  
  228. normal[0] /= length;
  229. normal[1] /= length;
  230. normal[2] /= length;
  231. }
  232.  
  233. void RysujNormal(float x1, float y1, float z1) {
  234. if (normalne)
  235. {
  236. glBegin(GL_LINES);
  237. glColor3f(1, 1, 1);
  238. glVertex3f(x1, y1, z1);
  239. glVertex3f(x1 + normal[0], y1 + normal[1], z1 + normal[2]);
  240. glEnd();
  241. }
  242. }
  243.  
  244.  
  245.  
  246.  
  247.  
  248. void SyncSmoothIFill()
  249. {
  250. if (smooth)
  251. glShadeModel(GL_SMOOTH);
  252. else
  253. glShadeModel(GL_FLAT);
  254.  
  255. if (fill)
  256. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  257. else
  258. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  259. }
  260.  
  261. double DEG2RAD(float deg)
  262. {
  263. return deg * Pi / 180;
  264. }
  265.  
  266.  
  267.  
  268. void Stozek(double R, double r, double h) {
  269. int i;
  270. double dAlfa = 360.0 / podzialPionowy;
  271.  
  272. //podstawa dolna
  273. glBegin(GL_TRIANGLE_FAN);
  274. glVertex3f(0, 0, 0);
  275. for (i = 0; i * dAlfa <= 360.0; i++) {
  276. glVertex3f(R * cos(DEG2RAD(i * dAlfa)), 0, R * sin(DEG2RAD(i * dAlfa)));
  277. }
  278. glEnd();
  279.  
  280. //podstawa gorna
  281. glBegin(GL_TRIANGLE_FAN);
  282. glVertex3f(0, h, 0);
  283. for (i = 0; i * dAlfa <= 360.0; i++) {
  284. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), h, r * sin(DEG2RAD(i * dAlfa)));
  285. }
  286. glEnd();
  287.  
  288. //sciana boczna
  289. glBegin(GL_QUAD_STRIP);
  290. for (i = 0; i * dAlfa <= 360.0; i++) {
  291. glVertex3f(R * cos(DEG2RAD(i * dAlfa)), 0, R * sin(DEG2RAD(i * dAlfa)));
  292. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), h, r * sin(DEG2RAD(i * dAlfa)));
  293. }
  294. glEnd();
  295. }
  296.  
  297. void Walec() {
  298. float r = 2.0;
  299. float h = 3.0;
  300. float hPodzial = h / podzialPoziomy;
  301. float dAlfa = 90.0 / podzialPionowy;
  302. int i, j;
  303.  
  304. float x1, x2, x3, x;
  305. float z1, z2, z3, z;
  306. float y1, y2, y3, y;
  307.  
  308.  
  309.  
  310.  
  311. glColor3f(1, 0, 1);
  312. for (j = 0; j * hPodzial < h; j++) {
  313.  
  314. glBegin(GL_QUAD_STRIP);
  315.  
  316. for (i = 0; i * dAlfa <= 90.0; i++) {
  317.  
  318. x = r * cos(DEG2RAD(i * dAlfa)); x1 = r * cos(DEG2RAD(i * dAlfa));
  319. y = j * hPodzial; y1 = (j + 1) * hPodzial;
  320. z = r * sin(DEG2RAD(i * dAlfa)); z1 = r * sin(DEG2RAD(i * dAlfa));
  321.  
  322. x2 = r * cos(DEG2RAD((i + 1) * dAlfa)); x3 = r * cos(DEG2RAD((i + 1) * dAlfa));
  323. y2 = j * hPodzial; y3 = (j + 1) * hPodzial;
  324. z2 = r * sin(DEG2RAD((i + 1) * dAlfa)); z3 = r * sin(DEG2RAD((i + 1) * dAlfa));
  325.  
  326.  
  327. //glNormal3f(normal[0], normal[1], normal[2]);
  328. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), (j + 1) * hPodzial, r * sin(DEG2RAD(i * dAlfa)));
  329. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), j * hPodzial, r * sin(DEG2RAD(i * dAlfa)));
  330. if (i * dAlfa == 90) {
  331. glVertex3f(0, (j + 1) * hPodzial, 2);
  332. glVertex3f(0, j * hPodzial, 2);
  333. glVertex3f(0, (j + 1) * hPodzial, 0);
  334. glVertex3f(0, j * hPodzial, 0);
  335. glVertex3f(2, (j + 1) * (double)hPodzial, 0);
  336. glVertex3f(2, j * hPodzial, 0);
  337. }
  338. PoliczNormal(x1, x2, x, y1, y2, y, z1, z2, z);
  339. RysujNormal(x, y, z);
  340.  
  341. RysujNormal(x, y, z);
  342. }
  343. glEnd();
  344.  
  345.  
  346.  
  347. }
  348.  
  349.  
  350. glBegin(GL_TRIANGLE_FAN);
  351. glVertex3f(0, 0, 0);
  352. for (i = 0; i * dAlfa <= 90.0; i++) {
  353.  
  354. x1 = (r * cos(DEG2RAD(i * dAlfa)));
  355. y1 = 0;
  356. z1 = (r * sin(DEG2RAD(i * dAlfa)));
  357. x2 = 0;
  358. y2 = 0;
  359. z2 = 0;
  360. x3 = 0;
  361. y3 = 0;
  362. z3 = 0;
  363. PoliczNormal(x1, x2, x3, y1, y2, y3, z1, z2, z3);
  364. glNormal3f(normal[0], normal[1], normal[2]);
  365.  
  366. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), 0, r * sin(DEG2RAD(i * dAlfa)));
  367. }
  368. glEnd();
  369.  
  370.  
  371. glBegin(GL_TRIANGLE_FAN);
  372. glVertex3f(0, h, 0);
  373.  
  374. for (i = 0; i * dAlfa <= 90.0; i++) {
  375. x1 = (r * cos(DEG2RAD(i * dAlfa)));
  376. y1 = h;
  377. z1 = (r * sin(DEG2RAD(i * dAlfa)));
  378. x2 = 0;
  379. y2 = 0;
  380. z2 = 0;
  381. x3 = 0;
  382. y3 = 0;
  383. z3 = 0;
  384. PoliczNormal(x1, x2, x3, y1, y2, y3, z1, z2, z3);
  385. glNormal3f(normal[0], normal[1], normal[2]);
  386. glVertex3f(r * cos(DEG2RAD(i * dAlfa)), h, r * sin(DEG2RAD(i * dAlfa)));
  387. }
  388. glEnd();
  389. }
  390. /*
  391. void Rysuj()
  392. {
  393. // Poczatek tworzenia ukladu wspolrzednych
  394. glBegin(GL_LINES);
  395.  
  396. // Os X
  397. glColor3f(1.0, 0.0, 0.0);
  398. glVertex3f(-80.0, 0.0, 0.0);
  399. glVertex3f(80.0, 0.0, 0.0);
  400.  
  401. // Os Y
  402. glColor3f(0.0, 1.0, 0.0);
  403. glVertex3f(0.0, -80.0, 0.0);
  404. glVertex3f(0.0, 80.0, 0.0);
  405.  
  406. // Os Z
  407. glColor3f(0.0, 0.0, 1.0);
  408. glVertex3f(0.0, 0.0, -80.0);
  409. glVertex3f(0.0, 0.0, 80.0);
  410.  
  411. // Koniec tworzenia ukladu wspolrzednych
  412. glEnd();
  413.  
  414. //Stozek(10,20,25);
  415. Walec();
  416.  
  417. }
  418. */
  419. //////////////////////////////////////////////////////////////////////////////////////////
  420. // Funkcja generujaca pojedyncza klatke animacji
  421. void WyswietlObraz(void)
  422. {
  423. // Wyczyszczenie bufora ramki i bufora glebokosci
  424. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  425. glMatrixMode(GL_MODELVIEW);
  426.  
  427. // Powielenie macierzy na wierzcholku stosu
  428. glPushMatrix();
  429.  
  430. // Wyznaczenie polozenia obserwatora (przeksztalcenie uladu wspolrzednych
  431. // sceny do ukladu wspolrzednych obserwatora).
  432. glTranslatef(0, 0, -odlObs);
  433. glRotatef(rotObsX, 1, 0, 0);
  434. glRotatef(rotObsY, 0, 1, 0);
  435. glRotatef(rotObsZ, 0, 0, 1);
  436.  
  437. RysujNakladke();
  438.  
  439. UstawSwiatlaIMaterialy();
  440.  
  441. // Generacja obrazu sceny w niewidocznym buforze ramki
  442. Walec();
  443.  
  444. // Usuniecie macierzy lezacej na wierzcholku stosu (powrot do stanu
  445. // sprzed wywolania funkcji
  446. glPopMatrix();
  447.  
  448. // Przelaczenie buforow ramki
  449. glutSwapBuffers();
  450. }
  451.  
  452. //////////////////////////////////////////////////////////////////////////////////////////
  453. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu
  454. void UstawParametryWidoku(int szerokosc, int wysokosc)
  455. {
  456. // Ustawienie parametrow viewportu
  457. glViewport(0, 0, szerokosc, wysokosc);
  458.  
  459. // Przejscie w tryb modyfikacji macierzy rzutowania
  460. glMatrixMode(GL_PROJECTION);
  461. glLoadIdentity();
  462. gluPerspective(40.0, (float)szerokosc / (float)wysokosc, 1.0, 1000.0);
  463.  
  464. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  465. glMatrixMode(GL_MODELVIEW);
  466.  
  467. // Zmiana macierzy znajdujacej sie na wierzcholku stosu na macierz jednostkowa
  468. glLoadIdentity();
  469. }
  470.  
  471. void ZmianaTrybu()
  472. {
  473. if (tryb == GL_TRUE)
  474. {
  475. tryb = GL_FALSE;
  476. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  477. }
  478. else if (tryb == GL_FALSE)
  479. {
  480. tryb = GL_TRUE;
  481. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  482. }
  483. }
  484.  
  485. //////////////////////////////////////////////////////////////////////////////////////////
  486. // Funkcja klawiszy specjalnych
  487. void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)
  488. {
  489. switch (klawisz)
  490. {
  491. case GLUT_KEY_UP:
  492. rotObsX = rotObsX + 1.0;
  493. break;
  494.  
  495. case GLUT_KEY_DOWN:
  496. rotObsX = rotObsX - 1.0;
  497. break;
  498.  
  499. case GLUT_KEY_LEFT:
  500. rotObsY = rotObsY - 1.0;
  501. break;
  502.  
  503. case GLUT_KEY_RIGHT:
  504. rotObsY = rotObsY + 1.0;
  505. break;
  506. }
  507. }
  508. //////////////////////////////////////////////////////////////////////////////////////////
  509. // Funkcja obslugi klawiatury
  510. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  511. {
  512.  
  513. switch (klawisz)
  514. {
  515. case '1':
  516. odlObs = (odlObs > odlMin) ? odlObs - 1 : odlObs;
  517. break;
  518. case '2':
  519. odlObs = (odlObs < odlMax) ? odlObs + 1 : odlObs;
  520. break;
  521. case ',':
  522. rotObsZ = rotObsZ - 1.0;
  523. break;
  524. case '.':
  525. rotObsZ = rotObsZ + 1.0;
  526. break;
  527. case 'z':
  528. podzialPionowy = (podzialPionowy > 4) ? podzialPionowy - 1.0 : podzialPionowy;
  529. break;
  530. case 'x':
  531. podzialPionowy = (podzialPionowy < 64) ? podzialPionowy + 1.0 : podzialPionowy;
  532. break;
  533. case 'a':
  534. podzialPoziomy = (podzialPoziomy > 4) ? podzialPoziomy - 2.0 : podzialPoziomy;
  535. break;
  536. case 's':
  537. podzialPoziomy = (podzialPoziomy < 64) ? podzialPoziomy + 2.0 : podzialPoziomy;
  538. break;
  539. case '5':
  540. obecnymaterial++;
  541. if (obecnymaterial > 2)
  542. obecnymaterial = 0;
  543. break;
  544. case '6':
  545. source1 = !source1;
  546. break;
  547. case '7':
  548. source2 = !source2;
  549. break;
  550. case '8':
  551. normalne = !normalne;
  552. break;
  553. case '9':
  554. smooth = !smooth;
  555. SyncSmoothIFill();
  556. break;
  557. case '0':
  558. fill = !fill;
  559. SyncSmoothIFill();
  560. break;
  561. }
  562.  
  563. if (klawisz == 27)
  564. exit(0);
  565. }
  566.  
  567. //////////////////////////////////////////////////////////////////////////////////////////
  568. // Glowna funkcja programu
  569. int main(int argc, char** argv)
  570. {
  571. // Zainicjowanie biblioteki GLUT
  572. glutInit(&argc, argv);
  573.  
  574. // Ustawienie trybu wyswietlania
  575. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  576.  
  577. // Ustawienie polozenia dolenego lewego rogu okna
  578. glutInitWindowPosition(100, 100);
  579.  
  580. // Ustawienie rozmiarow okna
  581. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  582.  
  583. // Utworzenie okna
  584. glutCreateWindow("Szescian");
  585.  
  586. // Odblokowanie bufora glebokosci
  587. glEnable(GL_DEPTH_TEST);
  588.  
  589. // Ustawienie funkcji wykonywanej na danych w buforze glebokosci
  590. glDepthFunc(GL_LEQUAL);
  591.  
  592. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  593. glClearDepth(1000.0);
  594.  
  595. // Ustawienie koloru czyszczenia bufora ramki
  596. glClearColor(0.0, 0.0, 0.0, 0.0);
  597.  
  598.  
  599. // Zarejestrowanie funkcji (callback) wyswietlajacej
  600. glutDisplayFunc(WyswietlObraz);
  601.  
  602. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  603. // zmieniane sa rozmiary okna
  604. glutReshapeFunc(UstawParametryWidoku);
  605.  
  606. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  607. // zadnych zadan
  608. glutIdleFunc(WyswietlObraz);
  609.  
  610. // Zarejestrowanie funkcji obslugi klawiatury
  611. glutKeyboardFunc(ObslugaKlawiatury);
  612.  
  613. // Zarejestrowanie funkcji obslugi klawiszy specjalnych
  614. glutSpecialFunc(ObslugaKlawiszySpecjalnych);
  615.  
  616.  
  617.  
  618. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  619. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  620. glutMainLoop();
  621.  
  622. return 0;
  623. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement