	
#include <iostream.h>
	
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>


GLfloat casa[14][3]={
	{0.,0.,13.5}, 
	{4.,0.,13.5},
	{4., 3., 13.5},
	{2.,4.,13.5},
	{0.,3.,13.5}, 
	{0.,0.,7.5},
	{4.,0.,7.5},
	{4.,3.,7.5},
	{2.,4.,7.5},
        {0.,3.,7.5}, 
         {1.,0.,13.5},
          {2.,0.,13.5},
          {2.,2.,13.5},
          {1.,2.,13.5} };


int faceRefs[6][5]= {
	{0, 1, 2, 3,4},
	{5, 9, 8, 7, 6},
	{1, 6, 7, 2,-1},
	{5, 0, 4, 9,-1},
	{4, 3, 8, 9,-1},
	{3, 2, 7, 8,-1} };


void buildCasaList(void)
{
	GLfloat x, y, z;
	

	glNewList(1, GL_COMPILE);

			for (int i=0; i<6; i++) {
		               glBegin(GL_POLYGON);
				x=casa[faceRefs[i][0]][0];
				y=casa[faceRefs[i][0]][1];
				z=casa[faceRefs[i][0]][2];
				glVertex3f(x, y, z);
				x=casa[faceRefs[i][1]][0];
				y=casa[faceRefs[i][1]][1];
				z=casa[faceRefs[i][1]][2];
				glVertex3f(x, y, z);
				x=casa[faceRefs[i][2]][0];
				y=casa[faceRefs[i][2]][1];
				z=casa[faceRefs[i][2]][2];
				glVertex3f(x, y, z);
				x=casa[faceRefs[i][3]][0];
				y=casa[faceRefs[i][3]][1];
				z=casa[faceRefs[i][3]][2];
				glVertex3f(x, y, z);
                                if(faceRefs[i][4] != -1){
				x=casa[faceRefs[i][4]][0];
				y=casa[faceRefs[i][4]][1];
				z=casa[faceRefs[i][4]][2];
				glVertex3f(x, y, z);
                                }
		               glEnd();	
			}
	glColor3f(1.0f,0.0f,0.0f);
            glBegin(GL_QUADS);
		x=casa[10][0];
		y=casa[10][1];
		z=casa[10][2];
                glVertex3f(x,y,z);
		x=casa[11][0];
		y=casa[11][1];
		z=casa[11][2];
                glVertex3f(x,y,z);
		x=casa[12][0];
		y=casa[12][1];
		z=casa[12][2];
                glVertex3f(x,y,z);
		x=casa[13][0];
		y=casa[13][1];
		z=casa[13][2];
                glVertex3f(x,y,z);
               glEnd();


	glEndList();	
}

void renderScene(void)
{
	glClearColor(0.0, 0.0, 0.0, 1.0);

	glClear(GL_COLOR_BUFFER_BIT);

	glColor3f(0.0, 0.0, 1.0);

	glCallList(1);

	glFlush();

	glutSwapBuffers();
}

void reshapeFunction(int width, int height)
{

	glViewport(0, 0, (GLint)width, (GLint)height);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
    
	glOrtho(-20.5, 20.5, -2.5, 15.5, 50.0, -50.0);
    
	glMatrixMode(GL_MODELVIEW);
}

void idleFunction(void)
{

	glRotatef(0.1f, 0.0, 1.0, 1.0);

	renderScene();
}


int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(200, 200); 
	glutInitWindowPosition (100, 100);
	
	glutCreateWindow("Casa");
	glutReshapeFunc(reshapeFunction);
	
	
	buildCasaList();
	glutDisplayFunc(renderScene);
	glutIdleFunc(idleFunction);
	 
	glutMainLoop();
	
	return 0;  
}
