Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.55 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <vector>
  3.  
  4. #pragma region Zmienne globalne
  5.  
  6. SCameraState player, Car;
  7.  
  8.  
  9. double T = 0.0;
  10.  
  11. int mouseX = 0;
  12. int mouseY = 0;
  13.  
  14. bool captureMouse = true;
  15. bool free3DMovement = false;
  16.  
  17. float mouseSensitivity = .15f;
  18.  
  19. // Zmienne przechowujące identyfikatory tekstur
  20.  
  21. GLuint cartexture;
  22. GLuint trasatextura;
  23. GLuint SkyTexture;
  24. GLuint GrassTexture;
  25.  
  26. GLuint displayListId;
  27.  
  28.  
  29. // Zmienne przechowujące identyfikatory modeli
  30. GLuint car;
  31. GLuint trasa;
  32.  
  33.  
  34.  
  35. #pragma endregion
  36.  
  37. // Funkcja odczytująca bitmapę i tworząca na jej podstawie teksturę z zadanym rodzajem filtracji
  38. GLuint LoadTexture(char * file, int magFilter, int minFilter) {
  39.  
  40. // Odczytanie bitmapy
  41. Bitmap *tex = new Bitmap();
  42. if (!tex->loadBMP(file)) {
  43. printf("ERROR: Cannot read texture file \"%s\".\n", file);
  44. return -1;
  45. }
  46.  
  47. // Utworzenie nowego id wolnej tekstury
  48. GLuint texId;
  49. glGenTextures(1, &texId);
  50.  
  51. // "Bindowanie" tekstury o nowoutworzonym id
  52. glBindTexture(GL_TEXTURE_2D, texId);
  53.  
  54. // Określenie parametrów filtracji dla tekstury
  55. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter); // Filtracja, gdy tekstura jest powiększana
  56. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter); // Filtracja, gdy tekstura jest pomniejszana
  57.  
  58. // Wysłanie tekstury do pamięci karty graficznej zależnie od tego, czy chcemy korzystać z mipmap czy nie
  59. if (minFilter == GL_LINEAR_MIPMAP_LINEAR || minFilter == GL_LINEAR_MIPMAP_NEAREST) {
  60. // Automatyczne zbudowanie mipmap i wysłanie tekstury do pamięci karty graficznej
  61. gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tex->width, tex->height, GL_RGB, GL_UNSIGNED_BYTE, tex->data);
  62. }
  63. else {
  64. // Wysłanie tekstury do pamięci karty graficznej
  65. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->width, tex->height, 0, GL_RGB, GL_UNSIGNED_BYTE, tex->data);
  66. }
  67.  
  68. // Zwolnienie pamięci, usunięcie bitmapy z pamięci - bitmapa jest już w pamięci karty graficznej
  69. delete tex;
  70.  
  71. // Zwrócenie id tekstury
  72. return texId;
  73. }
  74.  
  75. //struktura do ladowanie obiektu
  76. struct SFace {
  77. int v[3];
  78. int n[3];
  79. int t[3];
  80. };
  81.  
  82. //ladowanie obiektu
  83. GLuint LoadObj(char * file) {
  84.  
  85. FILE * fp = fopen(file, "r");
  86.  
  87. if (fp == NULL) {
  88. printf("ERROR: Cannot read model file \"%s\".\n", file);
  89. return -1;
  90. }
  91.  
  92. std::vector<vec3> * v = new std::vector<vec3>();
  93. std::vector<vec3> * n = new std::vector<vec3>();
  94. std::vector<vec3> * t = new std::vector<vec3>();
  95. std::vector<SFace> * f = new std::vector<SFace>();
  96.  
  97. char buf[128];
  98.  
  99. while (fgets(buf, 128, fp) != NULL) {
  100. if (buf[0] == 'v' && buf[1] == ' ') {
  101. vec3 * vertex = new vec3();
  102. sscanf(buf, "v %f %f %f", &vertex->x, &vertex->y, &vertex->z);
  103. v->push_back(*vertex);
  104. }
  105. if (buf[0] == 'v' && buf[1] == 't') {
  106. vec3 * vertex = new vec3();
  107. sscanf(buf, "vt %f %f", &vertex->x, &vertex->y);
  108. t->push_back(*vertex);
  109. }
  110. if (buf[0] == 'v' && buf[1] == 'n') {
  111. vec3 * vertex = new vec3();
  112. sscanf(buf, "vn %f %f %f", &vertex->x, &vertex->y, &vertex->z);
  113. n->push_back(*vertex);
  114. }
  115. if (buf[0] == 'f' && buf[1] == ' ') {
  116. SFace * face = new SFace();
  117. sscanf(buf, "f %d/%d/%d %d/%d/%d %d/%d/%d",
  118. &face->v[0], &face->t[0], &face->n[0],
  119. &face->v[1], &face->t[1], &face->n[1],
  120. &face->v[2], &face->t[2], &face->n[2]
  121. );
  122. f->push_back(*face);
  123. }
  124. }
  125.  
  126. fclose(fp);
  127.  
  128. GLuint dlId;
  129. dlId = glGenLists(1);
  130. glNewList(dlId, GL_COMPILE);
  131. glBegin(GL_TRIANGLES);
  132. for (int i = 0; i < f->size(); ++i) {
  133. for (int j = 0; j < 3; ++j) {
  134. vec3 * cv = &(*v)[((*f)[i].v[j] - 1)];
  135. vec3 * ct = &(*t)[((*f)[i].t[j] - 1)];
  136. vec3 * cn = &(*n)[((*f)[i].n[j] - 1)];
  137. glTexCoord2f(ct->x, ct->y);
  138. glNormal3f(cn->x, cn->y, cn->z);
  139. glVertex3f(cv->x, cv->y, cv->z);
  140. }
  141. }
  142. glEnd();
  143. glEndList();
  144.  
  145. delete v;
  146. delete n;
  147. delete t;
  148. delete f;
  149.  
  150. return dlId;
  151.  
  152. }
  153.  
  154.  
  155.  
  156. // Funkcja, która odpowiada za załadowanie tekstur
  157. void LoadTextures() {
  158. cartexture = LoadTexture("Resources\\carmap.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
  159. trasatextura = LoadTexture("Resources\\trasa.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
  160. GrassTexture = LoadTexture("Resources\\Grass.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
  161. SkyTexture = LoadTexture("Resources\\Skydome.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
  162.  
  163. }
  164.  
  165.  
  166.  
  167. void LoadModels()
  168. {
  169. car = LoadObj("Resources\\car.obj");
  170. trasa = LoadObj("Resources\\trasa.obj");
  171. }
  172.  
  173.  
  174.  
  175.  
  176. int main(int argc, char* argv[])
  177. {
  178. glutInit(&argc, argv);
  179.  
  180. glutInitWindowPosition(100, 100);
  181. glutInitWindowSize(640, 360);
  182. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
  183.  
  184. glutCreateWindow("wyscig");
  185.  
  186. glutDisplayFunc(OnRender);
  187. glutReshapeFunc(OnReshape);
  188. glutKeyboardFunc(OnKeyPress);
  189. glutKeyboardUpFunc(OnKeyUp);
  190. glutPassiveMotionFunc(OnMouseMove);
  191. glutMotionFunc(OnMouseMove);
  192. glutTimerFunc(17, OnTimer, 0);
  193.  
  194. glEnable(GL_DEPTH_TEST);
  195.  
  196. glEnable(GL_CULL_FACE);
  197. glCullFace(GL_BACK);
  198. glFrontFace(GL_CCW);
  199.  
  200. glEnable(GL_LIGHTING);
  201. glEnable(GL_LIGHT0);
  202. glEnable(GL_LIGHT1);
  203.  
  204. float gl_amb[] = { 0.0f, 0.0f, 0.0f, 1.0f };
  205. glLightModelfv(GL_LIGHT_MODEL_AMBIENT, gl_amb);
  206.  
  207. player.pos.x = 0.0f;
  208. player.pos.y = 1.0f;
  209. player.pos.z = 4.0f;
  210.  
  211. player.dir.x = 0.0f;
  212. player.dir.y = 0.0f;
  213. player.dir.z = -1.0f;
  214.  
  215. player.speed = .4f;
  216.  
  217. glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
  218. mouseX = glutGet(GLUT_WINDOW_WIDTH) / 2;
  219. mouseY = glutGet(GLUT_WINDOW_HEIGHT) / 2;
  220. glutSetCursor(GLUT_CURSOR_NONE);
  221.  
  222.  
  223. LoadTextures(); // Każdą teksturę ładujemy *raz* (nie w każdej klatce!), np. przed wejściem do pętli głównej
  224. LoadModels();
  225.  
  226.  
  227. glutMainLoop();
  228.  
  229. return 0;
  230. }
  231.  
  232. #pragma region Obsluga wejscia
  233.  
  234. bool keystate[255];
  235.  
  236. void OnKeyPress(unsigned char key, int x, int y) {
  237. if (!keystate[key]) {
  238. keystate[key] = true;
  239. OnKeyDown(key, x, y);
  240. }
  241. }
  242.  
  243. void OnKeyDown(unsigned char key, int x, int y) {
  244. if (key == 27) {
  245. glutLeaveMainLoop();
  246. }
  247. if (key == 'm' || key == 'M') {
  248. if (captureMouse) {
  249. captureMouse = false;
  250. glutSetCursor(GLUT_CURSOR_LEFT_ARROW);
  251. }
  252. else {
  253. captureMouse = true;
  254. glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
  255. glutSetCursor(GLUT_CURSOR_NONE);
  256. }
  257. }
  258. if (key == 'l' || key == 'L') {
  259. free3DMovement = !free3DMovement;
  260. }
  261. }
  262.  
  263. void OnKeyUp(unsigned char key, int x, int y) {
  264. keystate[key] = false;
  265. }
  266.  
  267. void OnMouseMove(int x, int y) {
  268. mouseX = x;
  269. mouseY = y;
  270. }
  271.  
  272. #pragma endregion
  273.  
  274. void OnTimer(int id) {
  275.  
  276. glutTimerFunc(17, OnTimer, 0);
  277.  
  278. #pragma region Ruch kamery
  279.  
  280. if (captureMouse) {
  281. player.velRY = -mouseSensitivity * (glutGet(GLUT_WINDOW_WIDTH) / 2 - mouseX);
  282. player.velRX = mouseSensitivity * (glutGet(GLUT_WINDOW_HEIGHT) / 2 - mouseY);
  283. glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
  284. }
  285.  
  286. if (keystate['w']) {
  287. player.velM = player.speed*2;
  288. }
  289. if (keystate['s']) {
  290. player.velM = -player.speed*2;
  291. }
  292. if (keystate['a']) {
  293. player.velS = -player.speed*2;
  294. }
  295. if (keystate['d']) {
  296. player.velS = player.speed*2;
  297. }
  298. if (keystate['q']) {
  299. player.velRY = -player.speed*2;
  300. }
  301. if (keystate['e']) {
  302. player.velRY = player.speed*2;
  303. }
  304. if (keystate['f']) {
  305. player.velRX = -player.speed*2;
  306. }
  307. if (keystate['c']) {
  308. player.velRX = player.speed*2;
  309. }
  310.  
  311. float T = acos(player.dir.y);
  312. float G = atan2(player.dir.z, player.dir.x);
  313. T -= player.velRX * .03f;
  314. G += player.velRY * .03f;
  315. player.dir.x = sin(T) * cos(G);
  316. player.dir.y = cos(T);
  317. player.dir.z = sin(T) * sin(G);
  318.  
  319. vec3 per;
  320. per.x = -player.dir.z;
  321. per.y = 0;
  322. per.z = player.dir.x;
  323.  
  324. player.pos.x += player.dir.x * player.velM * .1f;
  325. if (free3DMovement) {
  326. player.pos.y += player.dir.y * player.velM * .1f;
  327. }
  328. else {
  329. player.pos.y = 1.0f;
  330. }
  331. player.pos.z += player.dir.z * player.velM * .1f;
  332.  
  333. player.pos.x += per.x * player.velS * .1f;
  334. if (free3DMovement) {
  335. player.pos.y += player.dir.y * player.velM * .1f;
  336. }
  337. else {
  338. player.pos.y = 1.0f;
  339. }
  340. player.pos.z += per.z * player.velS * .1f;
  341.  
  342. player.velRX /= 1.2;
  343. player.velRY /= 1.2;
  344. player.velM /= 1.2;
  345. player.velS /= 1.2;
  346.  
  347. #pragma endregion
  348. }
  349.  
  350. void OnRender() {
  351.  
  352. T = glutGet(GLUT_ELAPSED_TIME);
  353.  
  354. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  355. glMatrixMode(GL_MODELVIEW);
  356. glLoadIdentity();
  357.  
  358. /*gluLookAt(
  359. player.pos.x, player.pos.y, player.pos.z,
  360. player.pos.x + player.dir.x, player.pos.y + player.dir.y, player.pos.z + player.dir.z,
  361. 0.0f, 1.0f, 0.0f
  362. );
  363. */
  364.  
  365.  
  366. gluLookAt(
  367. player.pos.x + 0, player.pos.y + 4, player.pos.z + 4, // Pozycja kamery
  368. player.pos.x, player.pos.y, player.pos.z, // Punkt na ktory patrzy kamera (pozycja + kierunek)
  369. 0.0f, 0.5f, 0.0f // Wektor wyznaczajacy pion
  370. );
  371.  
  372.  
  373.  
  374. #pragma region Swiatlo
  375.  
  376. float l0_amb[] = { 0.2f, 0.2f, 0.2f, 1.0f };
  377. float l0_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  378. float l0_spe[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  379. float l0_pos[] = { 1.0f, 5.0f, 4.0f, 1.0f };
  380. glLightfv(GL_LIGHT0, GL_AMBIENT, l0_amb);
  381. glLightfv(GL_LIGHT0, GL_DIFFUSE, l0_dif);
  382. glLightfv(GL_LIGHT0, GL_SPECULAR, l0_spe);
  383. glLightfv(GL_LIGHT0, GL_POSITION, l0_pos);
  384.  
  385. #pragma endregion
  386.  
  387. #pragma region Rysowanie scian
  388.  
  389.  
  390.  
  391.  
  392. #pragma region Podloga
  393. {
  394.  
  395. glBindTexture(GL_TEXTURE_2D, GrassTexture);
  396. glPushMatrix();
  397.  
  398. glTranslatef(0.0f, 0.0f, 0.0f);
  399.  
  400. glBegin(GL_QUADS);
  401.  
  402. float m_amb[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  403. float m_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  404. float m_spe[] = { 0.0f, 0.0f, 0.0f, 1.0f };
  405. glMaterialfv(GL_FRONT, GL_AMBIENT, m_amb);
  406. glMaterialfv(GL_FRONT, GL_DIFFUSE, m_dif);
  407. glMaterialfv(GL_FRONT, GL_SPECULAR, m_spe);
  408.  
  409. glTexCoord2f(0.0f, 0.0f);
  410. glNormal3f(0.0f, 1.0f, 0.0f);
  411. glVertex3f(-2.0f, 0.0f, -14.0f);
  412.  
  413. glTexCoord2f(0.0f, 1.0f);
  414. glNormal3f(0.0f, 1.0f, 0.0f);
  415. glVertex3f(-2.0f, 0.0f, 5.0f);
  416.  
  417. glTexCoord2f(1.0f, 1.0f);
  418. glNormal3f(0.0f, 1.0f, 0.0f);
  419. glVertex3f(2.0f, 0.0f, 5.0f);
  420.  
  421. glTexCoord2f(1.0f, 0.0f);
  422. glNormal3f(0.0f, 1.0f, 0.0f);
  423. glVertex3f(2.0f, 0.0f, -14.0f);
  424. }
  425. #pragma endregion
  426.  
  427.  
  428. /*
  429.  
  430. #pragma region niebo
  431.  
  432. int Np = 36;
  433. float radius = 20.0f;
  434.  
  435. glEnable(GL_TEXTURE_2D);
  436. glBindTexture(GL_TEXTURE_2D, SkyTexture);
  437.  
  438. glNewList(displayListId, GL_COMPILE);
  439. glBegin(GL_QUAD_STRIP);
  440. for (int j = -1; j < Np / 2; ++j) {
  441. for (int i = 0; i <= Np; ++i) {
  442.  
  443. float t1 = PI * j / Np - PI / 2;
  444. float t2 = PI * (j + 1) / Np - PI / 2;
  445. float p = PI * 2.0f * i / Np;
  446.  
  447. float tx1 = sin(t1) * cos(p);
  448. float tx2 = sin(t2) * cos(p);
  449. float tz1 = sin(t1) * sin(p);
  450. float tz2 = sin(t2) * sin(p);
  451. float ty1 = cos(t1);
  452. float ty2 = cos(t2);
  453.  
  454. float tr1 = -sin(t1);
  455. float tr2 = -sin(t2);
  456.  
  457. float x1 = radius * tx1;
  458. float x2 = radius * tx2;
  459. float z1 = radius * tz1;
  460. float z2 = radius * tz2;
  461. float y1 = radius * ty1;
  462. float y2 = radius * ty2;
  463.  
  464. glTexCoord2f(.5f + .5f * tr2 * tx2, .5f + .5f * tr2 * tz2);
  465. glNormal3f(x2, y2, z2);
  466. glVertex3f(x2, y2, z2);
  467.  
  468. glTexCoord2f(.5f + .5f * tr1 * tx1, .5f + .5f * tr1 * tz1);
  469. glNormal3f(x1, y1, z1);
  470. glVertex3f(x1, y1, z1);
  471.  
  472. }
  473. }
  474.  
  475.  
  476. #pragma endregion
  477. */
  478. /*
  479. #pragma region ziemia
  480.  
  481. float size = 8.0f;
  482. glBindTexture(GL_TEXTURE_2D, GrassTexture);
  483. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  484.  
  485. glCallList(displayListId);
  486.  
  487. glDisable(GL_TEXTURE_2D);
  488.  
  489. glTexCoord2f(size, 0.0f);
  490. glVertex3f(size, 0.0f, -size);
  491.  
  492.  
  493. glTexCoord2f(0.0f, 0.0f);
  494. glVertex3f(-size, 0.0f, -size);
  495.  
  496.  
  497. glTexCoord2f(0.0f, size);
  498. glVertex3f(-size, 0.0f, size);
  499.  
  500.  
  501. glTexCoord2f(size, size);
  502. glVertex3f(size, 0.0f, size);
  503.  
  504. #pragma endregion
  505. */
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513. glEnd();
  514.  
  515. #pragma endregion
  516.  
  517. #pragma region Rysowanie oteksturowanych quadów
  518.  
  519. // Włączamy teksturowanie
  520. glEnable(GL_TEXTURE_2D);
  521.  
  522. // Ustawienie sposobu teksturowania - GL_MODULATE sprawia, że światło ma wpływ na teksturę; GL_DECAL i GL_REPLACE rysują teksturę tak jak jest
  523. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  524.  
  525. // Ustawienie materiału
  526. float m_amb[] = { 0.7f, 0.7f, 0.7f, 1.0f };
  527. float m_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  528. float m_spe[] = { 0.0f, 0.0f, 0.0f, 1.0f };
  529. glMaterialfv(GL_FRONT, GL_AMBIENT, m_amb);
  530. glMaterialfv(GL_FRONT, GL_DIFFUSE, m_dif);
  531. glMaterialfv(GL_FRONT, GL_SPECULAR, m_spe);
  532.  
  533. // Kąt obrotu quadów
  534. //float rot = T / 50.0f;
  535. //float rot = 0.0f;
  536.  
  537. #pragma region car
  538. //TUTAJ rysuje swoj obiekt
  539. glPushMatrix();
  540. glBindTexture(GL_TEXTURE_2D, cartexture);
  541. glTranslatef(player.pos.x, player.pos.y, player.pos.z);
  542. //glScalef(0.5, 0.5, 0.5);
  543. //glRotatef(270, 0, 0, 0);
  544. glCallList(car);
  545. glPopMatrix();
  546. #pragma endregion
  547.  
  548.  
  549.  
  550.  
  551.  
  552. /*
  553.  
  554. #pragma region trasa
  555.  
  556. glPushMatrix();
  557. glBindTexture(GL_TEXTURE_2D, trasatextura);
  558. glTranslatef(0.0, -5.0, 0.0);
  559. glScalef(20.0, 20.0, 20.0);
  560. //glRotatef(270, 0, 0, 0);
  561. glCallList(trasa);
  562. glPopMatrix();
  563.  
  564.  
  565. #pragma endregion
  566. */
  567.  
  568.  
  569.  
  570.  
  571.  
  572. /*#pragma region nearest
  573.  
  574. // Wybór tekstury korzystając z jej id
  575. glBindTexture(GL_TEXTURE_2D, texCheckboard_nearest);
  576.  
  577. glPushMatrix();
  578. glScalef(.5f, .5f, .5f);
  579. glTranslatef(-4.5f, 2.0f, 3.0f);
  580. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  581.  
  582. glBegin(GL_QUADS);
  583.  
  584. glTexCoord2f( 0.0f, 1.0f);
  585. glNormal3f( 0.0f, 0.0f, 1.0f);
  586. glVertex3f(-1.0f, 1.0f, 0.0f);
  587.  
  588. glTexCoord2f( 0.0f, 0.0f);
  589. glNormal3f( 0.0f, 0.0f, 1.0f);
  590. glVertex3f(-1.0f, -1.0f, 0.0f);
  591.  
  592. glTexCoord2f( 1.0f, 0.0f);
  593. glNormal3f( 0.0f, 0.0f, 1.0f);
  594. glVertex3f( 1.0f, -1.0f, 0.0f);
  595.  
  596. glTexCoord2f( 1.0f, 1.0f);
  597. glNormal3f( 0.0f, 0.0f, 1.0f);
  598. glVertex3f( 1.0f, 1.0f, 0.0f);
  599.  
  600.  
  601. glTexCoord2f( 0.0f, 0.0f);
  602. glNormal3f( 0.0f, 0.0f, -1.0f);
  603. glVertex3f(-1.0f, -1.0f, 0.0f);
  604.  
  605. glTexCoord2f( 0.0f, 1.0f);
  606. glNormal3f( 0.0f, 0.0f, -1.0f);
  607. glVertex3f(-1.0f, 1.0f, 0.0f);
  608.  
  609. glTexCoord2f( 1.0f, 1.0f);
  610. glNormal3f( 0.0f, 0.0f, -1.0f);
  611. glVertex3f( 1.0f, 1.0f, 0.0f);
  612.  
  613. glTexCoord2f( 1.0f, 0.0f);
  614. glNormal3f( 0.0f, 0.0f, -1.0f);
  615. glVertex3f( 1.0f, -1.0f, 0.0f);
  616.  
  617. glEnd();
  618.  
  619. glPopMatrix();
  620.  
  621. #pragma endregion
  622.  
  623. #pragma region linear
  624.  
  625. // Wybór tekstury korzystając z jej id
  626. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear);
  627.  
  628. glPushMatrix();
  629. glScalef(.5f, .5f, .5f);
  630. glTranslatef(-1.5f, 2.0f, 3.0f);
  631. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  632.  
  633. glBegin(GL_QUADS);
  634.  
  635. glTexCoord2f( 0.0f, 1.0f);
  636. glNormal3f( 0.0f, 0.0f, 1.0f);
  637. glVertex3f(-1.0f, 1.0f, 0.0f);
  638.  
  639. glTexCoord2f( 0.0f, 0.0f);
  640. glNormal3f( 0.0f, 0.0f, 1.0f);
  641. glVertex3f(-1.0f, -1.0f, 0.0f);
  642.  
  643. glTexCoord2f( 1.0f, 0.0f);
  644. glNormal3f( 0.0f, 0.0f, 1.0f);
  645. glVertex3f( 1.0f, -1.0f, 0.0f);
  646.  
  647. glTexCoord2f( 1.0f, 1.0f);
  648. glNormal3f( 0.0f, 0.0f, 1.0f);
  649. glVertex3f( 1.0f, 1.0f, 0.0f);
  650.  
  651.  
  652. glTexCoord2f( 0.0f, 0.0f);
  653. glNormal3f( 0.0f, 0.0f, -1.0f);
  654. glVertex3f(-1.0f, -1.0f, 0.0f);
  655.  
  656. glTexCoord2f( 0.0f, 1.0f);
  657. glNormal3f( 0.0f, 0.0f, -1.0f);
  658. glVertex3f(-1.0f, 1.0f, 0.0f);
  659.  
  660. glTexCoord2f( 1.0f, 1.0f);
  661. glNormal3f( 0.0f, 0.0f, -1.0f);
  662. glVertex3f( 1.0f, 1.0f, 0.0f);
  663.  
  664. glTexCoord2f( 1.0f, 0.0f);
  665. glNormal3f( 0.0f, 0.0f, -1.0f);
  666. glVertex3f( 1.0f, -1.0f, 0.0f);
  667.  
  668. glEnd();
  669.  
  670. glPopMatrix();
  671.  
  672. #pragma endregion
  673.  
  674. #pragma region linear_mm
  675.  
  676. // Wybór tekstury korzystając z jej id
  677. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm);
  678.  
  679. glPushMatrix();
  680. glScalef(.5f, .5f, .5f);
  681. glTranslatef(1.5f, 2.0f, 3.0f);
  682. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  683.  
  684. glBegin(GL_QUADS);
  685.  
  686. glTexCoord2f( 0.0f, 1.0f);
  687. glNormal3f( 0.0f, 0.0f, 1.0f);
  688. glVertex3f(-1.0f, 1.0f, 0.0f);
  689.  
  690. glTexCoord2f( 0.0f, 0.0f);
  691. glNormal3f( 0.0f, 0.0f, 1.0f);
  692. glVertex3f(-1.0f, -1.0f, 0.0f);
  693.  
  694. glTexCoord2f( 1.0f, 0.0f);
  695. glNormal3f( 0.0f, 0.0f, 1.0f);
  696. glVertex3f( 1.0f, -1.0f, 0.0f);
  697.  
  698. glTexCoord2f( 1.0f, 1.0f);
  699. glNormal3f( 0.0f, 0.0f, 1.0f);
  700. glVertex3f( 1.0f, 1.0f, 0.0f);
  701.  
  702.  
  703. glTexCoord2f( 0.0f, 0.0f);
  704. glNormal3f( 0.0f, 0.0f, -1.0f);
  705. glVertex3f(-1.0f, -1.0f, 0.0f);
  706.  
  707. glTexCoord2f( 0.0f, 1.0f);
  708. glNormal3f( 0.0f, 0.0f, -1.0f);
  709. glVertex3f(-1.0f, 1.0f, 0.0f);
  710.  
  711. glTexCoord2f( 1.0f, 1.0f);
  712. glNormal3f( 0.0f, 0.0f, -1.0f);
  713. glVertex3f( 1.0f, 1.0f, 0.0f);
  714.  
  715. glTexCoord2f( 1.0f, 0.0f);
  716. glNormal3f( 0.0f, 0.0f, -1.0f);
  717. glVertex3f( 1.0f, -1.0f, 0.0f);
  718.  
  719. glEnd();
  720.  
  721. glPopMatrix();
  722.  
  723. #pragma endregion
  724.  
  725. #pragma region linear_mm_linear
  726.  
  727. // Wybór tekstury korzystając z jej id
  728. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm_linear);
  729.  
  730. glPushMatrix();
  731. glScalef(.5f, .5f, .5f);
  732. glTranslatef(4.5f, 2.0f, 3.0f);
  733. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  734.  
  735. glBegin(GL_QUADS);
  736.  
  737. glTexCoord2f( 0.0f, 1.0f);
  738. glNormal3f( 0.0f, 0.0f, 1.0f);
  739. glVertex3f(-1.0f, 1.0f, 0.0f);
  740.  
  741. glTexCoord2f( 0.0f, 0.0f);
  742. glNormal3f( 0.0f, 0.0f, 1.0f);
  743. glVertex3f(-1.0f, -1.0f, 0.0f);
  744.  
  745. glTexCoord2f( 1.0f, 0.0f);
  746. glNormal3f( 0.0f, 0.0f, 1.0f);
  747. glVertex3f( 1.0f, -1.0f, 0.0f);
  748.  
  749. glTexCoord2f( 1.0f, 1.0f);
  750. glNormal3f( 0.0f, 0.0f, 1.0f);
  751. glVertex3f( 1.0f, 1.0f, 0.0f);
  752.  
  753.  
  754. glTexCoord2f( 0.0f, 0.0f);
  755. glNormal3f( 0.0f, 0.0f, -1.0f);
  756. glVertex3f(-1.0f, -1.0f, 0.0f);
  757.  
  758. glTexCoord2f( 0.0f, 1.0f);
  759. glNormal3f( 0.0f, 0.0f, -1.0f);
  760. glVertex3f(-1.0f, 1.0f, 0.0f);
  761.  
  762. glTexCoord2f( 1.0f, 1.0f);
  763. glNormal3f( 0.0f, 0.0f, -1.0f);
  764. glVertex3f( 1.0f, 1.0f, 0.0f);
  765.  
  766. glTexCoord2f( 1.0f, 0.0f);
  767. glNormal3f( 0.0f, 0.0f, -1.0f);
  768. glVertex3f( 1.0f, -1.0f, 0.0f);
  769.  
  770. glEnd();
  771.  
  772. glPopMatrix();
  773.  
  774. #pragma endregion
  775.  
  776. #pragma region nearest x10
  777.  
  778. // Wybór tekstury korzystając z jej id
  779. glBindTexture(GL_TEXTURE_2D, texCheckboard_nearest);
  780.  
  781. glPushMatrix();
  782. glScalef(.5f, .5f, .5f);
  783. glTranslatef(-4.5f, 2.0f, -3.0f);
  784. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  785.  
  786. glBegin(GL_QUADS);
  787.  
  788. glTexCoord2f( 0.0f, 10.0f);
  789. glNormal3f( 0.0f, 0.0f, 1.0f);
  790. glVertex3f(-1.0f, 1.0f, 0.0f);
  791.  
  792. glTexCoord2f( 0.0f, 0.0f);
  793. glNormal3f( 0.0f, 0.0f, 1.0f);
  794. glVertex3f(-1.0f, -1.0f, 0.0f);
  795.  
  796. glTexCoord2f(10.0f, 0.0f);
  797. glNormal3f( 0.0f, 0.0f, 1.0f);
  798. glVertex3f( 1.0f, -1.0f, 0.0f);
  799.  
  800. glTexCoord2f(10.0f, 10.0f);
  801. glNormal3f( 0.0f, 0.0f, 1.0f);
  802. glVertex3f( 1.0f, 1.0f, 0.0f);
  803.  
  804.  
  805. glTexCoord2f( 0.0f, 0.0f);
  806. glNormal3f( 0.0f, 0.0f, -1.0f);
  807. glVertex3f(-1.0f, -1.0f, 0.0f);
  808.  
  809. glTexCoord2f( 0.0f, 10.0f);
  810. glNormal3f( 0.0f, 0.0f, -1.0f);
  811. glVertex3f(-1.0f, 1.0f, 0.0f);
  812.  
  813. glTexCoord2f(10.0f, 10.0f);
  814. glNormal3f( 0.0f, 0.0f, -1.0f);
  815. glVertex3f( 1.0f, 1.0f, 0.0f);
  816.  
  817. glTexCoord2f(10.0f, 0.0f);
  818. glNormal3f( 0.0f, 0.0f, -1.0f);
  819. glVertex3f( 1.0f, -1.0f, 0.0f);
  820.  
  821. glEnd();
  822.  
  823. glPopMatrix();
  824.  
  825. #pragma endregion
  826.  
  827. #pragma region linear x10
  828.  
  829. // Wybór tekstury korzystając z jej id
  830. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear);
  831.  
  832. glPushMatrix();
  833. glScalef(.5f, .5f, .5f);
  834. glTranslatef(-1.5f, 2.0f, -3.0f);
  835. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  836.  
  837. glBegin(GL_QUADS);
  838.  
  839. glTexCoord2f( 0.0f, 10.0f);
  840. glNormal3f( 0.0f, 0.0f, 1.0f);
  841. glVertex3f(-1.0f, 1.0f, 0.0f);
  842.  
  843. glTexCoord2f( 0.0f, 0.0f);
  844. glNormal3f( 0.0f, 0.0f, 1.0f);
  845. glVertex3f(-1.0f, -1.0f, 0.0f);
  846.  
  847. glTexCoord2f(10.0f, 0.0f);
  848. glNormal3f( 0.0f, 0.0f, 1.0f);
  849. glVertex3f( 1.0f, -1.0f, 0.0f);
  850.  
  851. glTexCoord2f(10.0f, 10.0f);
  852. glNormal3f( 0.0f, 0.0f, 1.0f);
  853. glVertex3f( 1.0f, 1.0f, 0.0f);
  854.  
  855.  
  856. glTexCoord2f( 0.0f, 0.0f);
  857. glNormal3f( 0.0f, 0.0f, -1.0f);
  858. glVertex3f(-1.0f, -1.0f, 0.0f);
  859.  
  860. glTexCoord2f( 0.0f, 10.0f);
  861. glNormal3f( 0.0f, 0.0f, -1.0f);
  862. glVertex3f(-1.0f, 1.0f, 0.0f);
  863.  
  864. glTexCoord2f(10.0f, 10.0f);
  865. glNormal3f( 0.0f, 0.0f, -1.0f);
  866. glVertex3f( 1.0f, 1.0f, 0.0f);
  867.  
  868. glTexCoord2f(10.0f, 0.0f);
  869. glNormal3f( 0.0f, 0.0f, -1.0f);
  870. glVertex3f( 1.0f, -1.0f, 0.0f);
  871.  
  872. glEnd();
  873.  
  874. glPopMatrix();
  875.  
  876. #pragma endregion
  877.  
  878. #pragma region linear_mm x10
  879.  
  880. // Wybór tekstury korzystając z jej id
  881. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm);
  882.  
  883. glPushMatrix();
  884. glScalef(.5f, .5f, .5f);
  885. glTranslatef(1.5f, 2.0f, -3.0f);
  886. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  887.  
  888. glBegin(GL_QUADS);
  889.  
  890. glTexCoord2f( 0.0f, 10.0f);
  891. glNormal3f( 0.0f, 0.0f, 1.0f);
  892. glVertex3f(-1.0f, 1.0f, 0.0f);
  893.  
  894. glTexCoord2f( 0.0f, 0.0f);
  895. glNormal3f( 0.0f, 0.0f, 1.0f);
  896. glVertex3f(-1.0f, -1.0f, 0.0f);
  897.  
  898. glTexCoord2f(10.0f, 0.0f);
  899. glNormal3f( 0.0f, 0.0f, 1.0f);
  900. glVertex3f( 1.0f, -1.0f, 0.0f);
  901.  
  902. glTexCoord2f(10.0f, 10.0f);
  903. glNormal3f( 0.0f, 0.0f, 1.0f);
  904. glVertex3f( 1.0f, 1.0f, 0.0f);
  905.  
  906.  
  907. glTexCoord2f( 0.0f, 0.0f);
  908. glNormal3f( 0.0f, 0.0f, -1.0f);
  909. glVertex3f(-1.0f, -1.0f, 0.0f);
  910.  
  911. glTexCoord2f( 0.0f, 10.0f);
  912. glNormal3f( 0.0f, 0.0f, -1.0f);
  913. glVertex3f(-1.0f, 1.0f, 0.0f);
  914.  
  915. glTexCoord2f(10.0f, 10.0f);
  916. glNormal3f( 0.0f, 0.0f, -1.0f);
  917. glVertex3f( 1.0f, 1.0f, 0.0f);
  918.  
  919. glTexCoord2f(10.0f, 0.0f);
  920. glNormal3f( 0.0f, 0.0f, -1.0f);
  921. glVertex3f( 1.0f, -1.0f, 0.0f);
  922.  
  923. glEnd();
  924.  
  925. glPopMatrix();
  926.  
  927. #pragma endregion
  928.  
  929. #pragma region linear_mm_linear x10
  930.  
  931. // Wybór tekstury korzystając z jej id
  932. glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm_linear);
  933.  
  934. glPushMatrix();
  935. glScalef(.5f, .5f, .5f);
  936. glTranslatef(4.5f, 2.0f, -3.0f);
  937. glRotatef(rot, 0.0f, 1.0f, 0.0f);
  938.  
  939. glBegin(GL_QUADS);
  940.  
  941. glTexCoord2f( 0.0f, 10.0f);
  942. glNormal3f( 0.0f, 0.0f, 1.0f);
  943. glVertex3f(-1.0f, 1.0f, 0.0f);
  944.  
  945. glTexCoord2f( 0.0f, 0.0f);
  946. glNormal3f( 0.0f, 0.0f, 1.0f);
  947. glVertex3f(-1.0f, -1.0f, 0.0f);
  948.  
  949. glTexCoord2f(10.0f, 0.0f);
  950. glNormal3f( 0.0f, 0.0f, 1.0f);
  951. glVertex3f( 1.0f, -1.0f, 0.0f);
  952.  
  953. glTexCoord2f(10.0f, 10.0f);
  954. glNormal3f( 0.0f, 0.0f, 1.0f);
  955. glVertex3f( 1.0f, 1.0f, 0.0f);
  956.  
  957.  
  958. glTexCoord2f( 0.0f, 0.0f);
  959. glNormal3f( 0.0f, 0.0f, -1.0f);
  960. glVertex3f(-1.0f, -1.0f, 0.0f);
  961.  
  962. glTexCoord2f( 0.0f, 10.0f);
  963. glNormal3f( 0.0f, 0.0f, -1.0f);
  964. glVertex3f(-1.0f, 1.0f, 0.0f);
  965.  
  966. glTexCoord2f(10.0f, 10.0f);
  967. glNormal3f( 0.0f, 0.0f, -1.0f);
  968. glVertex3f( 1.0f, 1.0f, 0.0f);
  969.  
  970. glTexCoord2f(10.0f, 0.0f);
  971. glNormal3f( 0.0f, 0.0f, -1.0f);
  972. glVertex3f( 1.0f, -1.0f, 0.0f);
  973.  
  974. glEnd();
  975.  
  976. glPopMatrix();
  977.  
  978. #pragma endregion*/
  979.  
  980. // Wyłączenie teksturowania - geometria renderowana od tego miejsca nie będzie już oteksturowana
  981. glDisable(GL_TEXTURE_2D);
  982.  
  983. #pragma endregion
  984.  
  985. glutSwapBuffers();
  986. glFlush();
  987. glutPostRedisplay();
  988.  
  989. }
  990.  
  991. void OnReshape(int width, int height) {
  992. glMatrixMode(GL_PROJECTION);
  993. glLoadIdentity();
  994. glViewport(0, 0, width, height);
  995. gluPerspective(60.0f, (float) width / height, .01f, 100.0f);
  996. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement