document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2. Interior Kamar 2
  3. Author:
  4. Saiful Pahmi
  5. */
  6.  
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include <windows.h>
  11. #include <stdio.h>
  12. #include <GL/gl.h>
  13. #include <GL/glu.h>
  14. #include <GL/glut.h>
  15. #include <math.h>
  16.  
  17. GLuint texture[35];
  18.  
  19. GLint slices = 35;
  20. GLint stacks = 35;
  21.  
  22. using namespace std;
  23. static float ypos = 0, zpos = 0, xpos = 0,a = -9, b = -5,c =-30, kulkas1=0, kulkas2=0, jKiri=0, jKanan=0, lKanan=0, lKiri=0, oven=0, pintu=0;
  24. int z=0;
  25.  
  26. struct Image {
  27.     unsigned long sizeX;
  28.     unsigned long sizeY;
  29.     char *data;
  30. };
  31. typedef struct Image Image; //struktur data untuk
  32. //ukuran image #bisa di set sesuai kebutuhan
  33. #define checkImageWidth 164
  34. #define checkImageHeight 164
  35.  
  36. GLubyte checkImage[checkImageWidth][checkImageHeight][3];
  37.  
  38. //mengambil gambar BMP
  39. int ImageLoad(char *filename, Image *image) {
  40.     FILE *file;
  41.     unsigned long size; // ukuran image dalam bytes
  42.     unsigned long i; // standard counter.
  43.     unsigned short int plane; // number of planes in image
  44.  
  45.     unsigned short int bpp; // jumlah bits per pixel
  46.     char temp; // temporary color storage for var warna sementara untuk memastikan filenya ada
  47.  
  48.  
  49.     if ((file = fopen(filename, "rb")) == NULL) {
  50.         printf("File Not Found : %s\\n", filename);
  51.         return 0;
  52.     }
  53.     // mencari file header bmp
  54.     fseek(file, 18, SEEK_CUR);
  55.     // read the width
  56.     if ((i = fread(&image->sizeX, 4, 1, file)) != 1) {
  57.         printf("Error reading width from %s.\\n", filename);
  58.         return 0;
  59.     }
  60.     //printf("Width of %s: %lu\\n", filename, image->sizeX);
  61.     // membaca nilai height
  62.     if ((i = fread(&image->sizeY, 4, 1, file)) != 1) {
  63.         printf("Error reading height from %s.\\n", filename);
  64.         return 0;
  65.     }
  66.     //printf("Height of %s: %lu\\n", filename, image->sizeY);
  67.     //menghitung ukuran image(asumsi 24 bits or 3 bytes per pixel).
  68.  
  69.     size = image->sizeX * image->sizeY * 3;
  70.     // read the planes
  71.     if ((fread(&plane, 2, 1, file)) != 1) {
  72.         printf("Error reading planes from %s.\\n", filename);
  73.         return 0;
  74.     }
  75.     if (plane != 1) {
  76.         printf("Planes from %s is not 1: %u\\n", filename, plane);
  77.         return 0;
  78.     }
  79.     // read the bitsperpixel
  80.     if ((i = fread(&bpp, 2, 1, file)) != 1) {
  81.         printf("Error reading bpp from %s.\\n", filename);
  82.  
  83.         return 0;
  84.     }
  85.     if (bpp != 24) {
  86.         printf("Bpp from %s is not 24: %u\\n", filename, bpp);
  87.         return 0;
  88.     }
  89.     // seek past the rest of the bitmap header.
  90.     fseek(file, 24, SEEK_CUR);
  91.     // read the data.
  92.     image->data = (char *) malloc(size);
  93.     if (image->data == NULL) {
  94.         printf("Error allocating memory for color-corrected image data");
  95.         return 0;
  96.     }
  97.     if ((i = fread(image->data, size, 1, file)) != 1) {
  98.         printf("Error reading image data from %s.\\n", filename);
  99.         return 0;
  100.     }
  101.     for (i = 0; i < size; i += 3) { // membalikan semuan nilai warna (gbr - > rgb)
  102.         temp = image->data[i];
  103.         image->data[i] = image->data[i + 2];
  104.         image->data[i + 2] = temp;
  105.     }
  106.     // we\'re done.
  107.     return 1;
  108. }
  109.  
  110. //mengambil tekstur
  111. Image * loadTexture() {
  112.     Image *image1;
  113.    
  114.     // alokasi memmory untuk tekstur
  115.     image1 = (Image *) malloc(sizeof(Image));
  116.     if (image1 == NULL) {
  117.         printf("Error allocating space for image");
  118.         exit(0);
  119.     }
  120.     if (!ImageLoad("tekstur/wall.bmp", image1)) {
  121.         exit(1);
  122.     }
  123.     return image1;
  124. }
  125.  
  126. Image * loadTexture2() {
  127.     Image *image2;
  128.     // alokasi memmory untuk tekstur
  129.     image2 = (Image *) malloc(sizeof(Image));
  130.     if (image2 == NULL) {
  131.         printf("Error allocating space for image");
  132.         exit(0);
  133.     }
  134.     if (!ImageLoad("tekstur/karpetlantai.bmp", image2)) {
  135.         exit(1);
  136.     }
  137.     return image2;
  138. }
  139.  
  140. Image * loadTexture3() {
  141.     Image *image3;
  142.     // alokasi memmory untuk tekstur
  143.     image3 = (Image *) malloc(sizeof(Image));
  144.     if (image3 == NULL) {
  145.         printf("Error allocating space for image");
  146.         exit(0);
  147.     }
  148.     if (!ImageLoad("tekstur/kayu.bmp", image3)) {
  149.         exit(1);
  150.     }
  151.     return image3;
  152. }
  153.  
  154. Image * loadTexture4() {
  155.     Image *image4;
  156.     // alokasi memmory untuk tekstur
  157.     image4 = (Image *) malloc(sizeof(Image));
  158.     if (image4 == NULL) {
  159.         printf("Error allocating space for image");
  160.         exit(0);
  161.     }
  162.     if (!ImageLoad("tekstur/pintu.bmp", image4)) {
  163.         exit(1);
  164.     }
  165.     return image4;
  166. }
  167.  
  168. Image * loadTexture5() {
  169.     Image *image5;
  170.     // alokasi memmory untuk tekstur
  171.     image5 = (Image *) malloc(sizeof(Image));
  172.     if (image5 == NULL) {
  173.         printf("Error allocating space for image");
  174.         exit(0);
  175.     }
  176.     if (!ImageLoad("tekstur/cpu.bmp", image5)) {
  177.         exit(1);
  178.     }
  179.     return image5;
  180. }
  181.  
  182. Image * loadTexture6() {
  183.     Image *image6;
  184.     // alokasi memmory untuk tekstur
  185.     image6 = (Image *) malloc(sizeof(Image));
  186.     if (image6 == NULL) {
  187.         printf("Error allocating space for image");
  188.         exit(0);
  189.     }
  190.     if (!ImageLoad("tekstur/poster.bmp", image6)) {
  191.         exit(1);
  192.     }
  193.     return image6;
  194. }
  195.  
  196. Image * loadTexture7() {
  197.     Image *image7;
  198.     // alokasi memmory untuk tekstur
  199.     image7 = (Image *) malloc(sizeof(Image));
  200.     if (image7 == NULL) {
  201.         printf("Error allocating space for image");
  202.         exit(0);
  203.     }
  204.     if (!ImageLoad("tekstur/lukisan.bmp", image7)) {
  205.         exit(1);
  206.     }
  207.     return image7;
  208. }
  209.  
  210. Image * loadTexture8() {
  211.     Image *image8;
  212.     // alokasi memmory untuk tekstur
  213.     image8 = (Image *) malloc(sizeof(Image));
  214.     if (image8 == NULL) {
  215.         printf("Error allocating space for image");
  216.         exit(0);
  217.     }
  218.     if (!ImageLoad("tekstur/kayu2.bmp", image8)) {
  219.         exit(1);
  220.     }
  221.     return image8;
  222. }
  223.  
  224. Image * loadTexture9() {
  225.     Image *image9;
  226.     // alokasi memmory untuk tekstur
  227.     image9 = (Image *) malloc(sizeof(Image));
  228.     if (image9 == NULL) {
  229.         printf("Error allocating space for image");
  230.         exit(0);
  231.     }
  232.     if (!ImageLoad("tekstur/desktop.bmp", image9)) {
  233.         exit(1);
  234.     }
  235.     return image9;
  236. }
  237.  
  238. Image * loadTexture10() {
  239.     Image *image10;
  240.     // alokasi memmory untuk tekstur
  241.     image10 = (Image *) malloc(sizeof(Image));
  242.     if (image10 == NULL) {
  243.         printf("Error allocating space for image");
  244.         exit(0);
  245.     }
  246.     if (!ImageLoad("tekstur/ghibli.bmp", image10)) {
  247.         exit(1);
  248.     }
  249.     return image10;
  250. }
  251.  
  252.  
  253.  
  254. void init(void)
  255. {
  256.     glClearColor(0.5, 0.5, 0.5, 0.0);
  257.     glEnable(GL_DEPTH_TEST);
  258.     glDepthFunc(GL_LESS);
  259.    
  260.     Image *image1 = loadTexture();
  261.     Image *image2 = loadTexture2();
  262.     Image *image3 = loadTexture3();
  263.     Image *image4 = loadTexture4();    
  264.     Image *image5 = loadTexture5();
  265.     Image *image6 = loadTexture6();
  266.     Image *image7 = loadTexture7();
  267.     Image *image8 = loadTexture8();    
  268.     Image *image9 = loadTexture9();
  269.     Image *image10 = loadTexture10();
  270.    
  271.     if (image1 == NULL) {
  272.         printf("Image was not returned from loadTexture\\n");
  273.         exit(0);
  274.     }
  275.     if (image2 == NULL) {
  276.         printf("Image was not returned from loadTexture\\n");
  277.         exit(0);
  278.     }
  279.     if (image3 == NULL) {
  280.         printf("Image was not returned from loadTexture\\n");
  281.         exit(0);
  282.     }
  283.     if (image4 == NULL) {
  284.         printf("Image was not returned from loadTexture\\n");
  285.         exit(0);
  286.     }  
  287.     if (image5 == NULL) {
  288.         printf("Image was not returned from loadTexture\\n");
  289.         exit(0);
  290.     }  
  291.     if (image6 == NULL) {
  292.         printf("Image was not returned from loadTexture\\n");
  293.         exit(0);
  294.     }  
  295.     if (image7 == NULL) {
  296.         printf("Image was not returned from loadTexture\\n");
  297.         exit(0);
  298.     }  
  299.     if (image8 == NULL) {
  300.         printf("Image was not returned from loadTexture\\n");
  301.         exit(0);
  302.     }
  303.     if (image9 == NULL) {
  304.         printf("Image was not returned from loadTexture\\n");
  305.         exit(0);
  306.     }  
  307.     if (image10 == NULL) {
  308.         printf("Image was not returned from loadTexture\\n");
  309.         exit(0);
  310.     }  
  311.    
  312.     // Generate texture/ membuat texture
  313.    
  314.     glGenTextures(35,texture);
  315.    
  316.     //tekstur wall
  317.     //binding texture untuk membuat texture 2D
  318.     glBindTexture(GL_TEXTURE_2D, texture[0]);
  319.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  320.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  321.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  322.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  323.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image1->sizeX, image1->sizeY, 0, GL_RGB,
  324.             GL_UNSIGNED_BYTE, image1->data);
  325.  
  326.     //tekstur lantai
  327.     //binding texture untuk membuat texture 2D
  328.     glBindTexture(GL_TEXTURE_2D, texture[1]);
  329.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  330.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  331.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  332.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  333.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image2->sizeX, image2->sizeY, 0, GL_RGB,
  334.             GL_UNSIGNED_BYTE, image2->data);
  335.  
  336.     //tekstur kayu
  337.     //binding texture untuk membuat texture 2D
  338.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  339.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  340.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  341.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  342.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  343.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image3->sizeX, image3->sizeY, 0, GL_RGB,
  344.             GL_UNSIGNED_BYTE, image3->data);
  345.  
  346.     //tekstur pintu
  347.     //binding texture untuk membuat texture 2D
  348.     glBindTexture(GL_TEXTURE_2D, texture[3]);
  349.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  350.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  351.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  352.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  353.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image4->sizeX, image4->sizeY, 0, GL_RGB,
  354.             GL_UNSIGNED_BYTE, image4->data);
  355.            
  356.     //tekstur cpu
  357.     //binding texture untuk membuat texture 2D
  358.     glBindTexture(GL_TEXTURE_2D, texture[4]);
  359.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  360.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  361.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  362.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  363.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image5->sizeX, image5->sizeY, 0, GL_RGB,
  364.             GL_UNSIGNED_BYTE, image5->data);
  365.            
  366.     //tekstur poster
  367.     //binding texture untuk membuat texture 2D
  368.     glBindTexture(GL_TEXTURE_2D, texture[5]);
  369.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  370.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  371.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  372.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  373.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image6->sizeX, image6->sizeY, 0, GL_RGB,
  374.             GL_UNSIGNED_BYTE, image6->data);
  375.            
  376.     glBindTexture(GL_TEXTURE_2D, texture[6]);
  377.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  378.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  379.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  380.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  381.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image7->sizeX, image7->sizeY, 0, GL_RGB,
  382.             GL_UNSIGNED_BYTE, image7->data);
  383.            
  384.     glBindTexture(GL_TEXTURE_2D, texture[7]);
  385.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  386.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  387.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  388.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  389.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image8->sizeX, image8->sizeY, 0, GL_RGB,
  390.             GL_UNSIGNED_BYTE, image8->data);
  391.            
  392.     //tekstur keluarga
  393.     //binding texture untuk membuat texture 2D
  394.     glBindTexture(GL_TEXTURE_2D, texture[8]);
  395.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  396.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  397.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  398.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  399.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image9->sizeX, image9->sizeY, 0, GL_RGB,
  400.             GL_UNSIGNED_BYTE, image9->data);
  401.  
  402.     glBindTexture(GL_TEXTURE_2D, texture[9]);
  403.     //menyesuaikan ukuran textur ketika image lebih besar dari texture
  404.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
  405.     //menyesuaikan ukuran textur ketika image lebih kecil dari texture
  406.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
  407.     glTexImage2D(GL_TEXTURE_2D, 0, 3, image10->sizeX, image10->sizeY, 0, GL_RGB,
  408.             GL_UNSIGNED_BYTE, image10->data);
  409.            
  410.    
  411.            
  412.    
  413.     glEnable(GL_TEXTURE_2D);
  414.    
  415.     glShadeModel(GL_FLAT);
  416. }
  417.  
  418.  
  419. //fungsi kotak kosong, belum diisi koordinat. diisi di display()
  420. void kotak(float x1,float y1,float z1,float x2,float y2,float z2)
  421. {
  422.     //depan
  423.     glTexCoord2f(0.0, 0.0);
  424.     glVertex3f(x1,y1,z1);
  425.     glTexCoord2f(0.0, 1.0);
  426.     glVertex3f(x2,y1,z1);
  427.     glTexCoord2f(1.0, 1.0);
  428.     glVertex3f(x2,y2,z1);
  429.     glTexCoord2f(1.0, 0.0);
  430.     glVertex3f(x1,y2,z1);
  431.     //atas
  432.     glTexCoord2f(0.0, 0.0);
  433.     glVertex3f(x1,y2,z1);
  434.     glTexCoord2f(0.0, 1.0);
  435.     glVertex3f(x2,y2,z1);
  436.     glTexCoord2f(1.0, 1.0);
  437.     glVertex3f(x2,y2,z2);
  438.     glTexCoord2f(1.0, 0.0);
  439.     glVertex3f(x1,y2,z2);
  440.     //belakang
  441.     glTexCoord2f(0.0, 0.0);
  442.     glVertex3f(x1,y2,z2);
  443.     glTexCoord2f(0.0, 1.0);
  444.     glVertex3f(x2,y2,z2);
  445.     glTexCoord2f(1.0, 1.0);
  446.     glVertex3f(x2,y1,z2);
  447.     glTexCoord2f(1.0, 0.0);
  448.     glVertex3f(x1,y1,z2);
  449.     //bawah
  450.     glTexCoord2f(0.0, 0.0);
  451.     glVertex3f(x1,y1,z2);
  452.     glTexCoord2f(1.0, 0.0);
  453.     glVertex3f(x2,y1,z2);
  454.     glTexCoord2f(1.0, 1.0);
  455.     glVertex3f(x2,y1,z1);
  456.     glTexCoord2f(0.0, 1.0);
  457.     glVertex3f(x1,y1,z1);
  458.     //samping kiri
  459.     glTexCoord2f(0.0, 0.0);
  460.     glVertex3f(x1,y1,z1);
  461.     glTexCoord2f(1.0, 0.0);
  462.     glVertex3f(x1,y2,z1);
  463.     glTexCoord2f(1.0, 1.0);
  464.     glVertex3f(x1,y2,z2);
  465.     glTexCoord2f(0.0, 1.0);
  466.     glVertex3f(x1,y1,z2);
  467.     //samping kanan
  468.     glTexCoord2f(0.0, 0.0);
  469.     glVertex3f(x2,y1,z1);
  470.     glTexCoord2f(1.0, 0.0);
  471.     glVertex3f(x2,y2,z1);
  472.     glTexCoord2f(1.0, 1.0);
  473.     glVertex3f(x2,y2,z2);
  474.     glTexCoord2f(0.0, 1.0);
  475.     glVertex3f(x2,y1,z2);
  476. }
  477.  
  478.  
  479. void keyboard(unsigned char key, int x, int y)
  480. {
  481.     switch (key)
  482.     {
  483.         //putar arah jarum jam (menambah derajat putaran)
  484.         case \'z\':
  485.         ypos=ypos+5;
  486.         if (ypos>360) ypos=0;
  487.         glutPostRedisplay();
  488.         break;
  489.         //putar berlawanan arah jarum jam (mengurangi derajat putaran)
  490.         case \'x\':
  491.         ypos=ypos-5;
  492.         if (ypos>360) ypos=0;
  493.         glutPostRedisplay();
  494.         break;
  495.         //vertikal bawah (menambah koordinat y)
  496.         case \'s\':
  497.         b = b + 1;
  498.         glutPostRedisplay();
  499.         break;
  500.         //vertikal atas (mengurangi koordinat y)
  501.         case \'w\':
  502.         b = b - 1;
  503.         glutPostRedisplay();
  504.         break;
  505.         //horisontal kiri (mengurangi koordinat x)
  506.         case \'a\':
  507.         a = a + 1;
  508.         glutPostRedisplay();
  509.         break;
  510.         //horisontal kanan (menambah koordinat x)
  511.         case \'d\':
  512.         a = a - 1;
  513.         glutPostRedisplay();
  514.         break;
  515.         //memperbesar objek (menambah koordinat z)
  516.         case \'q\':
  517.         c = c + 1;
  518.         glutPostRedisplay();
  519.         break;
  520.         //memperkecil abjek(mengurangi koordinat z)
  521.         case \'e\':
  522.         c = c - 1;
  523.         glutPostRedisplay();
  524.         break;
  525.        
  526.        
  527.         //buka pintu kulkas atas
  528.         case \'n\':
  529.         kulkas1=kulkas1-5;
  530.         if (kulkas1<-100) kulkas1=-100;
  531.         glutPostRedisplay();
  532.         break;
  533.         //tutup pintu kulkas atas
  534.         case \'m\':
  535.         kulkas1=kulkas1+5;
  536.         if (kulkas1>0) kulkas1=0;
  537.         glutPostRedisplay();
  538.         break;
  539.         //buka pintu kulkas bawah
  540.         case \'k\':
  541.         kulkas2=kulkas2-5;
  542.         if (kulkas2<-100) kulkas2=-100;
  543.         glutPostRedisplay();
  544.         break;
  545.         //tutup pintu kulkas bawah
  546.         case \'l\':
  547.         kulkas2=kulkas2+5;
  548.         if (kulkas2>0) kulkas2=0;
  549.         glutPostRedisplay();
  550.         break;
  551.        
  552.         //buka jendela kiri
  553.         case \'1\':
  554.         jKiri=jKiri+5;
  555.         if (jKiri<-0) jKiri=-1;
  556.         glutPostRedisplay();
  557.         break;
  558.         //tutup jendela kiri
  559.         case \'2\':
  560.         jKiri=jKiri-5;
  561.         if (jKiri<-0) jKiri=-0;
  562.         glutPostRedisplay();
  563.         break;
  564.         //buka jendela kanan
  565.         case \'3\':
  566.         jKanan=jKanan+5;
  567.         if (jKanan<-0) jKanan=-1;
  568.         glutPostRedisplay();
  569.         break;
  570.         //tutup jendela kanan
  571.         case \'4\':
  572.         jKanan=jKanan-5;
  573.         if (jKanan<-0) jKanan=-0;
  574.         glutPostRedisplay();
  575.         break;
  576.        
  577.         //buka oven
  578.         case \'9\':
  579.         oven=oven+5;
  580.         if (oven<-0) oven=-1;
  581.         glutPostRedisplay();
  582.         break;
  583.         //tutup oven
  584.         case \'0\':
  585.         oven=oven-5;
  586.         if (oven<-0) oven=-0;
  587.         glutPostRedisplay();
  588.         break;
  589.        
  590.         //buka pintu lemari kiri
  591.         case \'u\':
  592.         lKiri=lKiri-5;
  593.         if (lKiri<-100) lKiri=-100;
  594.         glutPostRedisplay();
  595.         break;
  596.         //tutup pintu lemari kiri
  597.         case \'i\':
  598.         lKiri=lKiri+5;
  599.         if (lKiri>0) lKiri=0;
  600.         glutPostRedisplay();
  601.         break;
  602.         //buka pintu lemari kanan
  603.         case \'o\':
  604.         lKanan=lKanan+5;
  605.         if (lKanan<-100) lKanan=-100;
  606.         glutPostRedisplay();
  607.         break;
  608.         //tutup pintu lemari kanan
  609.         case \'p\':
  610.         lKanan=lKanan-5;
  611.         if (lKanan<0) lKanan=0;
  612.         glutPostRedisplay();
  613.         break;
  614.        
  615.         //buka pintu
  616.         case \'t\':
  617.         pintu=pintu-5;
  618.         if (pintu>100) pintu=100;
  619.         glutPostRedisplay();
  620.         break;
  621.         //tutup pintu
  622.         case \'y\':
  623.         pintu=pintu+5;
  624.         if (pintu>0) pintu=0;
  625.         glutPostRedisplay();
  626.         break;
  627.        
  628.         //putar arah jarum jam (menambah derajat putaran)
  629.         case \'[\':
  630.         xpos=xpos+5;
  631.         if (xpos>360) xpos=0;
  632.         glutPostRedisplay();
  633.         break;
  634.         //putar berlawanan arah jarum jam (mengurangi derajat putaran)
  635.         case \']\':
  636.         xpos=xpos-5;
  637.         if (xpos>360) xpos=0;
  638.         glutPostRedisplay();
  639.        
  640.     }
  641. }
  642.  
  643. void display()
  644. {
  645. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  646.     glLoadIdentity ();
  647.     glEnable(GL_DEPTH_TEST);
  648.     //perpindahan
  649.     glTranslatef(a,b,c);
  650.     //putaran
  651.     glRotatef(xpos,1,0,0);
  652.     glRotatef(ypos,0,1,0);
  653.     glRotatef(zpos,0,0,1);
  654.  
  655. //Mulai coding Kamar 2 - M. Luhung Pananjung
  656.     //lantai
  657.     glPushMatrix();
  658.         glBindTexture(GL_TEXTURE_2D, texture[1]);
  659.         glBegin(GL_QUADS);
  660.             glColor3f(0.3f,0.3f,0.3f);
  661.             kotak(0,0,18,25,0.5,0);
  662.         glEnd();
  663.     glPopMatrix();
  664.    
  665.     //dinding kiri
  666.     glPushMatrix();
  667.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  668.         glBegin(GL_QUADS);
  669.             glColor3f(0.0f,0.0f,1.0f);
  670.             kotak(0,0.5,18,0.5,10,0);
  671.         glEnd();
  672.     glPopMatrix();
  673.    
  674.     //dinding belakang
  675.     glPushMatrix();
  676.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  677.         glBegin(GL_QUADS);
  678.             glColor3f(0.0f,0.0f,1.0f);
  679.             kotak(6,0.5,0.5,25,10,0.0);
  680.         glEnd();
  681.     glPopMatrix();
  682.    
  683.     //saklar
  684.     glPushMatrix();
  685.     glBindTexture(GL_TEXTURE_2D, texture[10]);
  686.         glBegin(GL_QUADS);
  687.         glColor3f(1.1f,1.0f,1.0f);
  688.             kotak(6.5,6.5,0.6,7.5,7.5,0.5);
  689.             glColor3f(0.1f,0.0f,0.0f);
  690.             kotak(6.65,6.7,0.65,6.92,7.3,0.6);
  691.             kotak(7.08,6.7,0.65,7.35,7.3,0.6);
  692.         glEnd();
  693.     glPopMatrix();
  694.     //pintu
  695.     glPushMatrix();
  696.     glBindTexture(GL_TEXTURE_2D, texture[3]);
  697.         glBegin(GL_QUADS);
  698.             glColor3f(0.1f,0.0f,0.0f);
  699.             kotak(0.5,0.5,0.5,6,10,0);
  700.         glEnd();
  701.     glPopMatrix();
  702.     //gagang pintu
  703.     glPushMatrix();
  704.     glBindTexture(GL_TEXTURE_2D, texture[0]);
  705.         glBegin(GL_QUADS);
  706.             //gagang pintu
  707.             glColor3f(1.0f,1.0f,1.0f);
  708.             kotak(5.2,5.8,0.7,5.5,6,0.5);
  709.             kotak(4.5,5.8,0.9,5.6,6,0.7);
  710.             //alas gagang
  711.             kotak(5.1,6.5,0.55,5.7,5,0.5);
  712.             glColor3f(0.0f,0.0f,0.0f);
  713.             kotak(5.35,5.2,0.56,5.45,5.5,0.55);
  714.         glEnd();
  715.     glPopMatrix();
  716.     //gagang pintu belakang
  717.     glPushMatrix();
  718.     glBindTexture(GL_TEXTURE_2D, texture[0]);
  719.         glBegin(GL_QUADS);
  720.             //gagang pintu
  721.             glColor3f(1.0f,1.0f,1.0f);
  722.             kotak(5.2,5.8,0,5.5,6,-0.2);
  723.             kotak(4.5,5.8,-0.2,5.6,6,-0.4);
  724.             //alas gagang
  725.             kotak(5.1,6.5,0,5.7,5,-0.05);
  726.             glColor3f(0.0f,0.0f,0.0f);
  727.             kotak(5.35,5.2,-0.05,5.45,5.5,-0.06);
  728.         glEnd();
  729.     glPopMatrix();
  730.     //meja
  731.     //atas
  732.     glPushMatrix();
  733.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  734.         glBegin(GL_QUADS);
  735.             glColor3f(1.1f,1.0f,1.0f);
  736.             kotak(21,3.5,16,24.8,3.8,9.5);
  737.             //kaki kanan belakang
  738.             kotak(24.3,0.5,15.9,24.6,3.6,15.6);
  739.             //kaki kiri belakang
  740.             kotak(24.3,0.5,9.9,24.6,3.6,9.6);
  741.             //kaki kiri depan
  742.             kotak(21.1,0.5,9.9,21.4,3.6,9.6);
  743.             //kaki kanan depan
  744.             kotak(21.1,0.5,15.9,21.4,3.6,15.6);
  745.             //belakang bawah
  746.             kotak(24.4,1,15.6,24.6,1.6,9.9);
  747.             //kanan bawah
  748.             kotak(21.4,1,15.9,24.3,1.6,15.7);
  749.             //kiri bawah
  750.             kotak(21.4,1,9.8,24.3,1.6,9.9);
  751.         glEnd();
  752.     glPopMatrix();
  753.    
  754.     //pc
  755.     glPushMatrix();
  756.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  757.         glBegin(GL_QUADS);
  758.             glColor3f(0.0f,0.0f,0.0f);
  759.             //cpu
  760.             kotak(21.5,3.8,11.8,23.5,6,10.8);
  761.             //Monitor lcd
  762.             kotak(23.3,4.1,15.5,23.5,6.4,12.2);
  763.             kotak(23.5,4.3,15.3,23.6,6.2,12.4);
  764.             kotak(23.6,3.8,14,23.8,6,13.5);
  765.             kotak(23.4,3.8,14.3,23.9,4,13.2);
  766.             //keyboard
  767.             kotak(21.8,3.8,12.3,23,4,15.2);            
  768.         glEnd();
  769.     glPopMatrix();
  770.     //layar lcd
  771.     glPushMatrix();
  772.     glBindTexture(GL_TEXTURE_2D, texture[8]);
  773.         glBegin(GL_QUADS);
  774.             glColor3f(1.1f,1.0f,1.0f);
  775.             kotak(23.29,4.3,15.3,23.29,6.2,12.4);
  776.         glEnd();
  777.     glPopMatrix();
  778.     //cpu
  779.     glPushMatrix();
  780.     glBindTexture(GL_TEXTURE_2D, texture[4]);
  781.         glBegin(GL_QUADS);
  782.             glColor3f(0.3f,0.3f,0.3f);
  783.             kotak(21.49,3.8,11.8,21.5,6,10.8);
  784.         glEnd();
  785.     glPopMatrix();
  786.  
  787.    
  788.     //kursi
  789.     //alas
  790.     glPushMatrix();
  791.     glBindTexture(GL_TEXTURE_2D, texture[3]);
  792.         glBegin(GL_QUADS);
  793.             glColor3f(0.1f,0.0f,0.0f);
  794.             kotak(18,2.2,15.5,20.8,2.5,12.8);
  795.             //kiri depan
  796.             kotak(20.5,0.5,15.5,20.8,2.5,15.2);
  797.             //kanan depan
  798.             kotak(20.5,0.5,13.1,20.8,2.5,12.8);
  799.             //kanan belakang
  800.             kotak(18,0.5,13.1,18.3,5.2,12.8);
  801.             //kiri belakang
  802.             kotak(18,0.5,15.5,18.3,5.2,15.2);
  803.             //senderan
  804.             kotak(18,3.8,15.5,18.2,4.9,12.8);
  805.         glEnd();
  806.     glPopMatrix();
  807.    
  808.     //kasur
  809.     //rangka alas
  810.     glPushMatrix();
  811.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  812.         glBegin(GL_QUADS);
  813.             glColor3f(1.1f,1.0f,1.0f);
  814.             kotak(1.1,1.4,15.5,13.4,3,8.7);
  815.             //kaki 1
  816.             kotak(0.5,0.5,15.6,1.2,6,14.9);
  817.             //kaki 2
  818.             kotak(0.5,0.5,9.4,1.1,6,8.7);
  819.             //kaki 3
  820.             kotak(12.9,0.5,9.4,13.6,5,8.7);
  821.             //kaki 4
  822.             kotak(12.9,0.5,15.6,13.6,5,14.9);
  823.             //penyangga depan
  824.             kotak(0.6,3,15.4,1,5.1,8.9);
  825.             //penyangga belakang
  826.             kotak(12.9,1.4,15.4,13.6,4.5,8.9);
  827.         glEnd();
  828.     glPopMatrix();
  829.     //kasurnya
  830.     glPushMatrix();
  831.     glBindTexture(GL_TEXTURE_2D, texture[1]);
  832.         glBegin(GL_QUADS);
  833.             glColor3f(1.1f,1.0f,1.0f);
  834.             kotak(1.1,2.5,15.4,13.4,3.5,9);
  835.             //bantal
  836.             kotak(1.3,3.5,14.4,4,4,10);
  837.             //selimut
  838.             glColor3f(0.1f,0.1f,0.1f);
  839.             kotak(5,3.5,15.4,13.4,3.7,9);
  840.             //kanan
  841.             kotak(5,3,9,13.4,3.6,8.9);
  842.             //kiri
  843.             kotak(5,3,15.5,13.4,3.6,15.4);
  844.         glEnd();
  845.     glPopMatrix();
  846.    
  847.     //lukisan atas kasur
  848.     glPushMatrix();
  849.     glBindTexture(GL_TEXTURE_2D, texture[9]);
  850.         glBegin(GL_QUADS);
  851.             glColor3f(1.0f,1.0f,1.0f);
  852.             kotak(0.6,6.6,15.5,0.61,8.8,8.9);
  853.             glColor3f(0.0f,0.0f,0.0f);
  854.             kotak(0.5,6.4,15.7,0.6,9,8.7);
  855.         glEnd();
  856.     glPopMatrix();
  857.    
  858.     //lemari kecil
  859.     glPushMatrix();
  860.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  861.         glBegin(GL_QUADS);
  862.             glColor3f(1.2f,1.2f,1.2f);
  863.             kotak(0.5,0.8,8.5,4,4.5,4.7);
  864.             //kaki kiri
  865.             kotak(0.5,0.5,8.5,4.3,4.9,8.3);
  866.             //kaki kanan
  867.             kotak(0.5,0.5,4.5,4.3,4.9,4.7);
  868.             //pegangan
  869.             kotak(4.2,2.1,6.9,4.3,2.3,6.2);
  870.             kotak(4.2,3.9,6.9,4.3,4.1,6.2);
  871.         glEnd();
  872.     glPopMatrix();
  873.     //lacinya
  874.     glPushMatrix();
  875.     glBindTexture(GL_TEXTURE_2D, texture[3]);
  876.         glBegin(GL_QUADS);
  877.             glColor3f(0.3f,0.1f,0.1f);
  878.             kotak(4,1,8.2,4.2,2.5,4.9);
  879.             kotak(4,2.7,8.2,4.2,4.3,4.9);
  880.         glEnd();
  881.     glPopMatrix();
  882.    
  883.     //lemari pakaian
  884.     glPushMatrix();
  885.     glBindTexture(GL_TEXTURE_2D, texture[2]);
  886.         glBegin(GL_QUADS);
  887.             glColor3f(1.1f,1.0f,1.0f);
  888.             kotak(16,0.6,3.5,23.8,8.5,0.5);
  889.             //kanan
  890.             kotak(23.8,0.5,3.7,24,8.7,0.5);
  891.             //kiri
  892.             kotak(15.8,0.5,3.7,16,8.7,0.5);
  893.             //gagang pintu kiri
  894.             glColor3f(1.1f,1.0f,1.0f);
  895.             kotak(19.3,4.5,3.9,19.5,5.7,3.7);
  896.             //gagang pintu kanan
  897.             kotak(20.3,4.5,3.9,20.5,5.7,3.7);  
  898.         glEnd();
  899.     glPopMatrix(); 
  900.     glPushMatrix();
  901.     glBindTexture(GL_TEXTURE_2D, texture[3]);
  902.         glBegin(GL_QUADS);
  903.         glColor3f(0.2f,0.1f,0.1f);
  904.             //pintu kiri
  905.             kotak(16.2,0.9,3.7,19.7,8.3,3.5);
  906.             //pintu kanan
  907.             kotak(20.1,0.9,3.7,23.6,8.3,3.5);      
  908.         glEnd();
  909.     glPopMatrix(); 
  910.  
  911.     //lukisan singa
  912.     glPushMatrix();
  913.     glBindTexture(GL_TEXTURE_2D, texture[5]);
  914.         glBegin(GL_QUADS);
  915.             glColor3f(0.0f,0.0f,0.0f);
  916.             kotak(9.2,2.8,0.55,13.2,8.2,0.5);
  917.             glColor3f(1.1f,1.0f,1.0f);
  918.             kotak(9.4,3,0.6,13,8,0.55);
  919.         glEnd();
  920.     glPopMatrix();
  921.  
  922.     //ac
  923.     glPushMatrix();
  924.     glBindTexture(GL_TEXTURE_2D, texture[10]);
  925.         glBegin(GL_QUADS);
  926.             glColor3f(1.1f,1.1f,1.1f);
  927.             kotak(0.55,8.45,8.2,1.2,9.7,4.5);
  928.             glColor3f(0.0f,0.0f,0.0f);
  929.             kotak(1.2,8.5,8.2,1.25,8.45,4.5);
  930.             kotak(1.2,8.6,8.1,1.25,8.62,4.6);
  931.             kotak(1.2,9.58,8.1,1.25,9.6,7);
  932.             kotak(1.2,9.52,8.2,1.25,9.54,6.5);
  933.             kotak(0.55,8.39,8.1,1.15,8.4,4.6);
  934.         glEnd();
  935.     glPopMatrix();
  936.  
  937.     glFlush();
  938.     glutSwapBuffers();
  939.      
  940. }
  941.  
  942. void reshape (int w, int h)
  943. {
  944.     glViewport(0, 0, w, h);
  945.     glMatrixMode(GL_PROJECTION);
  946.     glLoadIdentity();
  947.     gluPerspective(60.0, 1.0 * (GLfloat) w / (GLfloat) h, 1.0, 40.0);
  948.     glMatrixMode(GL_MODELVIEW);
  949.     glLoadIdentity();
  950.     glTranslatef(0.0, 0.0, 0.0);
  951.     gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  952. }
  953.  
  954. int main(int argc, char *argv[])
  955. {
  956.     glutInit(&argc, argv);
  957.     glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  958.     glutInitWindowSize (1024, 600);
  959.     glutInitWindowPosition (20, 75);
  960.     glutCreateWindow ("Kamar 2 - Saiful Pahmi");
  961.     cout<<"\\nTugas OpenGL - Interior Rumah"<<endl;
  962.     cout<<"================================"<<endl<<endl;
  963.     cout<<"Kamar 2        - Saiful Pahmi"<<endl;
  964.     init ();
  965.     glutDisplayFunc(display);
  966.     glutReshapeFunc(reshape);
  967.     glutKeyboardFunc(keyboard);
  968.     glutMainLoop();
  969. return 0;
  970. }
');