Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.78 KB | None | 0 0
  1. #pragma warning(disable : 4996)
  2.  
  3. #include <math.h>
  4. #include <GL/glut.h>
  5. #include <string.h>
  6. #include <stdio.h>
  7. #include "materials.h"
  8.  
  9. // Definicja stalych
  10. #define OBSERWATOR_FOV_Y 10.0
  11. #define odlmin 10.0
  12. #define odlmax 300.0
  13.  
  14. #define M_PI 3.14159
  15. #define DEG2RAD(x) ((float)(x)*M_PI/180.0)
  16.  
  17. // Zmienne globalne
  18. int szerokoscOkna = 800;
  19. int wysokoscOkna = 600;
  20.  
  21. GLfloat odl = 200.0;
  22. GLfloat rotObsX = 40.0;
  23. GLfloat rotObsY = 40.0;
  24. GLfloat rotObsZ = 0.0;
  25.  
  26. int iloscpodzialowpoziomych = 12;
  27. int zrodlo1 = 1;
  28. int zrodlo2 = 1;
  29. int obecnymaterial = 0;
  30. int normalne = 1;
  31. int smooth = 1;
  32. int fill = 1;
  33. float length;
  34.  
  35.  
  36.  
  37. int a = 3;
  38. double h = 5;
  39. int R = 6;
  40. int r = 8;
  41. int n = 40;
  42. int nMin = 4;
  43. int nMax = 64;
  44. double dAlfa;
  45. int i = 0, j;
  46. int N1 = 20;
  47. int N2 = 10;
  48. int rW = 15;
  49. int rZ;
  50. int srA;
  51.  
  52. float r_reflektor = 30;
  53. float predkosc_reflektor = 0.1;
  54. float nachylenie_reflektor = 0;
  55. float kat_reflektor = 0;
  56.  
  57. float material1[5][4] = {
  58. {1, 0, 1, 1.0},// [0] wspolczynnik odbicia swiatla otoczenia
  59. {1, 0, 1, 1.0},// [1] wspolczynnik odbicia swiatla rozproszonego
  60. {1, 0, 1, 1.0},// [2] wspolczynnik odbicia swiatla lustrzanego
  61. {6,0,0,0}, // [3] polysk
  62. {0,0,0.0,1.0} // [4] kolor swiatla emitowanego
  63. };
  64. // Tablica parametrow materialu nr 2
  65. float material2[5][4] = {
  66. {0, 1,0, 1}, // [0] wspolczynnik odbicia swiatla otoczenia
  67. {0, 1,0, 1.0}, // [1] wspolczynnik odbicia swiatla rozproszonego
  68. {0, 0.1,0, 1.0}, // [2] wspolczynnik odbicia swiatla lustrzanego
  69. {10, 0.0, 0.0, 0.0}, // [3] polysk
  70. {0.0, 0.0, 0.0, 1.0} // [4] kolor swiatla emitowanego
  71. };
  72.  
  73. //reflektor
  74. GLfloat param_swiatla1[5][4] = {
  75. {1,1,1,1}, // [0] światło otoczenia
  76. {1,1,1,1}, // [1] światło rozproszone
  77. {1,1,1,1}, // [2] światło zwierciadlane
  78. {0,0,0,1}, // [3] położenie
  79. {-1,0,0} // [4] kierunek świecenia
  80. };
  81.  
  82. //kierunkowe
  83. GLfloat param_swiatla2[5][4] = {
  84. {0.7,0.7,0.2,1}, // [0] światło otoczenia
  85. {0.7,0.7,0.2,1}, // [1] światło rozproszone
  86. {0.7,0.7,0.2,1}, // [2] światło zwierciadlane
  87. {-10,10,10,0}, // [3] położenie
  88. {0,0,0,0} // [4] kierunek świecenia
  89. };
  90.  
  91.  
  92. // Prototypy funkcji
  93. void UstawParametryWidoku(int szer, int wys);
  94. void WyswietlObraz(void);
  95. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  96. void RysujTekstRastrowy(void* font, char* tekst);
  97. void RysujNakladke(void);
  98.  
  99. void UstawSwiatlaIMaterialy()
  100. {
  101. glEnable(GL_LIGHTING);
  102. // Odblokowanie zrodla swiatla nr 1
  103.  
  104.  
  105. if (zrodlo1 == 1)
  106. {
  107. glDisable(GL_LIGHTING);
  108. glPushMatrix();
  109.  
  110. glRotatef(nachylenie_reflektor, 1, 0, 0);
  111. glBegin(GL_LINE_STRIP);
  112. glColor3f(0, 0, 0);
  113. for (int i = 0; i <= 360; i = i + 2)
  114. {
  115. glVertex3f(r_reflektor * cos(DEG2RAD(i)), 0, r_reflektor * sin(DEG2RAD(i)));
  116. }
  117. glEnd();
  118. glPopMatrix();
  119.  
  120. glPushMatrix();
  121.  
  122. glRotatef(nachylenie_reflektor, 1, 0, 0);
  123. glRotatef(kat_reflektor, 0, 1, 0);
  124. glTranslatef(r_reflektor, 0, 0);
  125.  
  126.  
  127. glColor3f(1, 1, 0);
  128. glutSolidSphere(0.3, 5, 5);
  129. glEnable(GL_LIGHTING);
  130.  
  131. glEnable(GL_LIGHT0);
  132.  
  133. // Inicjowanie zrodla swiatla
  134. glLightfv(GL_LIGHT0, GL_DIFFUSE, param_swiatla1[1]);
  135. glLightfv(GL_LIGHT0, GL_SPECULAR, param_swiatla1[2]);
  136. glLightfv(GL_LIGHT0, GL_POSITION, param_swiatla1[3]);
  137. glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 30);
  138. glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, param_swiatla1[4]);
  139.  
  140. glPopMatrix();
  141. }
  142. else {
  143. glDisable(GL_LIGHT0);
  144. }
  145.  
  146. if (zrodlo2 == 1)
  147. {
  148. glEnable(GL_LIGHT1);
  149.  
  150. // Inicjowanie zrodla swiatla
  151. glLightfv(GL_LIGHT1, GL_DIFFUSE, param_swiatla2[1]);
  152. glLightfv(GL_LIGHT1, GL_SPECULAR, param_swiatla2[2]);
  153. glLightfv(GL_LIGHT1, GL_POSITION, param_swiatla2[3]);
  154. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, param_swiatla2[4]);
  155. }
  156. else {
  157. glDisable(GL_LIGHT1);
  158. }
  159.  
  160. switch (obecnymaterial)
  161. {
  162. case 0:
  163. glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  164. glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  165. glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  166. glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  167. glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  168. break;
  169. case 1:
  170. glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  171. glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  172. glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  173. glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  174. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  175. break;
  176. case 2:
  177. glMaterialfv(GL_FRONT, GL_AMBIENT, JadeAmbient);
  178. glMaterialfv(GL_FRONT, GL_DIFFUSE, JadeDiffuse);
  179. glMaterialfv(GL_FRONT, GL_SPECULAR, JadeSpecular);
  180. glMaterialfv(GL_FRONT, GL_SHININESS, &JadeShininess);
  181. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  182. break;
  183. default:
  184. break;
  185. }
  186. }
  187.  
  188. void SyncSmoothIFill()
  189. {
  190. if (smooth)
  191. glShadeModel(GL_SMOOTH);
  192. else
  193. glShadeModel(GL_FLAT);
  194.  
  195. if (fill)
  196. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  197. else
  198. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  199. }
  200.  
  201.  
  202. float DEG2RAD = 3.1415926535 / 180.0;
  203. float pom1;
  204. float pom2;
  205. float alfa1 = 30;
  206. float alfa2 = 360.0 / 4;
  207. float podz_h = 1.0 / 3.0;
  208. float pom_podz_h = 4;
  209.  
  210. void wektory()
  211. {
  212. glDisable(GL_LIGHTING);
  213. double deg = atan(1 / 3);
  214.  
  215. glBegin(GL_LINES);
  216. for (int j = 0; j < 4; j++)
  217. {
  218. glColor3f(1, 0, 0);
  219. glVertex3f(0, 0, 0);
  220. glVertex3f(0, -1, 0);
  221. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  222. {
  223. pom1 = DEG2RAD * (i * alfa2);
  224. glVertex3f((float)(cos(pom1)), 0, (float)(sin(pom1)));
  225. glVertex3f((float)(cos(pom1)), -1, (float)( sin(pom1)));
  226. }
  227.  
  228.  
  229. for (int j = 1; j * podz_h <= 1; j++)
  230. {
  231. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  232. {
  233. pom1 = DEG2RAD * (i * alfa2);
  234. glVertex3f((float)((1 - (j - 1) * podz_h) * cos(pom1)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(pom1)));
  235. glVertex3f((float)(( (1 - (j - 1) * podz_h) + 1) * cos(pom1)), 4 * ((j - 1) * podz_h) + sin(deg), (float)((1 * (1 - (j - 1) * podz_h) + 1) * sin(pom1)));
  236. }
  237.  
  238. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 0)), 4 * ((j - 1) * podz_h), 0);
  239. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 0)), 4 * ((j - 1) * podz_h), -1);
  240.  
  241. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 270)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 270)));
  242. glVertex3f(1 + (float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 270)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 270)));
  243. }
  244. }
  245. glEnd();
  246.  
  247. glEnable(GL_LIGHTING);
  248. }
  249.  
  250. void stozek2(void)
  251. {
  252. double deg = atan(1 / 3);
  253.  
  254. for (int j = 0; j < 4; j++)
  255. {
  256. glBegin(GL_TRIANGLE_FAN);
  257. glColor3f(1, 0, 0);
  258. glNormal3f(0, -1, 0);
  259. glVertex3f(0, 0, 0);
  260. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  261. {
  262. pom1 = DEG2RAD * (i * alfa2);
  263. glVertex3f((float)(1 * cos(pom1)), 0, (float)(1 * sin(pom1)));
  264. }
  265. glEnd();
  266.  
  267. glColor3f(1, 0, 0);
  268. for (int j = 1; j * podz_h <= 1; j++)
  269. {
  270. glBegin(GL_TRIANGLE_STRIP);
  271.  
  272. for (int i = 0; i * alfa2 <= 360.0 * 0.75; i++)
  273. {
  274. pom1 = DEG2RAD * (i * alfa2);
  275. glNormal3f(cos(pom1), sin(deg), sin(pom1));
  276. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(pom1)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(pom1)));
  277. glVertex3f((float)(1 * (1 - j * podz_h) * cos(pom1)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(pom1)));
  278. }
  279. glEnd();
  280.  
  281. glBegin(GL_TRIANGLE_STRIP);
  282. glNormal3f(0, 0, -1);
  283. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 0)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 0)));
  284. glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 0)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 0)));
  285. glVertex3f(0, 4 * ((j - 1) * podz_h), 0);
  286. glVertex3f(0, 4 * (j * podz_h), 0);
  287. glEnd();
  288.  
  289. glBegin(GL_TRIANGLE_STRIP);
  290. glNormal3f(1, 0, 0);
  291. glVertex3f((float)(1 * (1 - (j - 1) * podz_h) * cos(DEG2RAD * 270)), 4 * ((j - 1) * podz_h), (float)(1 * (1 - (j - 1) * podz_h) * sin(DEG2RAD * 270)));
  292. glVertex3f((float)(1 * (1 - j * podz_h) * cos(DEG2RAD * 270)), 4 * (j * podz_h), (float)(1 * (1 - j * podz_h) * sin(DEG2RAD * 270)));
  293. glVertex3f(0, 2 * ((j - 1) * podz_h), 0);
  294. glVertex3f(0, 2 * (j * podz_h), 0);
  295. glEnd();
  296.  
  297. }
  298. }
  299. }
  300.  
  301.  
  302. //////////////////////////////////////////////////////////////////////////////////////////
  303. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  304. // bya wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  305. void UstawParametryWidoku(int szer, int wys)
  306. {
  307. // Zapamietanie wielkosci widoku
  308. szerokoscOkna = szer;
  309. wysokoscOkna = wys;
  310.  
  311. // Ustawienie parametrow viewportu
  312. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  313.  
  314. // Przejscie w tryb modyfikacji macierzy rzutowania
  315. glMatrixMode(GL_PROJECTION);
  316. glLoadIdentity();
  317. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  318. }
  319.  
  320.  
  321. //////////////////////////////////////////////////////////////////////////////////////////
  322. // Funkcja wyswietlajaca pojedyncza klatke animacji
  323. void WyswietlObraz(void)
  324. {
  325. // Wyczyszczenie bufora koloru i bufora glebokosci
  326. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  327.  
  328. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  329. glMatrixMode(GL_MODELVIEW);
  330.  
  331. // Zastapienie aktywnej macierzy macierza jednostkowa
  332. glLoadIdentity();
  333.  
  334. // Ustalenie polozenia obserwatora
  335. glTranslatef(0, 0, -odl);
  336. glRotatef(rotObsX, 1, 0, 0);
  337. glRotatef(rotObsY, 0, 1, 0);
  338. glRotatef(rotObsZ, 0, 0, 1);
  339.  
  340.  
  341. UstawSwiatlaIMaterialy();
  342. //RysujUklad();
  343. //glColor3f(1.0, 1.0, 1.0);
  344. //RysujPierscien(10, 4, iloscpodzialowpoziomych);
  345. kat_reflektor = kat_reflektor + predkosc_reflektor;
  346. stozek2();
  347. RysujNakladke();
  348. if (normalne)
  349. wektory();
  350.  
  351.  
  352. // Przelaczenie buforow ramki
  353. glutSwapBuffers();
  354. }
  355.  
  356. void RysujTekstRastrowy(void* font, char* tekst)
  357. {
  358. int i;
  359.  
  360. for (i = 0; i < (int)strlen(tekst); i++)
  361. glutBitmapCharacter(font, tekst[i]);
  362. }
  363.  
  364. void RysujNakladke(void)
  365. {
  366. char buf[255];
  367.  
  368. // Zmiana typu rzutu z perspektywicznego na ortogonalny
  369. glMatrixMode(GL_PROJECTION);
  370. glPushMatrix();
  371. glLoadIdentity();
  372. glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  373.  
  374. // Modelowanie sceny 2D (zawartosci nakladki)
  375. glMatrixMode(GL_MODELVIEW);
  376. glPushMatrix();
  377. glLoadIdentity();
  378.  
  379. // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
  380. glDisable(GL_LIGHTING);
  381.  
  382. // Okreslenie koloru tekstu
  383. glColor3f(1.0, 1.0, 1.0);
  384.  
  385. // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
  386.  
  387. sprintf(buf, "Swiatlo: Klawisze 3, 4");
  388. glRasterPos2i(30, 150);
  389. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  390.  
  391. sprintf(buf, "Zobrazowanie geometryczne: Klawisz 7");
  392. glRasterPos2i(30, 140);
  393. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  394.  
  395. sprintf(buf, "Material: Klawisz 5");
  396. glRasterPos2i(30, 130);
  397. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  398.  
  399. sprintf(buf, "Podzialy poziome: h+,g- pionowe: b+,v-");
  400. glRasterPos2i(30, 120);
  401. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  402.  
  403. sprintf(buf, "Odleglosc z+ x-");
  404. glRasterPos2i(30, 110);
  405. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  406.  
  407. sprintf(buf, "Wygladzanie 6");
  408. glRasterPos2i(30, 100);
  409. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  410.  
  411. sprintf(buf, "polygon mode 7");
  412. glRasterPos2i(30, 90);
  413. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  414.  
  415. sprintf(buf, "wektory normalne 8");
  416. glRasterPos2i(30, 80);
  417. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  418.  
  419. sprintf(buf, "promien reflektora i+/j-");
  420. glRasterPos2i(30, 70);
  421. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  422.  
  423. sprintf(buf, "predkosc reflektora o+/k-");
  424. glRasterPos2i(30, 60);
  425. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  426.  
  427. sprintf(buf, "kat reflektora p+/l-");
  428. glRasterPos2i(30, 50);
  429. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  430.  
  431. // Przywrocenie macierzy sprzed wywolania funkcji
  432. glMatrixMode(GL_PROJECTION);
  433. glPopMatrix();
  434. glMatrixMode(GL_MODELVIEW);
  435. glPopMatrix();
  436.  
  437. // Odblokowanie oswietlenia
  438. glEnable(GL_LIGHTING);
  439. }
  440. float r1 = 4;
  441. //////////////////////////////////////////////////////////////////////////////////////////
  442. // Funkcja obslugi klawiatury
  443. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  444. {
  445. switch (klawisz)
  446. {
  447. //Odległość obserwatora
  448. case 'z':
  449. odl = odl > odlmin ? odl - 3.0 : odl;
  450. break;
  451. case 'x':
  452. odl = odl < odlmax ? odl + 3.0 : odl;
  453. break;
  454. //
  455.  
  456.  
  457. //Podziały pierścienia
  458. case '1':
  459. if (N1 < nMax) N1++;
  460. break;
  461. case '!':
  462. if (N1 > nMin) N1--;
  463. break;
  464. case '2':
  465. if (N2 < nMax) N2++;
  466. break;
  467. case '@':
  468. if (N2 > nMin) N2--;
  469. break;
  470.  
  471. //Źródła światła
  472. case '3':
  473. zrodlo1 = !zrodlo1;
  474. break;
  475. case '4':
  476. zrodlo2 = !zrodlo2;
  477. break;
  478.  
  479. //Zmiana materiału bryły
  480. case '5':
  481. obecnymaterial++;
  482. if (obecnymaterial > 2) obecnymaterial = 0;
  483. break;
  484. //
  485.  
  486. //Cieniowanie
  487. case '6':
  488. smooth = !smooth;
  489. SyncSmoothIFill();
  490. break;
  491.  
  492. case '7':
  493. fill = !fill;
  494. SyncSmoothIFill();
  495. break;
  496. //
  497.  
  498. case '8':
  499. normalne = !normalne;
  500. break;
  501.  
  502. //Poruszanie się obserwatora
  503. case 'q':
  504. case 'Q':
  505. rotObsZ = rotObsZ + 1.0;
  506. break;
  507. case 'e':
  508. case 'E':
  509. rotObsZ = rotObsZ - 1.0;
  510. break;
  511. case 'w':
  512. case 'W':
  513. rotObsX = rotObsX + 1.0;
  514. break;
  515. case 's':
  516. case 'S':
  517. rotObsX = rotObsX - 1.0;
  518. break;
  519. case 'a':
  520. case 'A':
  521. rotObsY = rotObsY - 1.0;
  522. break;
  523. case 'd':
  524. case 'D':
  525. rotObsY = rotObsY + 1.0;
  526. break;
  527. //
  528.  
  529.  
  530. case 'i':
  531. r_reflektor++;
  532. break;
  533. case 'j':
  534. r_reflektor--;
  535. break;
  536. case 'o':
  537. predkosc_reflektor = 0.1;
  538. break;
  539. case 'k':
  540. predkosc_reflektor = 0.3;
  541. break;
  542. case '-':
  543. predkosc_reflektor = 0.5;
  544. break;
  545. case 'p':
  546. nachylenie_reflektor = nachylenie_reflektor + 1;
  547. break;
  548. case 'l':
  549. nachylenie_reflektor = nachylenie_reflektor - 1;
  550. break;
  551.  
  552. case 27:
  553. exit(0);
  554. break;
  555. default:
  556. break;
  557. }
  558.  
  559. if (klawisz == 'b' && r1 >= 4 && r1 < 64)
  560. {
  561. r1 += 1;
  562. alfa2 = 360 * 3 / 4 / r1;
  563. }
  564. else if (klawisz == 'v' && r1 > 4 && r1 <= 64)
  565. {
  566. r1 -= 1;
  567. alfa2 = 360 * 3 / 4 / r1;
  568. }
  569.  
  570. else if (klawisz == 'h' && pom_podz_h >= 4 && pom_podz_h < 64)
  571. {
  572. pom_podz_h++;
  573. podz_h = 1.0 / pom_podz_h;
  574. }
  575. else if (klawisz == 'g' && pom_podz_h > 4 && pom_podz_h <= 64)
  576. {
  577. pom_podz_h--;
  578. podz_h = 1.0 / pom_podz_h;
  579. }
  580. }
  581.  
  582.  
  583. //////////////////////////////////////////////////////////////////////////////////////////
  584. // Glowna funkcja programu
  585. int main(int argc, char** argv)
  586. {
  587. // Zainicjowanie biblioteki GLUT
  588. glutInit(&argc, argv);
  589.  
  590. // Ustawienie trybu wyswietlania
  591. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  592.  
  593. // Ustawienie polozenia dolenego lewego rogu okna
  594. glutInitWindowPosition(100, 100);
  595.  
  596. // Ustawienie rozmiarow okna
  597. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  598.  
  599. // Utworzenie okna
  600. glutCreateWindow("Szescian");
  601.  
  602. // Odblokowanie bufora glebokosci
  603. glEnable(GL_DEPTH_TEST);
  604.  
  605. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  606. glClearDepth(1000.0);
  607.  
  608. // Ustawienie koloru czyszczenia bufora ramki
  609. glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
  610.  
  611. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  612. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  613.  
  614. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  615. glutDisplayFunc(WyswietlObraz);
  616.  
  617. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  618. // zmieniane sa rozmiary okna
  619. glutReshapeFunc(UstawParametryWidoku);
  620.  
  621. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  622. // zadnych zadan
  623. glutIdleFunc(WyswietlObraz);
  624.  
  625. // Zarejestrowanie funkcji obslugi klawiatury
  626. glutKeyboardFunc(ObslugaKlawiatury);
  627.  
  628. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  629. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  630. glutMainLoop();
  631.  
  632. return 0;
  633. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement