/*
Interior Kamar 2
Author:
Saiful Pahmi
*/
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <math.h>
GLuint texture[35];
GLint slices = 35;
GLint stacks = 35;
using namespace std;
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;
int z=0;
struct Image {
unsigned long sizeX;
unsigned long sizeY;
char *data;
};
typedef struct Image Image; //struktur data untuk
//ukuran image #bisa di set sesuai kebutuhan
#define checkImageWidth 164
#define checkImageHeight 164
GLubyte checkImage[checkImageWidth][checkImageHeight][3];
//mengambil gambar BMP
int ImageLoad(char *filename, Image *image) {
FILE *file;
unsigned long size; // ukuran image dalam bytes
unsigned long i; // standard counter.
unsigned short int plane; // number of planes in image
unsigned short int bpp; // jumlah bits per pixel
char temp; // temporary color storage for var warna sementara untuk memastikan filenya ada
if ((file = fopen(filename, "rb")) == NULL) {
printf("File Not Found : %s\\n", filename);
return 0;
}
// mencari file header bmp
fseek(file, 18, SEEK_CUR);
// read the width
if ((i = fread(&image->sizeX, 4, 1, file)) != 1) {
printf("Error reading width from %s.\\n", filename);
return 0;
}
//printf("Width of %s: %lu\\n", filename, image->sizeX);
// membaca nilai height
if ((i = fread(&image->sizeY, 4, 1, file)) != 1) {
printf("Error reading height from %s.\\n", filename);
return 0;
}
//printf("Height of %s: %lu\\n", filename, image->sizeY);
//menghitung ukuran image(asumsi 24 bits or 3 bytes per pixel).
size = image->sizeX * image->sizeY * 3;
// read the planes
if ((fread(&plane, 2, 1, file)) != 1) {
printf("Error reading planes from %s.\\n", filename);
return 0;
}
if (plane != 1) {
printf("Planes from %s is not 1: %u\\n", filename, plane);
return 0;
}
// read the bitsperpixel
if ((i = fread(&bpp, 2, 1, file)) != 1) {
printf("Error reading bpp from %s.\\n", filename);
return 0;
}
if (bpp != 24) {
printf("Bpp from %s is not 24: %u\\n", filename, bpp);
return 0;
}
// seek past the rest of the bitmap header.
fseek(file, 24, SEEK_CUR);
// read the data.
image->data = (char *) malloc(size);
if (image->data == NULL) {
printf("Error allocating memory for color-corrected image data");
return 0;
}
if ((i = fread(image->data, size, 1, file)) != 1) {
printf("Error reading image data from %s.\\n", filename);
return 0;
}
for (i = 0; i < size; i += 3) { // membalikan semuan nilai warna (gbr - > rgb)
temp = image->data[i];
image->data[i] = image->data[i + 2];
image->data[i + 2] = temp;
}
// we\'re done.
return 1;
}
//mengambil tekstur
Image * loadTexture() {
Image *image1;
// alokasi memmory untuk tekstur
image1 = (Image *) malloc(sizeof(Image));
if (image1 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/wall.bmp", image1)) {
exit(1);
}
return image1;
}
Image * loadTexture2() {
Image *image2;
// alokasi memmory untuk tekstur
image2 = (Image *) malloc(sizeof(Image));
if (image2 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/karpetlantai.bmp", image2)) {
exit(1);
}
return image2;
}
Image * loadTexture3() {
Image *image3;
// alokasi memmory untuk tekstur
image3 = (Image *) malloc(sizeof(Image));
if (image3 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/kayu.bmp", image3)) {
exit(1);
}
return image3;
}
Image * loadTexture4() {
Image *image4;
// alokasi memmory untuk tekstur
image4 = (Image *) malloc(sizeof(Image));
if (image4 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/pintu.bmp", image4)) {
exit(1);
}
return image4;
}
Image * loadTexture5() {
Image *image5;
// alokasi memmory untuk tekstur
image5 = (Image *) malloc(sizeof(Image));
if (image5 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/cpu.bmp", image5)) {
exit(1);
}
return image5;
}
Image * loadTexture6() {
Image *image6;
// alokasi memmory untuk tekstur
image6 = (Image *) malloc(sizeof(Image));
if (image6 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/poster.bmp", image6)) {
exit(1);
}
return image6;
}
Image * loadTexture7() {
Image *image7;
// alokasi memmory untuk tekstur
image7 = (Image *) malloc(sizeof(Image));
if (image7 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/lukisan.bmp", image7)) {
exit(1);
}
return image7;
}
Image * loadTexture8() {
Image *image8;
// alokasi memmory untuk tekstur
image8 = (Image *) malloc(sizeof(Image));
if (image8 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/kayu2.bmp", image8)) {
exit(1);
}
return image8;
}
Image * loadTexture9() {
Image *image9;
// alokasi memmory untuk tekstur
image9 = (Image *) malloc(sizeof(Image));
if (image9 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/desktop.bmp", image9)) {
exit(1);
}
return image9;
}
Image * loadTexture10() {
Image *image10;
// alokasi memmory untuk tekstur
image10 = (Image *) malloc(sizeof(Image));
if (image10 == NULL) {
printf("Error allocating space for image");
exit(0);
}
if (!ImageLoad("tekstur/ghibli.bmp", image10)) {
exit(1);
}
return image10;
}
void init(void)
{
glClearColor(0.5, 0.5, 0.5, 0.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
Image *image1 = loadTexture();
Image *image2 = loadTexture2();
Image *image3 = loadTexture3();
Image *image4 = loadTexture4();
Image *image5 = loadTexture5();
Image *image6 = loadTexture6();
Image *image7 = loadTexture7();
Image *image8 = loadTexture8();
Image *image9 = loadTexture9();
Image *image10 = loadTexture10();
if (image1 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image2 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image3 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image4 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image5 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image6 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image7 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image8 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image9 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
if (image10 == NULL) {
printf("Image was not returned from loadTexture\\n");
exit(0);
}
// Generate texture/ membuat texture
glGenTextures(35,texture);
//tekstur wall
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[0]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3, image1->sizeX, image1->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image1->data);
//tekstur lantai
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[1]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image2->sizeX, image2->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image2->data);
//tekstur kayu
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[2]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image3->sizeX, image3->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image3->data);
//tekstur pintu
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[3]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image4->sizeX, image4->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image4->data);
//tekstur cpu
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[4]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image5->sizeX, image5->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image5->data);
//tekstur poster
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[5]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image6->sizeX, image6->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image6->data);
glBindTexture(GL_TEXTURE_2D, texture[6]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image7->sizeX, image7->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image7->data);
glBindTexture(GL_TEXTURE_2D, texture[7]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image8->sizeX, image8->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image8->data);
//tekstur keluarga
//binding texture untuk membuat texture 2D
glBindTexture(GL_TEXTURE_2D, texture[8]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image9->sizeX, image9->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image9->data);
glBindTexture(GL_TEXTURE_2D, texture[9]);
//menyesuaikan ukuran textur ketika image lebih besar dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //
//menyesuaikan ukuran textur ketika image lebih kecil dari texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //
glTexImage2D(GL_TEXTURE_2D, 0, 3, image10->sizeX, image10->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image10->data);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_FLAT);
}
//fungsi kotak kosong, belum diisi koordinat. diisi di display()
void kotak(float x1,float y1,float z1,float x2,float y2,float z2)
{
//depan
glTexCoord2f(0.0, 0.0);
glVertex3f(x1,y1,z1);
glTexCoord2f(0.0, 1.0);
glVertex3f(x2,y1,z1);
glTexCoord2f(1.0, 1.0);
glVertex3f(x2,y2,z1);
glTexCoord2f(1.0, 0.0);
glVertex3f(x1,y2,z1);
//atas
glTexCoord2f(0.0, 0.0);
glVertex3f(x1,y2,z1);
glTexCoord2f(0.0, 1.0);
glVertex3f(x2,y2,z1);
glTexCoord2f(1.0, 1.0);
glVertex3f(x2,y2,z2);
glTexCoord2f(1.0, 0.0);
glVertex3f(x1,y2,z2);
//belakang
glTexCoord2f(0.0, 0.0);
glVertex3f(x1,y2,z2);
glTexCoord2f(0.0, 1.0);
glVertex3f(x2,y2,z2);
glTexCoord2f(1.0, 1.0);
glVertex3f(x2,y1,z2);
glTexCoord2f(1.0, 0.0);
glVertex3f(x1,y1,z2);
//bawah
glTexCoord2f(0.0, 0.0);
glVertex3f(x1,y1,z2);
glTexCoord2f(1.0, 0.0);
glVertex3f(x2,y1,z2);
glTexCoord2f(1.0, 1.0);
glVertex3f(x2,y1,z1);
glTexCoord2f(0.0, 1.0);
glVertex3f(x1,y1,z1);
//samping kiri
glTexCoord2f(0.0, 0.0);
glVertex3f(x1,y1,z1);
glTexCoord2f(1.0, 0.0);
glVertex3f(x1,y2,z1);
glTexCoord2f(1.0, 1.0);
glVertex3f(x1,y2,z2);
glTexCoord2f(0.0, 1.0);
glVertex3f(x1,y1,z2);
//samping kanan
glTexCoord2f(0.0, 0.0);
glVertex3f(x2,y1,z1);
glTexCoord2f(1.0, 0.0);
glVertex3f(x2,y2,z1);
glTexCoord2f(1.0, 1.0);
glVertex3f(x2,y2,z2);
glTexCoord2f(0.0, 1.0);
glVertex3f(x2,y1,z2);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
//putar arah jarum jam (menambah derajat putaran)
case \'z\':
ypos=ypos+5;
if (ypos>360) ypos=0;
glutPostRedisplay();
break;
//putar berlawanan arah jarum jam (mengurangi derajat putaran)
case \'x\':
ypos=ypos-5;
if (ypos>360) ypos=0;
glutPostRedisplay();
break;
//vertikal bawah (menambah koordinat y)
case \'s\':
b = b + 1;
glutPostRedisplay();
break;
//vertikal atas (mengurangi koordinat y)
case \'w\':
b = b - 1;
glutPostRedisplay();
break;
//horisontal kiri (mengurangi koordinat x)
case \'a\':
a = a + 1;
glutPostRedisplay();
break;
//horisontal kanan (menambah koordinat x)
case \'d\':
a = a - 1;
glutPostRedisplay();
break;
//memperbesar objek (menambah koordinat z)
case \'q\':
c = c + 1;
glutPostRedisplay();
break;
//memperkecil abjek(mengurangi koordinat z)
case \'e\':
c = c - 1;
glutPostRedisplay();
break;
//buka pintu kulkas atas
case \'n\':
kulkas1=kulkas1-5;
if (kulkas1<-100) kulkas1=-100;
glutPostRedisplay();
break;
//tutup pintu kulkas atas
case \'m\':
kulkas1=kulkas1+5;
if (kulkas1>0) kulkas1=0;
glutPostRedisplay();
break;
//buka pintu kulkas bawah
case \'k\':
kulkas2=kulkas2-5;
if (kulkas2<-100) kulkas2=-100;
glutPostRedisplay();
break;
//tutup pintu kulkas bawah
case \'l\':
kulkas2=kulkas2+5;
if (kulkas2>0) kulkas2=0;
glutPostRedisplay();
break;
//buka jendela kiri
case \'1\':
jKiri=jKiri+5;
if (jKiri<-0) jKiri=-1;
glutPostRedisplay();
break;
//tutup jendela kiri
case \'2\':
jKiri=jKiri-5;
if (jKiri<-0) jKiri=-0;
glutPostRedisplay();
break;
//buka jendela kanan
case \'3\':
jKanan=jKanan+5;
if (jKanan<-0) jKanan=-1;
glutPostRedisplay();
break;
//tutup jendela kanan
case \'4\':
jKanan=jKanan-5;
if (jKanan<-0) jKanan=-0;
glutPostRedisplay();
break;
//buka oven
case \'9\':
oven=oven+5;
if (oven<-0) oven=-1;
glutPostRedisplay();
break;
//tutup oven
case \'0\':
oven=oven-5;
if (oven<-0) oven=-0;
glutPostRedisplay();
break;
//buka pintu lemari kiri
case \'u\':
lKiri=lKiri-5;
if (lKiri<-100) lKiri=-100;
glutPostRedisplay();
break;
//tutup pintu lemari kiri
case \'i\':
lKiri=lKiri+5;
if (lKiri>0) lKiri=0;
glutPostRedisplay();
break;
//buka pintu lemari kanan
case \'o\':
lKanan=lKanan+5;
if (lKanan<-100) lKanan=-100;
glutPostRedisplay();
break;
//tutup pintu lemari kanan
case \'p\':
lKanan=lKanan-5;
if (lKanan<0) lKanan=0;
glutPostRedisplay();
break;
//buka pintu
case \'t\':
pintu=pintu-5;
if (pintu>100) pintu=100;
glutPostRedisplay();
break;
//tutup pintu
case \'y\':
pintu=pintu+5;
if (pintu>0) pintu=0;
glutPostRedisplay();
break;
//putar arah jarum jam (menambah derajat putaran)
case \'[\':
xpos=xpos+5;
if (xpos>360) xpos=0;
glutPostRedisplay();
break;
//putar berlawanan arah jarum jam (mengurangi derajat putaran)
case \']\':
xpos=xpos-5;
if (xpos>360) xpos=0;
glutPostRedisplay();
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();
glEnable(GL_DEPTH_TEST);
//perpindahan
glTranslatef(a,b,c);
//putaran
glRotatef(xpos,1,0,0);
glRotatef(ypos,0,1,0);
glRotatef(zpos,0,0,1);
//Mulai coding Kamar 2 - M. Luhung Pananjung
//lantai
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glColor3f(0.3f,0.3f,0.3f);
kotak(0,0,18,25,0.5,0);
glEnd();
glPopMatrix();
//dinding kiri
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,1.0f);
kotak(0,0.5,18,0.5,10,0);
glEnd();
glPopMatrix();
//dinding belakang
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,1.0f);
kotak(6,0.5,0.5,25,10,0.0);
glEnd();
glPopMatrix();
//saklar
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[10]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(6.5,6.5,0.6,7.5,7.5,0.5);
glColor3f(0.1f,0.0f,0.0f);
kotak(6.65,6.7,0.65,6.92,7.3,0.6);
kotak(7.08,6.7,0.65,7.35,7.3,0.6);
glEnd();
glPopMatrix();
//pintu
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glColor3f(0.1f,0.0f,0.0f);
kotak(0.5,0.5,0.5,6,10,0);
glEnd();
glPopMatrix();
//gagang pintu
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
//gagang pintu
glColor3f(1.0f,1.0f,1.0f);
kotak(5.2,5.8,0.7,5.5,6,0.5);
kotak(4.5,5.8,0.9,5.6,6,0.7);
//alas gagang
kotak(5.1,6.5,0.55,5.7,5,0.5);
glColor3f(0.0f,0.0f,0.0f);
kotak(5.35,5.2,0.56,5.45,5.5,0.55);
glEnd();
glPopMatrix();
//gagang pintu belakang
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
//gagang pintu
glColor3f(1.0f,1.0f,1.0f);
kotak(5.2,5.8,0,5.5,6,-0.2);
kotak(4.5,5.8,-0.2,5.6,6,-0.4);
//alas gagang
kotak(5.1,6.5,0,5.7,5,-0.05);
glColor3f(0.0f,0.0f,0.0f);
kotak(5.35,5.2,-0.05,5.45,5.5,-0.06);
glEnd();
glPopMatrix();
//meja
//atas
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(21,3.5,16,24.8,3.8,9.5);
//kaki kanan belakang
kotak(24.3,0.5,15.9,24.6,3.6,15.6);
//kaki kiri belakang
kotak(24.3,0.5,9.9,24.6,3.6,9.6);
//kaki kiri depan
kotak(21.1,0.5,9.9,21.4,3.6,9.6);
//kaki kanan depan
kotak(21.1,0.5,15.9,21.4,3.6,15.6);
//belakang bawah
kotak(24.4,1,15.6,24.6,1.6,9.9);
//kanan bawah
kotak(21.4,1,15.9,24.3,1.6,15.7);
//kiri bawah
kotak(21.4,1,9.8,24.3,1.6,9.9);
glEnd();
glPopMatrix();
//pc
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,0.0f);
//cpu
kotak(21.5,3.8,11.8,23.5,6,10.8);
//Monitor lcd
kotak(23.3,4.1,15.5,23.5,6.4,12.2);
kotak(23.5,4.3,15.3,23.6,6.2,12.4);
kotak(23.6,3.8,14,23.8,6,13.5);
kotak(23.4,3.8,14.3,23.9,4,13.2);
//keyboard
kotak(21.8,3.8,12.3,23,4,15.2);
glEnd();
glPopMatrix();
//layar lcd
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[8]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(23.29,4.3,15.3,23.29,6.2,12.4);
glEnd();
glPopMatrix();
//cpu
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[4]);
glBegin(GL_QUADS);
glColor3f(0.3f,0.3f,0.3f);
kotak(21.49,3.8,11.8,21.5,6,10.8);
glEnd();
glPopMatrix();
//kursi
//alas
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glColor3f(0.1f,0.0f,0.0f);
kotak(18,2.2,15.5,20.8,2.5,12.8);
//kiri depan
kotak(20.5,0.5,15.5,20.8,2.5,15.2);
//kanan depan
kotak(20.5,0.5,13.1,20.8,2.5,12.8);
//kanan belakang
kotak(18,0.5,13.1,18.3,5.2,12.8);
//kiri belakang
kotak(18,0.5,15.5,18.3,5.2,15.2);
//senderan
kotak(18,3.8,15.5,18.2,4.9,12.8);
glEnd();
glPopMatrix();
//kasur
//rangka alas
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(1.1,1.4,15.5,13.4,3,8.7);
//kaki 1
kotak(0.5,0.5,15.6,1.2,6,14.9);
//kaki 2
kotak(0.5,0.5,9.4,1.1,6,8.7);
//kaki 3
kotak(12.9,0.5,9.4,13.6,5,8.7);
//kaki 4
kotak(12.9,0.5,15.6,13.6,5,14.9);
//penyangga depan
kotak(0.6,3,15.4,1,5.1,8.9);
//penyangga belakang
kotak(12.9,1.4,15.4,13.6,4.5,8.9);
glEnd();
glPopMatrix();
//kasurnya
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(1.1,2.5,15.4,13.4,3.5,9);
//bantal
kotak(1.3,3.5,14.4,4,4,10);
//selimut
glColor3f(0.1f,0.1f,0.1f);
kotak(5,3.5,15.4,13.4,3.7,9);
//kanan
kotak(5,3,9,13.4,3.6,8.9);
//kiri
kotak(5,3,15.5,13.4,3.6,15.4);
glEnd();
glPopMatrix();
//lukisan atas kasur
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[9]);
glBegin(GL_QUADS);
glColor3f(1.0f,1.0f,1.0f);
kotak(0.6,6.6,15.5,0.61,8.8,8.9);
glColor3f(0.0f,0.0f,0.0f);
kotak(0.5,6.4,15.7,0.6,9,8.7);
glEnd();
glPopMatrix();
//lemari kecil
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(1.2f,1.2f,1.2f);
kotak(0.5,0.8,8.5,4,4.5,4.7);
//kaki kiri
kotak(0.5,0.5,8.5,4.3,4.9,8.3);
//kaki kanan
kotak(0.5,0.5,4.5,4.3,4.9,4.7);
//pegangan
kotak(4.2,2.1,6.9,4.3,2.3,6.2);
kotak(4.2,3.9,6.9,4.3,4.1,6.2);
glEnd();
glPopMatrix();
//lacinya
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glColor3f(0.3f,0.1f,0.1f);
kotak(4,1,8.2,4.2,2.5,4.9);
kotak(4,2.7,8.2,4.2,4.3,4.9);
glEnd();
glPopMatrix();
//lemari pakaian
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.0f,1.0f);
kotak(16,0.6,3.5,23.8,8.5,0.5);
//kanan
kotak(23.8,0.5,3.7,24,8.7,0.5);
//kiri
kotak(15.8,0.5,3.7,16,8.7,0.5);
//gagang pintu kiri
glColor3f(1.1f,1.0f,1.0f);
kotak(19.3,4.5,3.9,19.5,5.7,3.7);
//gagang pintu kanan
kotak(20.3,4.5,3.9,20.5,5.7,3.7);
glEnd();
glPopMatrix();
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glColor3f(0.2f,0.1f,0.1f);
//pintu kiri
kotak(16.2,0.9,3.7,19.7,8.3,3.5);
//pintu kanan
kotak(20.1,0.9,3.7,23.6,8.3,3.5);
glEnd();
glPopMatrix();
//lukisan singa
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[5]);
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,0.0f);
kotak(9.2,2.8,0.55,13.2,8.2,0.5);
glColor3f(1.1f,1.0f,1.0f);
kotak(9.4,3,0.6,13,8,0.55);
glEnd();
glPopMatrix();
//ac
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, texture[10]);
glBegin(GL_QUADS);
glColor3f(1.1f,1.1f,1.1f);
kotak(0.55,8.45,8.2,1.2,9.7,4.5);
glColor3f(0.0f,0.0f,0.0f);
kotak(1.2,8.5,8.2,1.25,8.45,4.5);
kotak(1.2,8.6,8.1,1.25,8.62,4.6);
kotak(1.2,9.58,8.1,1.25,9.6,7);
kotak(1.2,9.52,8.2,1.25,9.54,6.5);
kotak(0.55,8.39,8.1,1.15,8.4,4.6);
glEnd();
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void reshape (int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, 1.0 * (GLfloat) w / (GLfloat) h, 1.0, 40.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (1024, 600);
glutInitWindowPosition (20, 75);
glutCreateWindow ("Kamar 2 - Saiful Pahmi");
cout<<"\\nTugas OpenGL - Interior Rumah"<<endl;
cout<<"================================"<<endl<<endl;
cout<<"Kamar 2 - Saiful Pahmi"<<endl;
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}