Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.35 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. #pragma warning(disable : 4996)
  8.  
  9. #include <GL/glut.h>
  10. #include <string.h>
  11. #include <stdio.h>
  12. #include <math.h>
  13.  
  14. // Definicja stalych
  15. #define DLUGOSC_BOKU 5.0
  16. #define OBSERWATOR_FOV_Y 30.0
  17. #define M_PI 3.1415926535
  18. #define PI 3.1415926535
  19. #define DEG2RAD(x) ((float)(x)*M_PI/180.0)
  20. #define X_OFFSET_OBIEKT 10
  21. #define Y_OFFSET_OBIEKT 300
  22.  
  23. // Zmienne globalne
  24.  
  25. int szerokoscOkna = 800;
  26. int wysokoscOkna = 600;
  27. int OBSERWATOR_ODLEGLOSC = 20.0;
  28. int OBSERWATOR_ODLEGLOSCMIN = 10.0;
  29. int OBSERWATOR_ODLEGLOSCMAX = 100.0;
  30. int OBSERWATOR_OBROT_X = 20.0;
  31. int OBSERWATOR_OBROT_Y = 20.0;
  32. int OBSERWATOR_OBROT_Z = 0.0;
  33. int PODZIALY_PIONOWE = 4;
  34. int PODZIALY_POZIOME = 4;
  35. double R = 10.0; //dolna podstawa
  36. double r = 20.0; //gorna podstawa
  37. double h = 20.0; //wysokosc
  38. int normalne = 1;
  39. int i = 0;
  40. double alfa = 360.0;
  41. double bok = 4.0;
  42. double x, z, x2, z2 = 0;
  43. int zrodlo1 = 1, zrodlo2 = 1;
  44. int mat1 = 1, mat2 = 1, mat3 = 1;
  45.  
  46. // Prototypy funkcji
  47. void RysujSzescian(double a);
  48. void UstawParametryWidoku(int szer, int wys);
  49. void WyswietlObraz(void);
  50. void ObslugaKlawiatury(unsigned char klawisz, int x, int y);
  51.  
  52. //reflektor
  53. GLfloat swiatlo1[5][4] = {
  54. {0.2,1,0.2,1.0}, //swiatlo otoczenia
  55. {0.2,1,0.2,1.0}, //swiatlo rozpraszane
  56. {0.2,1,0.2,1.0}, //swiatlo zwierciadlane
  57. {0,0,0,1.0}, //polozenie
  58. {-1.0,0.0,-1.0,0.0} //kierunek swiecenia
  59. };
  60.  
  61.  
  62. //kierunkowe
  63. GLfloat swiatlo2[5][4] = {
  64. {0.5, 0.5, 0.1, 1.0}, //swiatlo otoczenia
  65. {0.5, 0.5, 0.1, 1.0}, //swiatlo rozpraszane
  66. {0.5, 0.5, 0.1, 1.0}, //swiatlo zwierciadlane
  67. {5.0, 5.0, 20.0, 0.0}, //polozenie
  68. {0.0, 0.0, -1.0, 0.0} //kierunek swiecenia
  69. };
  70.  
  71.  
  72.  
  73. float material1[5][4] = { //braz
  74. {0.5, 0.5, 0.5, 1.000000}, //swiatlo otoczenia
  75. {0.5, 0.5, 0.5, 1.000000}, //swiatlo rozpraszane
  76. {0.5, 0.5, 0.5, 1.000000}, //swiatlo zwierciadlane
  77. {6, 0.0, 0.0, 1.0}, //polysk
  78. {0.0, 0.0, 0.0, 1.0} //emisja
  79. };
  80.  
  81.  
  82.  
  83. float material2[5][4] = { // turkus
  84. {0, 0, 1, 1}, //swiatlo otoczenia
  85. {0, 0, 1, 1}, //swiatlo rozpraszane
  86. {0, 0, 0.2, 1}, //swiatlo zwierciadlane
  87. {10, 0.0, 0.0, 1.0}, //polysk
  88. {0.0, 0.0, 0.0, 1.0} //emisja
  89. };
  90.  
  91.  
  92. float material3[5][4] = { //perla
  93. {0.250000, 0.207250, 0.207250, 0.922000}, //swiatlo otoczenia
  94. {1.000000, 0.829000, 0.829000, 0.922000}, //swiatlo rozpraszane
  95. {0.296648, 0.296648, 0.296648, 0.922000}, //swiatlo zwierciadlane
  96. {11.264, 0.0, 0.0, 0.0}, //polysk
  97. {0.0, 0.0, 0.0, 1.0} //emisja
  98. };
  99.  
  100.  
  101.  
  102. //////////////////////////////////////////////////////////////////////////////////////////
  103. // Funkcja rysujaca szescian o boku "a" w trybie GL_QUAD_STRIP.
  104. // Srodek szescianu znajduje się w punkcie (0,0,0).
  105.  
  106.  
  107. void RysujTekstRastrowy(void* font, char* tekst)
  108. {
  109. int i;
  110.  
  111. for (i = 0; i < (int)strlen(tekst); i++)
  112. glutBitmapCharacter(font, tekst[i]);
  113. }
  114.  
  115. void RysujNakladke(void)
  116. {
  117. char buf[255];
  118.  
  119. // Zmiana typu rzutu z perspektywicznego na ortogonalny
  120. glMatrixMode(GL_PROJECTION);
  121. glPushMatrix();
  122. glLoadIdentity();
  123. glOrtho(0.0, szerokoscOkna, 0.0, wysokoscOkna, -100.0, 100.0);
  124.  
  125. // Modelowanie sceny 2D (zawartosci nakladki)
  126. glMatrixMode(GL_MODELVIEW);
  127. glPushMatrix();
  128. glLoadIdentity();
  129.  
  130. // Zablokowanie oswietlenia (mialoby ono wplyw na kolor tekstu)
  131. glDisable(GL_LIGHTING);
  132.  
  133. // Okreslenie koloru tekstu
  134. glColor3f(1.0, 1.0, 1.0);
  135.  
  136. // RYSOWANIE MENU PARAMETROW
  137.  
  138. glColor3f(1.0, 1.0, 1.0);
  139.  
  140. sprintf(buf, "Pierscien:");
  141. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT);
  142. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  143.  
  144. sprintf(buf, " * Zrodlo swiatla nr 1: (%d)", -zrodlo1);
  145. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 10);
  146. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  147.  
  148. sprintf(buf, " * Zrodlo swiatla nr 2: (%d)", -zrodlo2);
  149. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 20);
  150. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  151.  
  152.  
  153. sprintf(buf, " * Braz: (%d)", -mat1);
  154. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 30);
  155. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  156.  
  157. sprintf(buf, " * Turksus: (%d)", -mat2);
  158. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 40);
  159. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  160.  
  161. sprintf(buf, " * Perla: (%d)", -mat3);
  162. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 50);
  163. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  164.  
  165. sprintf(buf, " * Ilosc podzialow pierscienia: (%d)", PODZIALY_PIONOWE);
  166. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 60);
  167. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  168.  
  169. sprintf(buf, "Aby zmienic wlasciwosci nalezy nacisnac:");
  170. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 80);
  171. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  172.  
  173. sprintf(buf, "-/+ - oddalanie, przyblizanie");
  174. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 90);
  175. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  176.  
  177. sprintf(buf, "1/2/3/4/5/6 - zmiany osi");
  178. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 100);
  179. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  180.  
  181. sprintf(buf, "9/0 - zmiana smooth/flat");
  182. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 110);
  183. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  184.  
  185. sprintf(buf, "q/w - sterowanie zrodlem swiatla");
  186. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 120);
  187. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  188.  
  189. sprintf(buf, "a/s/d - zalaczanie materialow");
  190. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 130);
  191. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  192.  
  193. sprintf(buf, "z/x - zmiana podzialow");
  194. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 140);
  195. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  196.  
  197. sprintf(buf, "n/m - zmiana trybu zapelniania");
  198. glRasterPos2i(X_OFFSET_OBIEKT, Y_OFFSET_OBIEKT - 150);
  199. RysujTekstRastrowy(GLUT_BITMAP_8_BY_13, buf);
  200.  
  201. // Przywrocenie macierzy sprzed wywolania funkcji
  202. glMatrixMode(GL_PROJECTION);
  203. glPopMatrix();
  204. glMatrixMode(GL_MODELVIEW);
  205. glPopMatrix();
  206. }
  207.  
  208.  
  209.  
  210. void RysujXYZ()
  211. {
  212. glBegin(GL_LINES);
  213. // Os X
  214. glColor3f(1.0, 0.0, 0.0);
  215. glVertex3f(-40.0, 0.0, 0.0);
  216. glVertex3f(40.0, 0.0, 0.0);
  217. // Os Y
  218. glColor3f(0.0, 1.0, 0.0);
  219. glVertex3f(0.0, -20.0, 0.0);
  220. glVertex3f(0.0, 20.0, 0.0);
  221. // Os Z
  222. glColor3f(0.0, 0.0, 1.0);
  223. glVertex3f(0.0, 0.0, -20.0);
  224. glVertex3f(0.0, 0.0, 20.0);
  225. glEnd();
  226. }
  227. //2.(Y1)Promień wewnętrzny : 10, przekrój : trójkąt równramienny o ramionach 4
  228.  
  229. void wektory(float radius, int slices, int stacks)
  230. {
  231. glDisable(GL_LIGHTING);
  232.  
  233. double r1 = 10;
  234. double r2 = 14;
  235. double angle;
  236. double H = 4;
  237. int i = 0;
  238. double alfa = 0;
  239. bok = PODZIALY_PIONOWE;
  240.  
  241. glBegin(GL_LINES);
  242. glColor3f(0.8, 0.6, 0.4);
  243. for (angle = 0; angle < (PI * 2.0); angle += (2.0 * PI / bok))
  244. {
  245. glVertex3f(r1 * cos(angle), 0, r1 * sin(angle)); //kat prosty, pionowy
  246. glVertex3f(r1 * cos(angle), -1, r1 * sin(angle));
  247.  
  248. glVertex3f(r2 * cos(angle), 0, r2 * sin(angle)); //kat zewnetrzny, pionowy
  249. glVertex3f(r2 * cos(angle), -1, r2 * sin(angle));
  250.  
  251.  
  252. glVertex3f(r2 * cos(angle), 0, r2 * sin(angle)); //kat zewnetrzny, prostopadly do nachylonej sciany CZY NA PEWNO?
  253. glVertex3f((r2 + cos(45)) * cos(angle), sin(45), (r2 + cos(45)) * sin(angle));
  254.  
  255. glVertex3f(r1 * cos(angle), H, r1 * sin(angle)); //kat wewnetrzny, prostopadly do nachylonej sciany CZY NA PEWNO?
  256. glVertex3f((r1 + cos(45)) * cos(angle), H + sin(45), (r1 + cos(45)) * sin(angle));
  257.  
  258.  
  259. glVertex3f(r1 * cos(angle), H, r1 * sin(angle)); //kat wewnetrzny, poziomy
  260. glVertex3f((r1 - 1) * cos(angle), H, (r1 - 1) * sin(angle));
  261.  
  262. glVertex3f(r1 * cos(angle), 0, r1 * sin(angle)); //kat prosty, poziomy
  263. glVertex3f((r1 - 1) * cos(angle), 0, (r1 - 1) * sin(angle));
  264.  
  265. }
  266. glEnd();
  267.  
  268. glEnable(GL_LIGHTING);
  269. }
  270.  
  271. void RysujPierscien()
  272. {
  273. //oświetlenie
  274. glEnable(GL_LIGHTING);
  275.  
  276. if (zrodlo1 == (-1))
  277. {
  278. glEnable(GL_LIGHT1);
  279. glLightfv(GL_LIGHT1, GL_AMBIENT, swiatlo1[0]);
  280. glLightfv(GL_LIGHT1, GL_DIFFUSE, swiatlo1[1]);
  281. glLightfv(GL_LIGHT1, GL_SPECULAR, swiatlo1[2]);
  282. glLightfv(GL_LIGHT1, GL_POSITION, swiatlo1[3]);
  283. glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, swiatlo1[4]);
  284. }
  285. else glDisable(GL_LIGHT1);
  286.  
  287. if (zrodlo2 == (-1))
  288. {
  289. glEnable(GL_LIGHT2);
  290. glLightfv(GL_LIGHT2, GL_AMBIENT, swiatlo2[0]);
  291. glLightfv(GL_LIGHT2, GL_DIFFUSE, swiatlo2[1]);
  292. glLightfv(GL_LIGHT2, GL_SPECULAR, swiatlo2[2]);
  293. glLightfv(GL_LIGHT2, GL_POSITION, swiatlo2[3]);
  294. glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, swiatlo2[4]);
  295. glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 30);
  296. }
  297. else glDisable(GL_LIGHT2);
  298.  
  299.  
  300. //materiały
  301. if (mat1 == (-1))
  302. {
  303. glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
  304. glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
  305. glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
  306. glMaterialfv(GL_FRONT, GL_SHININESS, material1[3]);
  307. glMaterialfv(GL_FRONT, GL_EMISSION, material1[4]);
  308. }
  309.  
  310. if (mat2 == (-1))
  311. {
  312. glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
  313. glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
  314. glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
  315. glMaterialfv(GL_FRONT, GL_SHININESS, material2[3]);
  316. glMaterialfv(GL_FRONT, GL_EMISSION, material2[4]);
  317. }
  318.  
  319. if (mat3 == (-1))
  320. {
  321. glMaterialfv(GL_FRONT, GL_AMBIENT, material3[0]);
  322. glMaterialfv(GL_FRONT, GL_DIFFUSE, material3[1]);
  323. glMaterialfv(GL_FRONT, GL_SPECULAR, material3[2]);
  324. glMaterialfv(GL_FRONT, GL_SHININESS, material3[3]);
  325. glMaterialfv(GL_FRONT, GL_EMISSION, material3[4]);
  326. }
  327.  
  328. // pierscien
  329. double R = 10;
  330. double r = 20;
  331. double h = 20;
  332. double angle;
  333.  
  334. double r1 = 10;
  335. double r2 = 14;
  336. double H = 4;
  337. bok = PODZIALY_PIONOWE;
  338.  
  339.  
  340. glBegin(GL_TRIANGLES);
  341.  
  342. for (angle = 0; angle < (PI * 2.1); angle += (2.0 * PI / bok))
  343. {
  344. glNormal3f(0, -1, 0);
  345.  
  346. glVertex3f(r1 * cos(angle), 0, r1 * sin(angle));
  347. glVertex3f(r2 * cos(angle), 0, r2 * sin(angle));
  348. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), 0, r1 * sin(angle + 2.0 * PI / bok));
  349.  
  350. glVertex3f(r2 * cos(angle), 0, r2 * sin(angle));
  351. glVertex3f(r2 * cos(angle + 2.0 * PI / bok), 0, r2 * sin(angle + 2.0 * PI / bok));
  352. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), 0, r1 * sin(angle + 2.0 * PI / bok));
  353.  
  354. }
  355.  
  356. glColor3f(1, 1, 0);
  357.  
  358. for (angle = 0; angle < (PI * 2.1); angle += (2.0 * PI / bok))
  359. {
  360. glNormal3f(cos(45) * cos(angle), sin(45), cos(45) * sin(angle));
  361. glVertex3f(r2 * cos(angle), 0, r2 * sin(angle));
  362. glVertex3f(r1 * cos(angle), H, r1 * sin(angle));
  363. glVertex3f(r2 * cos(angle + 2.0 * PI / bok), 0, r2 * sin(angle + 2.0 * PI / bok));
  364.  
  365. glVertex3f(r1 * cos(angle), H, r1 * sin(angle));
  366. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), H, r1 * sin(angle + 2.0 * PI / bok));
  367. glVertex3f(r2 * cos(angle + 2.0 * PI / bok), 0, r2 * sin(angle + 2.0 * PI / bok));
  368.  
  369. }
  370. glColor3f(0, 1, 1);
  371. for (angle = 0; angle < (PI * 2.1); angle += (2.0 * PI / bok))
  372. {
  373. glNormal3f(-cos(angle), 0, -sin(angle));
  374. glVertex3f(r1 * cos(angle), 0, r1 * sin(angle));
  375. glVertex3f(r1 * cos(angle), H, r1 * sin(angle));
  376. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), 0, r1 * sin(angle + 2.0 * PI / bok));
  377.  
  378. glVertex3f(r1 * cos(angle), H, r1 * sin(angle));
  379. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), H, r1 * sin(angle + 2.0 * PI / bok));
  380. glVertex3f(r1 * cos(angle + 2.0 * PI / bok), 0, r1 * sin(angle + 2.0 * PI / bok));
  381.  
  382. }
  383. glEnd();
  384.  
  385. }
  386.  
  387.  
  388. //////////////////////////////////////////////////////////////////////////////////////////
  389. // Funkcja ustawiajaca parametry rzutu perspektywicznego i rozmiary viewportu. Powinna
  390. // być wywolywana kazdorazowo po zmianie rozmiarow okna programu.
  391. void UstawParametryWidoku(int szer, int wys)
  392. {
  393. // Zapamietanie wielkosci widoku
  394. szerokoscOkna = szer;
  395. wysokoscOkna = wys;
  396.  
  397. // Ustawienie parametrow viewportu
  398. glViewport(0, 0, szerokoscOkna, wysokoscOkna);
  399.  
  400. // Przejscie w tryb modyfikacji macierzy rzutowania
  401. glMatrixMode(GL_PROJECTION);
  402. glLoadIdentity();
  403. gluPerspective(OBSERWATOR_FOV_Y, (float)szerokoscOkna / (float)wysokoscOkna, 1.0, 1000.0);
  404. }
  405.  
  406.  
  407. //////////////////////////////////////////////////////////////////////////////////////////
  408. // Funkcja wyswietlajaca pojedyncza klatke animacji
  409. void WyswietlObraz(void)
  410. {
  411. // Wyczyszczenie bufora koloru i bufora glebokosci
  412. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  413.  
  414. // Przejscie w tryb modyfikacji macierzy przeksztalcen geometrycznych
  415. glMatrixMode(GL_MODELVIEW);
  416.  
  417. // Zastapienie aktywnej macierzy macierza jednostkowa
  418. glLoadIdentity();
  419.  
  420. // Ustalenie polozenia obserwatora
  421. glTranslatef(0, 0, -OBSERWATOR_ODLEGLOSC);
  422. glRotatef(OBSERWATOR_OBROT_X, 1, 0, 0);
  423. glRotatef(OBSERWATOR_OBROT_Y, 0, 1, 0);
  424. glRotatef(OBSERWATOR_OBROT_Z, 0, 0, 1);
  425.  
  426. //MODELE 3D
  427. //RysujXYZ();
  428. //RysujWalec();
  429. RysujPierscien();
  430. RysujNakladke();
  431. if (normalne)
  432. wektory(3, PODZIALY_PIONOWE, PODZIALY_POZIOME);
  433. //Rysujwektory(PODZIALY_PIONOWE);
  434.  
  435. // Przelaczenie buforow ramki
  436. glutSwapBuffers();
  437. }
  438.  
  439.  
  440. //////////////////////////////////////////////////////////////////////////////////////////
  441. // Funkcja obslugi klawiatury
  442. void ObslugaKlawiatury(unsigned char klawisz, int x, int y)
  443. {
  444. if (klawisz == '-')
  445. OBSERWATOR_ODLEGLOSC = (OBSERWATOR_ODLEGLOSC < OBSERWATOR_ODLEGLOSCMAX) ? OBSERWATOR_ODLEGLOSC + 1.0 : OBSERWATOR_ODLEGLOSC;
  446. else if (klawisz == '+')
  447. OBSERWATOR_ODLEGLOSC = (OBSERWATOR_ODLEGLOSC > OBSERWATOR_ODLEGLOSCMIN) ? OBSERWATOR_ODLEGLOSC - 1.0 : OBSERWATOR_ODLEGLOSC;
  448. else if (klawisz == '1')
  449. OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X + 1.0;
  450. else if (klawisz == '2')
  451. OBSERWATOR_OBROT_X = OBSERWATOR_OBROT_X - 1.0;
  452. else if (klawisz == '3')
  453. OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y - 1.0;
  454. else if (klawisz == '4')
  455. OBSERWATOR_OBROT_Y = OBSERWATOR_OBROT_Y + 1.0;
  456. else if (klawisz == '5')
  457. OBSERWATOR_OBROT_Z = OBSERWATOR_OBROT_Z - 1.0;
  458. else if (klawisz == '6')
  459. OBSERWATOR_OBROT_Z = OBSERWATOR_OBROT_Z + 1.0;
  460. else if (klawisz == 'm')
  461. PODZIALY_PIONOWE = (PODZIALY_PIONOWE < 64) ? PODZIALY_PIONOWE + 1 : PODZIALY_PIONOWE;
  462. else if (klawisz == 'n')
  463. PODZIALY_PIONOWE = (PODZIALY_PIONOWE > 4) ? PODZIALY_PIONOWE - 1 : PODZIALY_PIONOWE;
  464. else if (klawisz == '8')
  465. normalne = !normalne;
  466. else if (klawisz == 'n')
  467. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  468. else if (klawisz == 'm')
  469. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  470. else if (klawisz == '9')
  471. glShadeModel(GL_SMOOTH);
  472. else if (klawisz == '0')
  473. glShadeModel(GL_FLAT);
  474. else if (klawisz == 'q')
  475. zrodlo1 = zrodlo1 * (-1);
  476. else if (klawisz == 'w')
  477. zrodlo2 = zrodlo2 * (-1);
  478. else if (klawisz == 'a')
  479. mat1 = mat1 * (-1);
  480. else if (klawisz == 's')
  481. mat2 = mat2 * (-1);
  482. else if (klawisz == 'd')
  483. mat3 = mat3 * (-1);
  484. else if (klawisz == 27)
  485. exit(0);
  486. }
  487.  
  488. //////////////////////////////////////////////////////////////////////////////////////////
  489. // Glowna funkcja programu
  490. int main(int argc, char** argv)
  491. {
  492. // Zainicjowanie biblioteki GLUT
  493. glutInit(&argc, argv);
  494.  
  495. glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
  496.  
  497. // Ustawienie trybu wyswietlania
  498. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  499.  
  500. // Ustawienie polozenia dolenego lewego rogu okna
  501. glutInitWindowPosition(100, 100);
  502.  
  503. // Ustawienie rozmiarow okna
  504. glutInitWindowSize(szerokoscOkna, wysokoscOkna);
  505.  
  506. // Utworzenie okna
  507. glutCreateWindow("Szescian");
  508.  
  509. // Odblokowanie bufora glebokosci
  510. glEnable(GL_DEPTH_TEST);
  511.  
  512. // Ustawienie wartosci czyszczacej zawartosc bufora glebokosci
  513. glClearDepth(1000.0);
  514.  
  515. // Ustawienie koloru czyszczenia bufora ramki
  516. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  517.  
  518. // Wlaczenie wyswietlania wielokatow w postaci obrysow (przydatne w celach diagnostycznych).
  519. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  520.  
  521. // Zarejestrowanie funkcji (callback) odpowiedzialnej za
  522. glutDisplayFunc(WyswietlObraz);
  523.  
  524. // Zarejestrowanie funkcji (callback) wywolywanej za kazdym razem kiedy
  525. // zmieniane sa rozmiary okna
  526. glutReshapeFunc(UstawParametryWidoku);
  527.  
  528. // Zarejestrowanie funkcji wykonywanej gdy okno nie obsluguje
  529. // zadnych zadan
  530. glutIdleFunc(WyswietlObraz);
  531.  
  532. // Zarejestrowanie funkcji obslugi klawiatury
  533. glutKeyboardFunc(ObslugaKlawiatury);
  534.  
  535. // Obsluga glownej petli programu (wywolywanie zarejestrowanych callbackow
  536. // w odpowiedzi na odbierane zdarzenia lub obsluga stanu bezczynnosci)
  537. glutMainLoop();
  538.  
  539. return 0;
  540. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement