SHARE
TWEET

Untitled

a guest Jun 19th, 2017 43 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top