Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.83 KB | None | 0 0
  1. #ifndef FUNCTIONS_
  2. #define FUNCTIONS_
  3.  
  4. #include <windows.h>
  5. #include <GL/gl.h>
  6. #include "glut.h"
  7. #include "SOIL.h"
  8. #define _USE_MATH_DEFINES
  9. #include <cmath>
  10.  
  11. #include <iostream>
  12.  
  13. GLUquadricObj* myReusableQuadric = 0;
  14. GLuint kabina[20];
  15. GLuint maska[4];
  16. GLuint przycz[3];
  17.  
  18. void drawGluSlantCylinder(double height, double radiusBase, double radiusTop, int slices, int stacks)
  19. {
  20.     if (!myReusableQuadric) {
  21.         myReusableQuadric = gluNewQuadric();
  22.         // Should (but don't) check if pointer is still null --- to catch memory allocation errors.
  23.  
  24.         gluQuadricNormals(myReusableQuadric, GL_FLAT);
  25.         gluQuadricTexture(myReusableQuadric, GL_TRUE);
  26.     }
  27.     // Draw the cylinder.
  28.  
  29.     glBindTexture(GL_TEXTURE_2D, kabina[0]);
  30.  
  31.     gluCylinder(myReusableQuadric, radiusBase, radiusTop, height, slices, stacks);
  32.  
  33. }
  34.  
  35. void drawGluCylinder(double height, double radius, int slices, int stacks) {
  36.     drawGluSlantCylinder(height, radius, radius, slices, stacks);
  37. }
  38.  
  39.  
  40. void drawGluSlantCylinderWithCaps(double height, double radiusBase, double radiusTop, int slices, int stacks)
  41. {
  42.  
  43.     drawGluSlantCylinder(height, radiusBase, radiusTop, slices, stacks);
  44.  
  45.     // Draw the top disk cap
  46.     glPushMatrix();
  47.     glTranslated(0.0, 0.0, height);
  48.     gluDisk(myReusableQuadric, 0.0, radiusTop, slices, stacks);
  49.     glPopMatrix();
  50.  
  51.     // Draw the bottom disk cap
  52.     glPushMatrix();
  53.  
  54.     glRotated(180.0, 1.0, 0.0, 0.0);
  55.     gluDisk(myReusableQuadric, 0.0, radiusBase, slices, stacks);
  56.  
  57.     glPopMatrix();
  58.  
  59. }
  60. void drawGluCylinderWithCaps(double height, double radius, int slices, int stacks) {
  61.     drawGluSlantCylinderWithCaps(height, radius, radius, slices, stacks);
  62. }
  63.  
  64. void mesh(int width, int height)
  65. {
  66.     glLineWidth(2);
  67.  
  68.     glBegin(GL_LINES);
  69.  
  70.     for (int i = 0; i <= width; ++i)
  71.     {
  72.         for (int j = 0; j < height; ++j)
  73.         {
  74.             glVertex3f(i, 0, j);
  75.             glVertex3f(i, 0, j + 1);
  76.         }
  77.     }
  78.  
  79.     for (int i = 0; i <= height; ++i)
  80.     {
  81.         for (int j = 0; j < width; ++j)
  82.         {
  83.             glVertex3f(j, 0, i);
  84.             glVertex3f(j + 1, 0, i);
  85.         }
  86.     }
  87.  
  88.     glEnd();
  89. }
  90.  
  91. float ver[8][3] =
  92. {
  93.     { -1.0, 2.0, 1.0 },
  94.     { -0.8, 3.5, 0.8 },
  95.     { 1.0, 3.5, 0.8 },
  96.     { 1.4, 2.0, 1.0 },
  97.     { -1.0, 2.0, -1.0 },
  98.     { -0.8, 3.5, -0.8 },
  99.     { 1.0, 3.5, -0.8 },
  100.     { 1.4, 2.0, -1.0 },
  101. };
  102.  
  103. float ver1[8][3] =
  104. {
  105.     { -1.0, 0.6, 1.0 },
  106.     { -1.0, 2.0, 1.0 },
  107.     { 1.4, 2.0, 1.0 },
  108.     { 1.4, 0.6, 1.0 },
  109.     { -1.0, 0.6, -1.0 },
  110.     { -1.0, 2.0, -1.0 },
  111.     { 1.4, 2.0, -1.0 },
  112.     { 1.4, 0.6, -1.0 },
  113. };
  114.  
  115. float ver2[8][3] =
  116. {
  117.     { 1.4, 0.6, 0.5 },
  118.     { 1.4, 2.0, 0.5 },
  119.     { 3.7, 2.0, 0.5 },
  120.     { 3.7, 0.6, 0.5 },
  121.     { 1.4, 0.6, -0.5 },
  122.     { 1.4, 2.0, -0.5 },
  123.     { 3.7, 2.0, -0.5 },
  124.     { 3.7, 0.6, -0.5 },
  125. };
  126.  
  127. float przyczepa[8][3] =
  128. {
  129.     { 0.0, 0.0, -1.5 },
  130.     { 0.0, 0.7, -1.5 },
  131.     {-4.0, 0.7, -1.5},
  132.     {-4.0, 0.0, -1.5},
  133.     {0.0, 0.0, 1.5},
  134.     {0.0, 0.7, 1.5},
  135.     { -4.0, 0.7, 1.5 },
  136.     {-4.0, 0.0, 1.5}
  137. };
  138.  
  139. /*glnormal3f!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
  140.  
  141. void quad(int a, int b, int c, int d, float (&ver1)[8][3], int texture)
  142. {
  143.     glDisable(GL_BLEND);
  144.     glBindTexture(GL_TEXTURE_2D, kabina[texture]);
  145.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  146.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  147.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  148.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  149.     glBegin(GL_QUADS);
  150.     glTexCoord2f(0, 1);
  151.     glVertex3fv(ver1[a]);
  152.     glTexCoord2f(1, 1);
  153.     glVertex3fv(ver1[b]);
  154.     glTexCoord2f(1, 0);
  155.     glVertex3fv(ver1[c]);
  156.     glTexCoord2f(0, 0);
  157.     glVertex3fv(ver1[d]);
  158.     glEnd();
  159. }
  160.  
  161. void colorcube()
  162. {
  163.     glPushMatrix();
  164.     glPushAttrib(GL_ENABLE_BIT);
  165.     glEnable(GL_TEXTURE_2D);
  166.     glEnable(GL_DEPTH_TEST);
  167.  
  168.     glDisable(GL_BLEND);
  169.  
  170.     quad(0, 3, 2, 1, ver,12);   //góra kabiny bok 1
  171.     quad(2, 3, 7, 6, ver,14);   // góra przód
  172.     quad(1, 2, 6, 5, ver,18);   // wierzch kabiny
  173.     quad(4, 5, 6, 7, ver,13);   //góra kabiny bok 2
  174.     quad(0, 1, 5, 4, ver,16);   //dół tył
  175.     quad(0, 3, 2, 1, ver1,10);  //dół kabiny bok 1
  176.     quad(2, 3, 7, 6, ver1,15);  //dół przód
  177.     quad(0, 4, 7, 3, ver1,17);  // spód kabiny
  178.     quad(4, 5, 6, 7, ver1,11);  // dół kabiny bok 2
  179.     quad(0, 1, 5, 4, ver1,17);  // doł tył
  180.     quad(0, 3, 2, 1, ver2,7);       //bokl
  181.     quad(2, 3, 7, 6, ver2,6);       //przod
  182.     quad(1, 2, 6, 5, ver2,9);       //wierzch
  183.     quad(4, 5, 6, 7, ver2,8);       //bokp
  184.     glDisable(GL_TEXTURE_2D);
  185.     glPopAttrib();
  186.     glPopMatrix();
  187. }
  188.  
  189.  
  190. void RysujDyszel()
  191. {
  192.     glPushMatrix();
  193.     //glTranslatef(-4.0, trailerWheelRadius, -(trailerWheelBase / 2 + trailerWheelWidth));
  194.     glTranslatef(0.0, 1.0, 0.0);
  195.     glRotatef(-90, 0.0, 1.0,0.0);
  196.     drawGluSlantCylinderWithCaps(5, 0.1, 0.1, 10, 10);
  197.     glPopMatrix();
  198. }
  199.  
  200. void rysujPrzyczepe()
  201. {
  202.     glPushMatrix();
  203.     glTranslatef(-1.5, 1.4, 0.0);
  204.     glPushAttrib(GL_ENABLE_BIT);
  205.     glEnable(GL_TEXTURE_2D);
  206.     glEnable(GL_DEPTH_TEST);
  207.     glEnable(GL_LIGHTING);
  208.  
  209.     glDisable(GL_BLEND);
  210.     quad(0, 3, 2, 1, przyczepa, 2);     //lewy bok
  211.     quad(2, 3, 7, 6, przyczepa, 3);     //tył
  212.     quad(0, 4, 7, 3, przyczepa, 0);   //dno
  213.     quad(4, 5, 6, 7, przyczepa, 5);     //prawy bok
  214.     quad(0, 1, 5, 4, przyczepa, 4);     //przod
  215.     glPopAttrib();
  216.     glPopMatrix();
  217. }
  218.  
  219.  
  220. void loadTextures()
  221. {
  222.     kabina[0] = SOIL_load_OGL_texture("img/szyba.jpg",
  223.         SOIL_LOAD_AUTO,
  224.         SOIL_CREATE_NEW_ID,
  225.         SOIL_FLAG_MIPMAPS |
  226.         SOIL_FLAG_INVERT_Y |
  227.         SOIL_FLAG_COMPRESS_TO_DXT);
  228.     kabina[1] = SOIL_load_OGL_texture("img/reszta.jpg",
  229.         SOIL_LOAD_AUTO,
  230.         SOIL_CREATE_NEW_ID,
  231.         SOIL_FLAG_MIPMAPS |
  232.         SOIL_FLAG_INVERT_Y |
  233.         SOIL_FLAG_COMPRESS_TO_DXT);
  234.     kabina[2] = SOIL_load_OGL_texture("img/przyczepa/bokp1.jpg",
  235.         SOIL_LOAD_AUTO,
  236.         SOIL_CREATE_NEW_ID,
  237.         SOIL_FLAG_MIPMAPS |
  238.         SOIL_FLAG_INVERT_Y |
  239.         SOIL_FLAG_COMPRESS_TO_DXT);
  240.     kabina[3] = SOIL_load_OGL_texture("img/przyczepa/frontp1.jpg",
  241.         SOIL_LOAD_AUTO,
  242.         SOIL_CREATE_NEW_ID,
  243.         SOIL_FLAG_MIPMAPS |
  244.         SOIL_FLAG_INVERT_Y |
  245.         SOIL_FLAG_COMPRESS_TO_DXT);
  246.     kabina[4] = SOIL_load_OGL_texture("img/przyczepa/frontp2.jpg",
  247.         SOIL_LOAD_AUTO,
  248.         SOIL_CREATE_NEW_ID,
  249.         SOIL_FLAG_MIPMAPS |
  250.         SOIL_FLAG_INVERT_Y |
  251.         SOIL_FLAG_COMPRESS_TO_DXT);
  252.     kabina[5] = SOIL_load_OGL_texture("img/przyczepa/bokp2.jpg",
  253.         SOIL_LOAD_AUTO,
  254.         SOIL_CREATE_NEW_ID,
  255.         SOIL_FLAG_MIPMAPS |
  256.         SOIL_FLAG_INVERT_Y |
  257.         SOIL_FLAG_COMPRESS_TO_DXT);
  258.     kabina[6] = SOIL_load_OGL_texture("img/trator/przod.jpg",
  259.         SOIL_LOAD_AUTO,
  260.         SOIL_CREATE_NEW_ID,
  261.         SOIL_FLAG_MIPMAPS |
  262.         SOIL_FLAG_INVERT_Y |
  263.         SOIL_FLAG_COMPRESS_TO_DXT);
  264.     kabina[7] = SOIL_load_OGL_texture("img/trator/bok1.jpg",
  265.         SOIL_LOAD_AUTO,
  266.         SOIL_CREATE_NEW_ID,
  267.         SOIL_FLAG_MIPMAPS |
  268.         SOIL_FLAG_INVERT_Y |
  269.         SOIL_FLAG_COMPRESS_TO_DXT);
  270.     kabina[8] = SOIL_load_OGL_texture("img/trator/bok.jpg",
  271.         SOIL_LOAD_AUTO,
  272.         SOIL_CREATE_NEW_ID,
  273.         SOIL_FLAG_MIPMAPS |
  274.         SOIL_FLAG_INVERT_Y |
  275.         SOIL_FLAG_COMPRESS_TO_DXT);
  276.     kabina[9] = SOIL_load_OGL_texture("img/trator/maska.jpg",
  277.         SOIL_LOAD_AUTO,
  278.         SOIL_CREATE_NEW_ID,
  279.         SOIL_FLAG_MIPMAPS |
  280.         SOIL_FLAG_INVERT_Y |
  281.         SOIL_FLAG_COMPRESS_TO_DXT);
  282.     kabina[10] = SOIL_load_OGL_texture("img/trator/kab1.jpg",
  283.         SOIL_LOAD_AUTO,
  284.         SOIL_CREATE_NEW_ID,
  285.         SOIL_FLAG_MIPMAPS |
  286.         SOIL_FLAG_INVERT_Y |
  287.         SOIL_FLAG_COMPRESS_TO_DXT);
  288.     kabina[11] = SOIL_load_OGL_texture("img/trator/kab2.jpg",
  289.         SOIL_LOAD_AUTO,
  290.         SOIL_CREATE_NEW_ID,
  291.         SOIL_FLAG_MIPMAPS |
  292.         SOIL_FLAG_INVERT_Y |
  293.         SOIL_FLAG_COMPRESS_TO_DXT);
  294.     kabina[12] = SOIL_load_OGL_texture("img/trator/kab3.jpg",
  295.         SOIL_LOAD_AUTO,
  296.         SOIL_CREATE_NEW_ID,
  297.         SOIL_FLAG_MIPMAPS |
  298.         SOIL_FLAG_INVERT_Y |
  299.         SOIL_FLAG_COMPRESS_TO_DXT);
  300.     kabina[13] = SOIL_load_OGL_texture("img/trator/kab4.jpg",
  301.         SOIL_LOAD_AUTO,
  302.         SOIL_CREATE_NEW_ID,
  303.         SOIL_FLAG_MIPMAPS |
  304.         SOIL_FLAG_INVERT_Y |
  305.         SOIL_FLAG_COMPRESS_TO_DXT);
  306.     kabina[14] = SOIL_load_OGL_texture("img/trator/kab5.jpg",
  307.         SOIL_LOAD_AUTO,
  308.         SOIL_CREATE_NEW_ID,
  309.         SOIL_FLAG_MIPMAPS |
  310.         SOIL_FLAG_INVERT_Y |
  311.         SOIL_FLAG_COMPRESS_TO_DXT);
  312.     kabina[15] = SOIL_load_OGL_texture("img/trator/kab6.jpg",
  313.         SOIL_LOAD_AUTO,
  314.         SOIL_CREATE_NEW_ID,
  315.         SOIL_FLAG_MIPMAPS |
  316.         SOIL_FLAG_INVERT_Y |
  317.         SOIL_FLAG_COMPRESS_TO_DXT);
  318.     kabina[16] = SOIL_load_OGL_texture("img/trator/kab7.jpg",
  319.         SOIL_LOAD_AUTO,
  320.         SOIL_CREATE_NEW_ID,
  321.         SOIL_FLAG_MIPMAPS |
  322.         SOIL_FLAG_INVERT_Y |
  323.         SOIL_FLAG_COMPRESS_TO_DXT);
  324.     kabina[17] = SOIL_load_OGL_texture("img/trator/kab8.jpg",
  325.         SOIL_LOAD_AUTO,
  326.         SOIL_CREATE_NEW_ID,
  327.         SOIL_FLAG_MIPMAPS |
  328.         SOIL_FLAG_INVERT_Y |
  329.         SOIL_FLAG_COMPRESS_TO_DXT);
  330. }
  331.  
  332.  
  333. void RysujOsie(float rozmiar)
  334. {
  335.     glBegin(GL_LINES);
  336.     glVertex3f(0, 0, 0); glVertex3f(rozmiar, 0, 0); //OX, w prawo
  337.     glVertex3f(0, 0, 0); glVertex3f(0, rozmiar, 0); //OY, do gory
  338.     glVertex3f(0, 0, 0); glVertex3f(0, 0, rozmiar); //OZ, do kamery
  339.     glEnd();
  340. }
  341.  
  342. void light()
  343. {
  344.     GLfloat mat_ambient[] = { 0.1, 0.1, 0.1, 1.0 };
  345.     GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  346.     GLfloat mat_specular[] = { 1, 1, 1, 1.0 };
  347.     GLfloat shininess = 40;
  348.     GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
  349.     GLfloat spot_cutoff = 90;
  350.     GLfloat spot_exponent = 50;
  351.     GLfloat attenuation_const = 0;
  352.     GLfloat attenuation_lin = 0.0;
  353.     GLfloat attenuation_quad = 0.005;
  354.     glEnable(GL_LIGHTING);
  355.     glEnable(GL_COLOR_MATERIAL);
  356.     glEnable(GL_LIGHT0);
  357.     glMaterialfv(GL_FRONT && GL_BACK, GL_AMBIENT, mat_ambient);
  358.     //glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
  359.     glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
  360.     glMaterialf(GL_FRONT, GL_SHININESS, shininess);
  361.     //glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, spot_cutoff);
  362.     //glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, spot_exponent);
  363.     //glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, attenuation_const);
  364.     //glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, attenuation_lin);
  365.     //glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, attenuation_quad);
  366.     glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient);
  367.  
  368.     //GLfloat light_red[4] = { 1.0, 0.0, 0.0, 1.0 };
  369.     //GLfloat reset[4] = { 0.0, 0.0, 0.0, 1.0 };
  370.     //GLfloat spot_direction[] = { 0.0, 0.0, 0.0, 0.0 };
  371.     GLfloat light_position[] = { 0.0, 10, 0.0, 1.0 };
  372.     glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  373.     //glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
  374.  
  375.     //this->moveLights();
  376. }
  377. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement