Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.92 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. #include "materials.h"
  8. #include "pch.h"
  9. #include <GL/glut.h>
  10. #include <math.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13.  
  14.  
  15. // Definicja stalych
  16. #define DLUGOSC_BOKU 5.0
  17. #define OBSERWATOR_ODLEGLOSC 20.0
  18. #define OBSERWATOR_OBROT_X 20.0
  19. #define OBSERWATOR_OBROT_Y 20.0
  20. #define OBSERWATOR_FOV_Y 30.0
  21. #define DLUGOSC_PROMIENIA 6.0
  22. #define WYSOKOSC 15.0
  23. #define N 26.0
  24. #define X_OFFSET_SWIATLO 10
  25. #define Y_OFFSET_SWIATLO 120
  26. #define X_OFFSET_MAT 10
  27. #define Y_OFFSET_MAT 220
  28. #define X_OFFSET_OBIEKT 10
  29. #define Y_OFFSET_OBIEKT 300
  30. #define ID_MENU_SWIATLA 0
  31. #define ID_MENU_MATERIALU 1
  32. #define LPOZ_MENU_SWIATLA 10
  33. #define LPOZ_MENU_MATERIALU 5
  34.  
  35. #define PI 3.1415926535
  36. #define DEG2RAD(x) ((float)(x)*PI/180.0)
  37. #define dAlfa (360.0/en)
  38. int i;
  39. double en = N;
  40. double r = DLUGOSC_PROMIENIA;
  41. double wys = WYSOKOSC;
  42.  
  43. double R = 10;
  44. double R2 = 12;
  45. float osX = 40;
  46. float osY = 40;
  47. float osZ = 0;
  48.  
  49. float odlmin = 0;
  50. float odlmax = 200;
  51. float odl = 40;
  52.  
  53. // Zmienne globalne
  54. double bok = DLUGOSC_BOKU; // Dlugosc boku szescianu
  55. int szerokoscOkna = 800;
  56. int wysokoscOkna = 600;
  57. int czy_wektor = 0;
  58. int sw1 = 0;
  59. int sw2 = 0;
  60. int material = 0;
  61.  
  62. // Prototypy funkcji
  63. void RysujSzescian(double a);
  64. void UstawParametryWidoku(int szer, int wys);
  65. void WyswietlObraz(void);
  66. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  67.  
  68. void WlaczSwiatlo1(void)
  69. {
  70. GLfloat swiatlo[5][4] = { {1.0,1.0,1.0,1.0},
  71. {1.0,1.0,1.0,1.0},
  72. {1.0,1.0,1.0,1.0},
  73. {10.0,10.0,10.0,1.0},
  74. {0.0,0.0,-1.0,0.0} };
  75. glEnable(GL_LIGHTING);
  76. glEnable(GL_LIGHT1);
  77. glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo[0]);
  78. glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo[1]);
  79. glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo[2]);
  80. glLightfv(GL_LIGHT1, GL_POSITION, swiatlo[3]);
  81. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo[4]);
  82.  
  83. }
  84.  
  85. void WlaczSwiatlo2(void)
  86. {
  87. GLfloat swiatlo[5][4] = { {0.4,0.3,0.7,1.0},
  88. {1.0,0.0,1.0,0.5},
  89. {0.7,1.0,0.6,1.0},
  90. {10.0,10.0,10.0,1.0},
  91. {0.0,0.0,-1.0,0.0} };
  92. glEnable(GL_LIGHTING);
  93. glEnable(GL_LIGHT1);
  94. glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo[0]);
  95. glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo[1]);
  96. glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo[2]);
  97. glLightfv(GL_LIGHT1, GL_POSITION, swiatlo[3]);
  98. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo[4]);
  99. }
  100.  
  101. void UstawParametryMaterialu1(void)
  102. {
  103. float material[5][4] = { {1.0,0.0,1.0,1.0},
  104. {1.0,0.0,1.0,1.0},
  105. {1.0,0.0,1.0,1.0},
  106. {3.0,0.0,0.0,0.0},
  107. {0.0,0.0,0.0,1.0} };
  108.  
  109. glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
  110. glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
  111. glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
  112. glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
  113. glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
  114. }
  115.  
  116. void UstawParametryMaterialu2(void)
  117. {
  118. float material[5][4] = { {0.229500, 0.088250, 0.027500, 1.000000},
  119. {0.550800, 0.211800, 0.066000, 1.000000},
  120. {0.580594, 0.223257, 0.069570, 1.000000},
  121. {51.2,0.0,0.0,0.0},
  122. {0.0,0.0,0.0,1.0} };
  123.  
  124. glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
  125. glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
  126. glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
  127. glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
  128. glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
  129. }
  130.  
  131. void UstawParametryMaterialu3(void)
  132. {
  133. float material[5][4] = { {0.105882, 0.058824, 0.113725, 1.000000},
  134. {0.427451, 0.470588, 0.541176, 1.000000},
  135. {0.333333, 0.333333, 0.521569, 1.000000},
  136. {9.84615,0.0,0.0,0.0},
  137. {0.0,0.0,0.0,1.0} };
  138.  
  139. glMaterialfv(GL_FRONT, GL_AMBIENT, material[0]);
  140. glMaterialfv(GL_FRONT, GL_DIFFUSE, material[1]);
  141. glMaterialfv(GL_FRONT, GL_SPECULAR, material[2]);
  142. glMaterialfv(GL_FRONT, GL_SHININESS, material[3]);
  143. glMaterialfv(GL_FRONT, GL_EMISSION, material[4]);
  144. }
  145.  
  146. void materialy(int material)
  147. {
  148. if (material == 0)
  149. UstawParametryMaterialu1();
  150. if (material == 1)
  151. UstawParametryMaterialu2();
  152. if (material == 2)
  153. UstawParametryMaterialu3();
  154. }
  155. //////////////////////////////////////////////////////////////////////////////////////////
  156. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  157. // Srodek szescianu znajduje się w punkcie (0,0,0).
  158. void RysujSzescian(double a)
  159. {
  160.  
  161. glBegin(GL_LINES);
  162.  
  163. // Os X
  164. glColor3f(1.0, 0.0, 0.0);
  165. glVertex3f(-40.0, 0.0, 0.0);
  166. glVertex3f(40.0, 0.0, 0.0);
  167.  
  168. // Os Y
  169. glColor3f(0.0, 1.0, 0.0);
  170. glVertex3f(0.0, -20.0, 0.0);
  171. glVertex3f(0.0, 20.0, 0.0);
  172.  
  173. // Os Z
  174. glColor3f(0.0, 0.0, 1.0);
  175. glVertex3f(0.0, 0.0, -20.0);
  176. glVertex3f(0.0, 0.0, 20.0);
  177.  
  178. glEnd();
  179.  
  180. /* glColor3f(1.0, 1.0, 1.0);
  181. // Sciany boczne
  182. glBegin(GL_QUAD_STRIP);
  183. glVertex3f(a/2.0, a/2.0, a/2.0);
  184. glVertex3f(a/2.0, -a/2.0, a/2.0);
  185. glVertex3f(a/2.0, a/2.0, -a/2.0);
  186. glVertex3f(a/2.0, -a/2.0, -a/2.0);
  187.  
  188. glVertex3f(-a/2.0, a/2.0, -a/2.0);
  189. glVertex3f(-a/2.0, -a/2.0, -a/2.0);
  190.  
  191. glVertex3f(-a/2.0, a/2.0, a/2.0);
  192. glVertex3f(-a/2.0, -a/2.0, a/2.0);
  193.  
  194. glVertex3f(a/2.0, a/2.0, a/2.0);
  195. glVertex3f(a/2.0, -a/2.0, a/2.0);
  196. glEnd();
  197.  
  198. // Gorna sciana
  199. glBegin(GL_QUAD_STRIP);
  200. glVertex3f(-a/2.0, a/2.0, a/2.0);
  201. glVertex3f(a/2.0, a/2.0, a/2.0);
  202. glVertex3f(-a/2.0, a/2.0, -a/2.0);
  203. glVertex3f(a/2.0, a/2.0, -a/2.0);
  204. glEnd();
  205.  
  206. // Dolna sciana
  207. glBegin(GL_QUAD_STRIP);
  208. glVertex3f(-a/2.0, -a/2.0, a/2.0);
  209. glVertex3f(a/2.0, -a/2.0, a/2.0);
  210. glVertex3f(-a/2.0, -a/2.0, -a/2.0);
  211. glVertex3f(a/2.0, -a/2.0, -a/2.0);
  212. glEnd();*/
  213.  
  214. }
  215.  
  216. void stozek()
  217. {
  218. glColor3f(1, 1, 1);
  219. glBegin(GL_TRIANGLE_FAN);
  220. glVertex3f(0, 0, 0);
  221. for (i = 0; i*dAlfa <= 360.0; i++)
  222. {
  223. glVertex3f(r*cos(DEG2RAD(i*dAlfa)), 0, r*sin(DEG2RAD(i*dAlfa)));
  224. }
  225.  
  226. glEnd();
  227. glBegin(GL_TRIANGLE_FAN);
  228. glVertex3f(0, wys, 0);
  229. for (i = 0; i*dAlfa <= 360.0; i++)
  230. {
  231. glVertex3f(r*cos(DEG2RAD(i*dAlfa)), 0, r*sin(DEG2RAD(i*dAlfa)));
  232. }
  233.  
  234. glEnd();
  235. }
  236.  
  237. void pierscien()
  238. {
  239. r = 10;
  240. glColor3f(1, 1, 1);
  241. glBegin(GL_QUAD_STRIP);
  242. glNormal3f(0,1,0);
  243. glNormal3f(0, -1, 0);
  244. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
  245. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  246. for (i = 0; i*dAlfa <= 360.0; i++)
  247. {
  248. glNormal3f(cos(DEG2RAD(i*dAlfa)), 0, sin(DEG2RAD(i*dAlfa)));
  249. glNormal3f(-cos(DEG2RAD(i*dAlfa)), 0, -sin(DEG2RAD(i*dAlfa)));
  250. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
  251. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  252. }
  253. glEnd();
  254.  
  255. glColor3f(1, 0, 0);
  256. glBegin(GL_QUAD_STRIP);
  257. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
  258. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  259. for (i = 0; i*dAlfa <= 360.0; i++)
  260. {
  261. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
  262. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  263. }
  264. glEnd();
  265.  
  266. glColor3f(0, 1, 0);
  267. glBegin(GL_QUAD_STRIP);
  268. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  269. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  270. for (i = 0; i*dAlfa <= 360.0; i++)
  271. {
  272. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  273. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  274. }
  275. glEnd();
  276.  
  277. glColor3f(0, 0, 1);
  278. glBegin(GL_QUAD_STRIP);
  279. glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
  280. glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 2, (R)*sin(DEG2RAD(i*dAlfa)));
  281. for (i = 0; i*dAlfa <= 360.0; i++)
  282. {
  283. glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
  284. glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 2, (R)*sin(DEG2RAD(i*dAlfa)));
  285. }
  286. glEnd();
  287. }
  288.  
  289. void wektory()
  290. {
  291. glColor3f(1, 1, 1);
  292. glBegin(GL_LINES);
  293. for (i = 0; i*dAlfa <= 360.0; i++)
  294. {
  295. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 0, R*sin(DEG2RAD(i*dAlfa)));
  296. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), -1, R*sin(DEG2RAD(i*dAlfa)));
  297. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  298. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), -1, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  299. glVertex3f((R)*cos(DEG2RAD(i*dAlfa)), 0, (R)*sin(DEG2RAD(i*dAlfa)));
  300. glVertex3f((R-1)*cos(DEG2RAD(i*dAlfa)), 0, (R-1)*sin(DEG2RAD(i*dAlfa)));
  301. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 0, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  302. glVertex3f((R + 5)*cos(DEG2RAD(i*dAlfa)), 0, (R + 5)*sin(DEG2RAD(i*dAlfa)));
  303. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
  304. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 3, R*sin(DEG2RAD(i*dAlfa)));
  305. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  306. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 3, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  307. glVertex3f(R*cos(DEG2RAD(i*dAlfa)), 2, R*sin(DEG2RAD(i*dAlfa)));
  308. glVertex3f((R-1)*cos(DEG2RAD(i*dAlfa)), 2, (R-1)*sin(DEG2RAD(i*dAlfa)));
  309. glVertex3f((R + 4)*cos(DEG2RAD(i*dAlfa)), 2, (R + 4)*sin(DEG2RAD(i*dAlfa)));
  310. glVertex3f((R + 5)*cos(DEG2RAD(i*dAlfa)), 2, (R + 5)*sin(DEG2RAD(i*dAlfa)));
  311. }
  312. glEnd();
  313. }
  314.  
  315. void RysujTekstRastrowy(void *font, char *tekst)
  316. {
  317. int i;
  318. for (i = 0; i < (int)strlen(tekst); i++)
  319. glutBitmapCharacter(font, tekst[i]);
  320. }
  321.  
  322. void RysujMenu(void)
  323. {
  324. char buf[255];
  325.  
  326. // Zmiana typu rzutu z perspektywicznego na ortogonalny
  327. glMatrixMode(GL_PROJECTION);
  328. glPushMatrix();
  329. glLoadIdentity();
  330. glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  331.  
  332. // Modelowanie sceny 2D (zawartosci nakladki)
  333. glMatrixMode(GL_MODELVIEW);
  334. glPushMatrix();
  335. glLoadIdentity();
  336.  
  337. // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
  338. glDisable(GL_LIGHTING);
  339.  
  340. // Okreslenie koloru tekstu
  341. glColor3f(1.0, 1.0, 1.0);
  342.  
  343. // RYSOWANIE MENU PARAMETROW ZRODLA SWIATLA
  344.  
  345. sprintf_s(buf, "przyblizenie/oddalenie +/-");
  346. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO);
  347. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  348.  
  349. sprintf_s(buf, "obrót wokó³ osi: q/w/e/r/t/y");
  350. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 10);
  351. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  352.  
  353. sprintf_s(buf, "zwiekszenie/zmiejszenie podzia³ów: a/s");
  354. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 20);
  355. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  356.  
  357. sprintf_s(buf, "zmiana modelu geometrycznego bryly: u/i");
  358. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 30);
  359. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  360.  
  361. sprintf_s(buf, "wlaczanie swiatel: o/p");
  362. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 40);
  363. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  364.  
  365. sprintf_s(buf, "zmiana materia³u: j/k/l");
  366. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 50);
  367. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  368.  
  369. sprintf_s(buf, "zmiana cieniowania n/m");
  370. glRasterPos2i(X_OFFSET_SWIATLO, Y_OFFSET_SWIATLO - 60);
  371. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  372.  
  373.  
  374. // Przywrocenie macierzy sprzed wywolania funkcji
  375. glMatrixMode(GL_PROJECTION);
  376. glPopMatrix();
  377. glMatrixMode(GL_MODELVIEW);
  378. glPopMatrix();
  379.  
  380. // Odblokowanie oswietlenia
  381. glEnable(GL_LIGHTING);
  382. }
  383.  
  384. //////////////////////////////////////////////////////////////////////////////////////////
  385. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  386. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  387. void UstawParametryWidoku(int szer, int wys)
  388. {
  389. // Zapamietanie wielkosci widoku
  390. szerokoscOkna = szer;
  391. wysokoscOkna = wys;
  392.  
  393. // Ustawienie parametrow viewportu
  394. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  395.  
  396. // Przejscie w tryb modyfikacji macierzy rzutowania
  397. glMatrixMode(GL_PROJECTION);
  398. glLoadIdentity();
  399. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  400. }
  401.  
  402.  
  403. //////////////////////////////////////////////////////////////////////////////////////////
  404. // Funkcja wyswietlajaca pojedyncza klatke animacji
  405. void WyswietlObraz(void)
  406. {
  407. // Wyczyszczenie bufora koloru i bufora glebokosci
  408. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  409.  
  410. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  411. glMatrixMode(GL_MODELVIEW);
  412.  
  413. // Zastapienie aktywnej macierzy macierza jednostkowa
  414. glLoadIdentity();
  415.  
  416. // Ustalenie polozenia obserwatora
  417. glTranslatef(0, 0, -odl);
  418. glRotatef(osX, 1, 0, 0);
  419. glRotatef(osY, 0, 1, 0);
  420. glRotatef(osZ, 0, 0, 1);
  421.  
  422. // Narysowanie szescianu
  423. //RysujSzescian(bok);
  424. //stozek();
  425. RysujMenu();
  426. glEnable(GL_LIGHTING);
  427. materialy(material);
  428. if (sw1)
  429. WlaczSwiatlo1();
  430. else
  431. glDisable(GL_LIGHT1);
  432.  
  433. if (sw2)
  434. WlaczSwiatlo2();
  435. else
  436. glDisable(GL_LIGHT2);
  437. glEnable(GL_LIGHT0);
  438. pierscien();
  439. if(czy_wektor)
  440. wektory();
  441. // Przelaczenie buforow ramki
  442. glutSwapBuffers();
  443. }
  444.  
  445.  
  446. //////////////////////////////////////////////////////////////////////////////////////////
  447. // Funkcja obslugi klawiatury
  448. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  449. {
  450. if (klawisz == '+')
  451. bok *= 2.0;
  452. else if (klawisz == '-')
  453. bok /= 2.0;
  454. else if (klawisz == 'p')
  455. {
  456. if (odl + 1 <= odlmax)
  457. odl++;
  458. }
  459. else if (klawisz == 'o')
  460. {
  461. if (odl - 1 >= odlmin)
  462. odl--;
  463. }
  464.  
  465. else if (klawisz == 'w')
  466. osX++;
  467. else if (klawisz == 's')
  468. osX--;
  469. else if (klawisz == 'a')
  470. osY++;
  471. else if (klawisz == 'd')
  472. osY--;
  473. else if (klawisz == 'q')
  474. osZ++;
  475. else if (klawisz == 'e')
  476. osZ--;
  477. else if (klawisz == '2')
  478. {
  479. if (en <= 64)
  480. en++;//eliminiacja bledu
  481. }
  482. else if (klawisz == '3')
  483. {
  484. if (en > 4)
  485. en--;
  486. }
  487. else if (klawisz == 't')
  488. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  489. else if (klawisz == 'T')
  490. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  491. else if (klawisz == 'y')
  492. czy_wektor = 1;
  493. else if (klawisz == 'Y')
  494. czy_wektor = 0;
  495. else if (klawisz == 'f')
  496. sw1 = 1;
  497. else if (klawisz == 'F')
  498. sw1 = 0;
  499. else if (klawisz == 'g')
  500. sw2 = 1;
  501. else if (klawisz == 'G')
  502. sw2 = 0;
  503. else if (klawisz == 'h')
  504. glShadeModel(GL_SMOOTH);
  505. else if (klawisz == 'H')
  506. glShadeModel(GL_FLAT);
  507. else if (klawisz == '7')
  508. material = 0;
  509. else if (klawisz == '8')
  510. material = 1;
  511. else if (klawisz == '9')
  512. material = 2;
  513. else if (klawisz == 27)
  514. exit(0);
  515. }
  516.  
  517.  
  518. //////////////////////////////////////////////////////////////////////////////////////////
  519. // Glowna funkcja programu
  520. int main(int argc, char **argv)
  521. {
  522. // Zainicjowanie biblioteki GLUT
  523. glutInit(&argc, argv);
  524.  
  525. // Ustawienie trybu wyswietlania
  526. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  527.  
  528. // Ustawienie polozenia dolenego lewego rogu okna
  529. glutInitWindowPosition(100, 100);
  530.  
  531. // Ustawienie rozmiarow okna
  532. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  533.  
  534. // Utworzenie okna
  535. glutCreateWindow("Szescian");
  536.  
  537. // Odblokowanie bufora glebokosci
  538. glEnable(GL_DEPTH_TEST);
  539.  
  540. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  541. glClearDepth(1000.0);
  542.  
  543. // Ustawienie koloru czyszczenia bufora ramki
  544. glClearColor(0.0f, 0.0f, 0.3f, 0.0f);
  545.  
  546. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  547.  
  548.  
  549. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  550. glutDisplayFunc(WyswietlObraz);
  551.  
  552. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  553. // zmieniane sa rozmiary okna
  554. glutReshapeFunc(UstawParametryWidoku);
  555.  
  556. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  557. // zadnych zadan
  558. glutIdleFunc(WyswietlObraz);
  559.  
  560. // Zarejestrowanie funkcji obslugi klawiatury
  561. glutKeyboardFunc(ObslugaKlawiatury);
  562.  
  563. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  564. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  565. glutMainLoop();
  566.  
  567. return 0;
  568. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement