Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.60 KB | None | 0 0
  1. //laby tekstura trójkąt
  2. /*************************************************************************************/
  3.  
  4. // Szkielet programu do tworzenia modelu sceny 3-D z wizualizacją osi
  5. // układu współrzędnych dla rzutowania perspektywicznego
  6.  
  7. /*************************************************************************************/
  8. #define _USE_MATH_DEFINES
  9. #define _CRT_SECURE_NO_DEPRECATE
  10. #include <windows.h>
  11. #include <gl/gl.h>
  12. #include <gl/glut.h>
  13. #include <iostream>;
  14. #include <time.h>
  15. #include <cmath>
  16. typedef float point3[3];
  17. float ***colors;
  18. float R;
  19. static GLfloat viewer[] = { 0.0, 0.0, R };
  20. static GLfloat theta3[] = { 0.0, 0.0, 0.0 }; // trzy kąty obrotu
  21. // inicjalizacja położenia obserwatora
  22. static GLfloat theta = 0.0;
  23. static GLfloat phi = 0.0;// kąt obrotu obiektu
  24. static GLfloat theta2 = 0.0;
  25. static GLfloat phi2 = 0.0;
  26. static GLfloat pix2angle; // przelicznik pikseli na stopnie
  27.  
  28. static GLint status = 0; // stan klawiszy myszy
  29. // 0 - nie naciśnięto żadnego klawisza
  30. // 1 - naciśnięty zostać lewy klawisz
  31. static bool widok[] = { true, true, true, true, true };
  32. static int x_pos_old = 0; // poprzednia pozycja kursora myszy
  33. static int y_pos_old = 0;
  34. static int y_pos_old2 = 0;
  35. static int x_pos_old2 = 0;
  36.  
  37. static int delta_x = 0;
  38. static int delta_y = 0;// różnica pomiędzy pozycją bieżącą
  39. static int delta_y2 = 0; // i poprzednią kursora myszy
  40. static int delta_x2 = 0;
  41.  
  42. int n;
  43. bool en = true;
  44. /*************************************************************************************/
  45.  
  46.  
  47. /*************************************************************************************/
  48. // Funkcja wczytuje dane obrazu zapisanego w formacie TGA w pliku o nazwie
  49. // FileName, alokuje pamięć i zwraca wskaźnik (pBits) do bufora w którym
  50. // umieszczone są dane.
  51. // Ponadto udostępnia szerokość (ImWidth), wysokość (ImHeight) obrazu
  52. // tekstury oraz dane opisujące format obrazu według specyfikacji OpenGL
  53. // (ImComponents) i (ImFormat).
  54. // Jest to bardzo uproszczona wersja funkcji wczytującej dane z pliku TGA.
  55. // Działa tylko dla obrazów wykorzystujących 8, 24, or 32 bitowy kolor.
  56. // Nie obsługuje plików w formacie TGA kodowanych z kompresją RLE.
  57. /*************************************************************************************/
  58.  
  59. GLbyte *LoadTGAImage(const char *FileName, GLint *ImWidth, GLint *ImHeight, GLint *ImComponents, GLenum *ImFormat)
  60. {
  61. /*************************************************************************************/
  62. // Struktura dla nagłówka pliku TGA
  63.  
  64. #pragma pack(1)
  65. typedef struct
  66. {
  67. GLbyte idlength;
  68. GLbyte colormaptype;
  69. GLbyte datatypecode;
  70. unsigned short colormapstart;
  71. unsigned short colormaplength;
  72. unsigned char colormapdepth;
  73. unsigned short x_orgin;
  74. unsigned short y_orgin;
  75. unsigned short width;
  76. unsigned short height;
  77. GLbyte bitsperpixel;
  78. GLbyte descriptor;
  79. }TGAHEADER;
  80. #pragma pack(8)
  81.  
  82. FILE *pFile;
  83. TGAHEADER tgaHeader;
  84. unsigned long lImageSize;
  85. short sDepth;
  86. GLbyte *pbitsperpixel = NULL;
  87.  
  88. /*************************************************************************************/
  89. // Wartości domyślne zwracane w przypadku błędu
  90.  
  91. *ImWidth = 0;
  92. *ImHeight = 0;
  93. *ImFormat = GL_BGR_EXT;
  94. *ImComponents = GL_RGB8;
  95.  
  96. pFile = fopen(FileName, "rb");
  97. if (pFile == NULL)
  98. return NULL;
  99. /*************************************************************************************/
  100. // Przeczytanie nagłówka pliku
  101.  
  102. fread(&tgaHeader, sizeof(TGAHEADER), 1, pFile);
  103.  
  104. /*************************************************************************************/
  105. // Odczytanie szerokości, wysokości i głębi obrazu
  106.  
  107. *ImWidth = tgaHeader.width;
  108. *ImHeight = tgaHeader.height;
  109. sDepth = tgaHeader.bitsperpixel / 8;
  110.  
  111. /*************************************************************************************/
  112. // Sprawdzenie, czy głębia spełnia założone warunki (8, 24, lub 32 bity)
  113.  
  114. if (tgaHeader.bitsperpixel != 8 && tgaHeader.bitsperpixel != 24 && tgaHeader.bitsperpixel != 32)
  115. return NULL;
  116.  
  117. /*************************************************************************************/
  118. // Obliczenie rozmiaru bufora w pamięci
  119.  
  120. lImageSize = tgaHeader.width * tgaHeader.height * sDepth;
  121.  
  122. /*************************************************************************************/
  123. // Alokacja pamięci dla danych obrazu
  124.  
  125. pbitsperpixel = (GLbyte*)malloc(lImageSize * sizeof(GLbyte));
  126.  
  127. if (pbitsperpixel == NULL)
  128. return NULL;
  129.  
  130. if (fread(pbitsperpixel, lImageSize, 1, pFile) != 1)
  131. {
  132. free(pbitsperpixel);
  133. return NULL;
  134. }
  135.  
  136. /*************************************************************************************/
  137. // Ustawienie formatu OpenGL
  138.  
  139. switch (sDepth)
  140. {
  141. case 3:
  142. *ImFormat = GL_BGR_EXT;
  143. *ImComponents = GL_RGB8;
  144. break;
  145. case 4:
  146. *ImFormat = GL_BGRA_EXT;
  147. *ImComponents = GL_RGBA8;
  148. break;
  149. case 1:
  150. *ImFormat = GL_LUMINANCE;
  151. *ImComponents = GL_LUMINANCE8;
  152. break;
  153. };
  154.  
  155. fclose(pFile);
  156.  
  157. return pbitsperpixel;
  158. }
  159. /*************************************************************************************/
  160.  
  161.  
  162. void spin()
  163. {
  164.  
  165. theta3[0] -= 0.5;
  166. if (theta3[0] > 360.0) theta3[0] -= 360.0;
  167.  
  168. theta3[1] -= 0.5;
  169. if (theta3[1] > 360.0) theta3[1] -= 360.0;
  170.  
  171. theta3[2] -= 0.5;
  172. if (theta3[2] > 360.0) theta3[2] -= 360.0;
  173.  
  174. glutPostRedisplay(); //odświeżenie zawartości aktualnego okna
  175. }
  176.  
  177. void Axes(void)
  178. {
  179.  
  180. point3 x_min = { -5.0, 0.0, 0.0 };
  181. point3 x_max = { 5.0, 0.0, 0.0 };
  182. // pocz?tek i koniec obrazu osi x
  183.  
  184. point3 y_min = { 0.0, -5.0, 0.0 };
  185. point3 y_max = { 0.0, 5.0, 0.0 };
  186. // pocz?tek i koniec obrazu osi y
  187.  
  188. point3 z_min = { 0.0, 0.0, -5.0 };
  189. point3 z_max = { 0.0, 0.0, 5.0 };
  190. // pocz?tek i koniec obrazu osi y
  191.  
  192. glColor3f(1.0f, 0.0f, 0.0f); // kolor rysowania osi - czerwony
  193. glBegin(GL_LINES); // rysowanie osi x
  194.  
  195. glVertex3fv(x_min);
  196. glVertex3fv(x_max);
  197.  
  198. glEnd();
  199.  
  200. glColor3f(0.0f, 1.0f, 0.0f); // kolor rysowania - zielony
  201. glBegin(GL_LINES); // rysowanie osi y
  202.  
  203. glVertex3fv(y_min);
  204. glVertex3fv(y_max);
  205.  
  206. glEnd();
  207.  
  208. glColor3f(0.0f, 0.0f, 1.0f); // kolor rysowania - niebieski
  209. glBegin(GL_LINES); // rysowanie osi z
  210.  
  211. glVertex3fv(z_min);
  212. glVertex3fv(z_max);
  213.  
  214. glEnd();
  215.  
  216. }
  217. /*************************************************************************************/
  218.  
  219. void trojkat(point3 p1, point3 p2, point3 p3) {
  220. glBegin(GL_TRIANGLES);
  221. glTexCoord2f(0.0f, 0.0f);
  222. glVertex3f(p1[0], p1[1], p1[2]);
  223. glTexCoord2f(1.0f, 0.0f);
  224. glVertex3f(p2[0], p2[1], p2[2]);
  225. glTexCoord2f(0.5f, 1.0f);
  226. glVertex3f(p3[0], p3[1], p3[2]);
  227. glEnd();
  228.  
  229. }
  230.  
  231. void pyramid() {
  232. point3 p1 = { 2.0, 0.0, 2.0 };
  233. point3 p2 = { 2.0, 0.0, -2.0 };
  234. point3 p3 = { -2.0, 0.0, -2.0 };
  235. point3 p4 = { -2.0, 0.0, 2.0 };
  236. point3 cz = { 0.0, 5.0, 0.0 };
  237.  
  238. if (widok[0]) {
  239. glBegin(GL_POLYGON);
  240. glTexCoord2f(0.0f, 0.0f);
  241. glVertex3f(p4[0], p4[1], p4[2]);
  242. glTexCoord2f(0.0f, 1.0f);
  243. glVertex3f(p3[0], p3[1], p3[2]);
  244. glTexCoord2f(1.0f, 1.0f);
  245. glVertex3f(p2[0], p2[1], p2[2]);
  246. glTexCoord2f(1.0f, 0.0f);
  247. glVertex3f(p1[0], p1[1], p1[2]);
  248. glEnd();
  249. }
  250. if (widok[1])
  251. trojkat(p1, p2, cz);
  252. if (widok[2])
  253. trojkat(p4, p1, cz);
  254. if (widok[3])
  255. trojkat(p2, p3, cz);
  256. if (widok[4])
  257. trojkat(p3, p4, cz);
  258. if (en)
  259. glEnable(GL_CULL_FACE);
  260. else
  261. glDisable(GL_CULL_FACE);
  262.  
  263. }
  264.  
  265. void Mouse(int btn, int state, int x, int y)
  266. {
  267.  
  268.  
  269. if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
  270. {
  271. x_pos_old = x; // przypisanie aktualnie odczytanej pozycji kursora
  272. // jako pozycji poprzedniej
  273. y_pos_old = y;
  274. status = 1; // wcięnięty został lewy klawisz myszy
  275. }
  276. else if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
  277. y_pos_old2 = y;
  278. x_pos_old2 = x;
  279. status = 2;
  280. }
  281. else
  282. status = 0; // nie został wcięnięty żaden klawisz
  283. }
  284.  
  285. /*************************************************************************************/
  286. // Funkcja "monitoruje" położenie kursora myszy i ustawia wartości odpowiednich
  287. // zmiennych globalnych
  288.  
  289. void Motion(GLsizei x, GLsizei y)
  290. {
  291.  
  292. delta_x = x - x_pos_old; // obliczenie różnicy położenia kursora myszy
  293. delta_y = y - y_pos_old;
  294. delta_y2 = y - y_pos_old2;
  295. delta_x2 = x - x_pos_old2;
  296. x_pos_old = x; // podstawienie bieżącego położenia jako poprzednie
  297. y_pos_old = y;
  298. y_pos_old2 = y;
  299. x_pos_old2 = x;
  300. glutPostRedisplay(); // przerysowanie obrazu sceny
  301. }
  302.  
  303. /*************************************************************************************/
  304.  
  305. // Funkcja określająca co ma być rysowane (zawsze wywoływana, gdy trzeba
  306. // przerysować scenę)
  307.  
  308.  
  309. void RenderScene(void)
  310. {
  311.  
  312. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  313. // Czyszczenie okna aktualnym kolorem czyszczącym
  314.  
  315. glLoadIdentity();
  316. // Czyszczenie macierzy bie??cej
  317.  
  318.  
  319.  
  320. Axes();
  321. // Narysowanie osi przy pomocy funkcji zdefiniowanej powyżej
  322.  
  323. if (status == 1) // jeśli lewy klawisz myszy wcięnięty
  324. {
  325. theta -= delta_x*pix2angle*0.1;
  326. if (theta > 2 * M_PI)
  327. theta = 0;
  328. //else if (theta < 0)
  329. //theta = 2*M_PI;
  330. phi -= delta_y*pix2angle*0.1;
  331. if (phi > 2 * M_PI)
  332. phi = 0;
  333. else if (phi < 0)
  334. phi = 2 * M_PI;
  335.  
  336. //std::cout<< theta << " " << phi << "\n";
  337. }
  338. if (status == 2) {
  339. theta2 -= delta_x2*pix2angle*0.1;
  340. if (theta2 > 2 * M_PI)
  341. theta2 = 0;
  342. //else if (theta < 0)
  343. //theta = 2*M_PI;
  344. phi2 -= delta_y2*pix2angle*0.1;
  345. if (phi2 > 2 * M_PI)
  346. phi2 = 0;
  347. else if (phi2 < 0)
  348. phi2 = 2 * M_PI;
  349.  
  350. }
  351. viewer[0] = R*cos(theta)*cos(phi);
  352. //viewer[1] = R*sin(phi);
  353. //viewer[2] = R*sin(theta)*cos(phi);
  354.  
  355. gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, cos(phi), 0.0);
  356.  
  357. GLfloat light_position[] = { viewer[0], viewer[1], viewer[2], 1.0 };
  358. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  359. // Zdefiniowanie położenia obserwatora
  360. glColor3f(1.0f, 1.0f, 1.0f);
  361. // Ustawienie koloru rysowania na biały
  362.  
  363. //glutWireTeapot(3.0);
  364. // Narysowanie czajnika
  365. glTranslated(0.0, -2.5, 0.0);
  366. point3 p1 = { 2.0, 0.0, 2.0 };
  367. point3 p2 = { 2.0, 0.0, -2.0 };
  368. point3 cz = { 0.0, 5.0, 0.0 };
  369. //trojkat(p1, p2, cz);
  370.  
  371. glRotatef(theta3[0], 1.0, 0.0, 0.0);
  372.  
  373. glRotatef(theta3[1], 0.0, 1.0, 0.0);
  374.  
  375. glRotatef(theta3[2], 0.0, 0.0, 1.0);
  376.  
  377. pyramid();
  378. glFlush();
  379. // Przekazanie poleceń rysujących do wykonania
  380.  
  381. glutSwapBuffers();
  382.  
  383.  
  384.  
  385. }
  386. /*************************************************************************************/
  387.  
  388. // Funkcja ustalająca stan renderowania
  389.  
  390. void keys(unsigned char key, int x, int y)
  391. {
  392. switch (key) {
  393. case '1':
  394. if (widok[0])
  395. widok[0] = false;
  396. else
  397. widok[0] = true;
  398. break;
  399. case '2':
  400. if (widok[1])
  401. widok[1] = false;
  402. else
  403. widok[1] = true;
  404. break;
  405. case '3':
  406. if (widok[2])
  407. widok[2] = false;
  408. else
  409. widok[2] = true;
  410. break;
  411. case '4':
  412. if (widok[3])
  413. widok[3] = false;
  414. else
  415. widok[3] = true;
  416. break;
  417. case '5':
  418. if (widok[4])
  419. widok[4] = false;
  420. else
  421. widok[4] = true;
  422. break;
  423. case 'a':
  424. if (en)
  425. en = false;
  426. else
  427. en = true;
  428. }
  429.  
  430. RenderScene(); // przerysowanie obrazu sceny
  431. }
  432.  
  433. void MyInit(void)
  434. {
  435. // Zmienne dla obrazu tekstury
  436.  
  437. GLbyte *pBytes;
  438. GLint ImWidth, ImHeight, ImComponents;
  439. GLenum ImFormat;
  440.  
  441. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  442. // Kolor czyszcący (wypełnienia okna) ustawiono na czarny
  443. /*************************************************************************************/
  444. // Definicja materiału z jakiego zrobiony jest czajnik
  445. // i definicja źródła światła
  446. /*************************************************************************************/
  447.  
  448. /*************************************************************************************/
  449. // Definicja materiału z jakiego zrobiony jest czajnik
  450. /*************************************************************************************/
  451. // Teksturowanie będzie prowadzone tyko po jednej stronie ściany
  452.  
  453. glEnable(GL_CULL_FACE);
  454.  
  455. /*************************************************************************************/
  456. // Przeczytanie obrazu tekstury z pliku o nazwie tekstura.tga
  457.  
  458. pBytes = LoadTGAImage("P6_t.tga", &ImWidth, &ImHeight, &ImComponents, &ImFormat);
  459.  
  460. /*************************************************************************************/
  461. // Zdefiniowanie tekstury 2-D
  462.  
  463. glTexImage2D(GL_TEXTURE_2D, 0, ImComponents, ImWidth, ImHeight, 0, ImFormat, GL_UNSIGNED_BYTE, pBytes);
  464.  
  465. /*************************************************************************************/
  466. // Zwolnienie pamięci
  467.  
  468. free(pBytes);
  469.  
  470. /*************************************************************************************/
  471. // Włączenie mechanizmu teksturowania
  472.  
  473. glEnable(GL_TEXTURE_2D);
  474.  
  475. /*************************************************************************************/
  476. // Ustalenie trybu teksturowania
  477.  
  478. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  479.  
  480. /*************************************************************************************/
  481. // Określenie sposobu nakładania tekstur
  482.  
  483. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  484. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  485. GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 0.5 };
  486. // współczynniki ka =[kar,kag,kab] dla światła otoczenia
  487.  
  488. GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  489. // współczynniki kd =[kdr,kdg,kdb] światła rozproszonego
  490.  
  491. GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  492. // współczynniki ks =[ksr,ksg,ksb] dla światła odbitego
  493.  
  494. GLfloat mat_shininess = { 35.0 };
  495. // współczynnik n opisujący połysk powierzchni
  496.  
  497. /*************************************************************************************/
  498. // Definicja źródła światła
  499.  
  500.  
  501. // położenie źródła
  502. GLfloat light_position[] = { 8.0,2.0, 0.0, 1.0 };
  503. GLfloat light_ambient[] = { 0.1, 0.1, 0.1, 1.0 };
  504. // składowe intensywności świecenia źródła światła otoczenia
  505. // Ia = [Iar,Iag,Iab]
  506.  
  507. GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  508. // składowe intensywności świecenia źródła światła powodującego
  509. // odbicie dyfuzyjne Id = [Idr,Idg,Idb]
  510.  
  511. GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
  512. // składowe intensywności świecenia źródła światła powodującego
  513. // odbicie kierunkowe Is = [Isr,Isg,Isb]
  514.  
  515. GLfloat att_constant = { 1.0 };
  516. // składowa stała ds dla modelu zmian oświetlenia w funkcji
  517. // odległości od źródła
  518.  
  519. GLfloat att_linear = { (float)0.05 };
  520. // składowa liniowa dl dla modelu zmian oświetlenia w funkcji
  521. // odległości od źródła
  522.  
  523. GLfloat att_quadratic = { (float)0.001 };
  524. // składowa kwadratowa dq dla modelu zmian oświetlenia w funkcji
  525. // odległości od źródła
  526.  
  527. /*************************************************************************************/
  528. // Ustawienie parametrów materiału i źródła światła
  529. /*************************************************************************************/
  530. // Ustawienie patrametrów materiału
  531.  
  532. glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  533. glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  534. glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  535. glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
  536.  
  537. /*************************************************************************************/
  538. // Ustawienie parametrów źródła
  539.  
  540. glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
  541. glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  542. glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
  543. glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  544.  
  545. glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, att_constant);
  546. glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, att_linear);
  547. glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, att_quadratic);
  548.  
  549.  
  550.  
  551.  
  552. // Ustawienie opcji systemu oświetlania sceny
  553.  
  554. glShadeModel(GL_SMOOTH); // właczenie łagodnego cieniowania
  555. glEnable(GL_LIGHTING); // właczenie systemu oświetlenia sceny
  556. glEnable(GL_LIGHT0); // włączenie źródła o numerze 0
  557.  
  558. glEnable(GL_DEPTH_TEST); // włączenie mechanizmu z-bufora
  559.  
  560. /*************************************************************************************/
  561.  
  562. }
  563.  
  564.  
  565.  
  566. /*************************************************************************************/
  567.  
  568. // Funkcja ma za zadanie utrzymanie stałych proporcji rysowanych
  569. // w przypadku zmiany rozmiarów okna.
  570. // Parametry vertical i horizontal (wysokość i szerokość okna) są
  571. // przekazywane do funkcji za każdym razem gdy zmieni się rozmiar okna.
  572.  
  573.  
  574.  
  575. void ChangeSize(GLsizei horizontal, GLsizei vertical)
  576. {
  577. pix2angle = 360.0 / (float)horizontal; // przeliczenie pikseli na stopnie
  578. glMatrixMode(GL_PROJECTION);
  579. // Przełączenie macierzy bieżącej na macierz projekcji
  580.  
  581. glLoadIdentity();
  582. // Czyszcznie macierzy bieżącej
  583.  
  584. gluPerspective(95.0, horizontal / vertical, 1.0, 30.0);
  585. // Ustawienie parametrów dla rzutu perspektywicznego
  586.  
  587.  
  588. if (horizontal <= vertical)
  589. glViewport(0, (vertical - horizontal) / 2, horizontal, horizontal);
  590.  
  591. else
  592. glViewport((horizontal - vertical) / 2, 0, vertical, vertical);
  593. // Ustawienie wielkości okna okna widoku (viewport) w zależności
  594. // relacji pomiędzy wysokością i szerokością okna
  595.  
  596. glMatrixMode(GL_MODELVIEW);
  597. // Przełączenie macierzy bieżącej na macierz widoku modelu
  598.  
  599. glLoadIdentity();
  600. // Czyszczenie macierzy bieżącej
  601.  
  602. }
  603.  
  604. /*************************************************************************************/
  605.  
  606. // Główny punkt wejścia programu. Program działa w trybie konsoli
  607.  
  608.  
  609.  
  610. void main(void)
  611. {
  612. R = 5.0;
  613. n = 40;
  614. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  615.  
  616. glutInitWindowSize(1024, 768);
  617.  
  618. glutCreateWindow("Rzutowanie perspektywiczne");
  619. glutDisplayFunc(RenderScene);
  620. // Określenie, że funkcja RenderScene będzie funkcją zwrotną
  621. // (callback function). Będzie ona wywoływana za każdym razem
  622. // gdy zajdzie potrzeba przerysowania okna
  623. glutIdleFunc(spin);
  624.  
  625. glutMouseFunc(Mouse);
  626. // Ustala funkcję zwrotną odpowiedzialną za badanie stanu myszy
  627.  
  628. glutMotionFunc(Motion);
  629. // Ustala funkcję zwrotną odpowiedzialną za badanie ruchu myszy
  630.  
  631. glutReshapeFunc(ChangeSize);
  632. // Dla aktualnego okna ustala funkcję zwrotną odpowiedzialną
  633. // za zmiany rozmiaru okna
  634.  
  635. glutKeyboardFunc(keys);
  636.  
  637. MyInit();
  638. // Funkcja MyInit() (zdefiniowana powyżej) wykonuje wszelkie
  639. // inicjalizacje konieczne przed przystąpieniem do renderowania
  640.  
  641. glEnable(GL_DEPTH_TEST);
  642. // Włączenie mechanizmu usuwania niewidocznych elementów sceny
  643.  
  644. glutMainLoop();
  645. // Funkcja uruchamia szkielet biblioteki GLUT
  646.  
  647.  
  648.  
  649. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement