Advertisement
Guest User

Untitled

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