Advertisement
Guest User

blablbalablbal

a guest
May 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.46 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <stdlib.h>
  4.  
  5. #include <GL/glut.h>
  6. #include <GL/glext.h>
  7. #include "imageloader.h"
  8. #include "pathconfig.h"
  9. using namespace std;
  10.  
  11. void handleKeypress(unsigned char key, int x, int y)
  12. {
  13.     switch (key)
  14.     {
  15.     case 27: //Escape key
  16.         exit(0);
  17.     }
  18. }
  19. // pretvaramo sliku u teksturu, \return id texture
  20. GLuint loadTexture(Image* image)
  21. {
  22.     GLuint textureId;
  23.     glGenTextures(1, &textureId); //rezervirati mjesto za teksturu
  24.     glBindTexture(GL_TEXTURE_2D, textureId); //koju teksturu ce openGL editirati
  25.     // preslikavanje slike na teksturu
  26.     glTexImage2D(GL_TEXTURE_2D,                //uvijek GL_TEXTURE_2D
  27.                  0,                            // level mipmape - 0 za sada
  28.                  GL_RGB,                       // format koji opengl koristi za slikuFormat OpenGL uses for image
  29.                  image->width, image->height,  // mozda sirina i visina?
  30.                  0,                            //rub slike
  31.                  GL_RGB, //GL_RGB, jer su pikseli u tom formatu
  32.                  GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE,  jer su pikseli unsigned brojevi
  33.                  image->pixels);               // napokon podaci
  34.  
  35.     return textureId; //vracamo id teksture
  36. }
  37.  
  38. // pretvaramo sliku u mipmapu - teksturu, \return id texture
  39. GLuint loadMipmappedTexture(Image *image)
  40. {
  41.     // argumenti isti kao i kod loadTexture
  42.     GLuint textureId;
  43.     glGenTextures(1, &textureId);
  44.     glBindTexture(GL_TEXTURE_2D, textureId);
  45.  
  46.     gluBuild2DMipmaps(GL_TEXTURE_2D,
  47.                       GL_RGB,
  48.                       image->width, image->height,
  49.                       GL_RGB,
  50.                       GL_UNSIGNED_BYTE,
  51.                       image->pixels);
  52.     return textureId;
  53. }
  54.  
  55. GLuint _textureId1; // id teksture
  56. GLuint _textureId2; // id teksture
  57. GLuint _textureId3; // id teksture
  58. GLuint _textureId4; // id teksture
  59. GLuint _textureId5; // id teksture
  60. GLuint _textureId6; // id teksture
  61.  
  62. void initRendering()
  63. {
  64.     glEnable(GL_DEPTH_TEST);
  65.     glEnable(GL_LIGHTING);
  66.     glEnable(GL_LIGHT0);
  67.     glEnable(GL_NORMALIZE);
  68.     glEnable(GL_COLOR_MATERIAL);
  69.  
  70.     filePathBuilder fpath;
  71.     Image* image1 = loadBMP(fpath.filePath("checkerboard.bmp"));
  72.     _textureId1 = loadMipmappedTexture(image1);
  73.     delete image1;
  74.     Image* image2 = loadBMP(fpath.filePath("checkerboard.bmp"));
  75.     _textureId2 = loadMipmappedTexture(image2);
  76.     delete image2;
  77.     Image* image3 = loadBMP(fpath.filePath("checkerboard.bmp"));
  78.     _textureId3 = loadMipmappedTexture(image3);
  79.     delete image3;
  80.     Image* image4 = loadBMP(fpath.filePath("checkerboard.bmp"));
  81.     _textureId4 = loadMipmappedTexture(image4);
  82.     delete image4;
  83.     Image* image5 = loadBMP(fpath.filePath("checkerboard.bmp"));
  84.     _textureId5 = loadMipmappedTexture(image5);
  85.     delete image5;
  86.     Image* image6 = loadBMP(fpath.filePath("checkerboard.bmp"));
  87.     _textureId6 = loadMipmappedTexture(image6);
  88.     delete image6;
  89. }
  90.  
  91. void handleResize(int w, int h)
  92. {
  93.     glViewport(0, 0, w, h);
  94.     glMatrixMode(GL_PROJECTION);
  95.     glLoadIdentity();
  96.     gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
  97. }
  98.  
  99. const float BOX_SIZE = 7.0f;
  100.  
  101. void drawBox()
  102. {
  103.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  104.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  105.     glEnable(GL_TEXTURE_2D);
  106.     glBindTexture(GL_TEXTURE_2D, _textureId1);
  107.  
  108.     glBegin(GL_QUADS);
  109.     //Top face
  110.  
  111.  
  112.        glNormal3f(0.0, 1.0f, 0.0f);
  113.        glTexCoord2f(0.0f, 0.0f);
  114.        glVertex3f(-2.5f, -2.5f, 2.5f);
  115.        glTexCoord2f(1.0f, 0.0f);
  116.        glVertex3f(2.5f, -2.5f, 2.5f);
  117.        glTexCoord2f(1.0f, 1.0f);
  118.        glVertex3f(2.5f, -2.5f, -2.5f);
  119.        glTexCoord2f(0.0f, 1.0f);
  120.        glVertex3f(-2.5f, -2.5f, -2.5f);
  121.  
  122.        glEnd();
  123.  
  124.     glBindTexture(GL_TEXTURE_2D, _textureId2);
  125.     //Bottom face
  126.     //glColor3f(1.0f, 0.0f, 1.0f);
  127.     glNormal3f(0.0, -1.0f, 0.0f);
  128.     glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  129.     glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  130.     glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  131.     glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  132.     glBegin(GL_QUADS);
  133.  
  134.        glNormal3f(0.0, 1.0f, 0.0f);
  135.        glTexCoord2f(0.0f, 0.0f);
  136.        glVertex3f(-2.5f, -2.5f, 2.5f);
  137.        glTexCoord2f(1.0f, 0.0f);
  138.        glVertex3f(2.5f, -2.5f, 2.5f);
  139.        glTexCoord2f(1.0f, 1.0f);
  140.        glVertex3f(2.5f, -2.5f, -2.5f);
  141.        glTexCoord2f(0.0f, 1.0f);
  142.        glVertex3f(-2.5f, -2.5f, -2.5f);
  143.  
  144.        glEnd();
  145.  
  146.     glBindTexture(GL_TEXTURE_2D, _textureId3);
  147.     //Left face
  148.     glNormal3f(-1.0, 0.0f, 0.0f);
  149.    // glColor3f(0.0f, 1.0f, 1.0f);
  150.     glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  151.     glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  152.    // glColor3f(0.0f, 0.0f, 1.0f);
  153.     glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  154.     glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  155.  
  156.     glBindTexture(GL_TEXTURE_2D, _textureId4);
  157.     //Right face
  158.     glNormal3f(1.0, 0.0f, 0.0f);
  159.    // glColor3f(1.0f, 0.0f, 0.0f);
  160.     glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  161.     glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  162.  //   glColor3f(0.0f, 1.0f, 0.0f);
  163.     glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
  164.     glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
  165.     glEnd();
  166.  
  167.   //  glColor3f(1.0f, 1.0f, 1.0f);
  168.  
  169.     glBegin(GL_QUADS);
  170.     //Front face
  171.  
  172.        glNormal3f(0.0, 1.0f, 0.0f);
  173.        glTexCoord2f(0.0f, 0.0f);
  174.        glVertex3f(-2.5f, -2.5f, 2.5f);
  175.        glTexCoord2f(1.0f, 0.0f);
  176.        glVertex3f(2.5f, -2.5f, 2.5f);
  177.        glTexCoord2f(1.0f, 1.0f);
  178.        glVertex3f(2.5f, -2.5f, -2.5f);
  179.        glTexCoord2f(0.0f, 1.0f);
  180.        glVertex3f(-2.5f, -2.5f, -2.5f);
  181.  
  182.        glEnd();
  183.     glBindTexture(GL_TEXTURE_2D, _textureId6);
  184.     //Back face
  185.     glNormal3f(0.0, 0.0f, -1.0f);
  186.     glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  187.     glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  188.     glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
  189.     glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
  190.     glEnd();
  191. }
  192.  
  193. void drawScene()
  194. {
  195.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  196.  
  197.     glMatrixMode(GL_MODELVIEW);
  198.     glLoadIdentity();
  199.  
  200.     gluLookAt(-2, 10, -17,
  201.               0, 0, 0,
  202.               0, 1, 0);
  203.  
  204.     //glEnable(GL_TEXTURE_2D);
  205.     //glBindTexture(GL_TEXTURE_2D, _textureId);
  206.  
  207.     drawBox();
  208.  
  209.   /*  glBegin(GL_TRIANGLES);
  210.     glNormal3f(0.0f, 0.0f, 1.0f);
  211.     glTexCoord2f(0.0f, 0.0f);
  212.     glVertex3f(-2.5f, -2.5f, -2.5f);
  213.     glTexCoord2f(5.0f, 5.0f);
  214.     glVertex3f(0.0f, 2.5f, -2.5f);
  215.     glTexCoord2f(10.0f, 0.0f);
  216.     glVertex3f(2.5f, -2.5f, -2.5f);
  217.     glEnd();*/
  218.  
  219.     GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
  220.     glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
  221.  
  222.     GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
  223.     GLfloat lightPos[] = {-0.2f, 0.3f, -1, 0.0f};
  224.     glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
  225.     glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
  226.  
  227.     glutSwapBuffers();
  228. }
  229.  
  230.  
  231. int main(int argc, char** argv)
  232. {
  233.     glutInit(&argc, argv);
  234.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  235.     glutInitWindowSize(400, 400);
  236.  
  237.     glutCreateWindow("gl_teksture");
  238.     initRendering();
  239.  
  240.     glutDisplayFunc(drawScene);
  241.     glutKeyboardFunc(handleKeypress);
  242.     glutReshapeFunc(handleResize);
  243.  
  244.     glutMainLoop();
  245.     return 0;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement