Assignment 2 - GUI House
Assignment 2 - GUI House
h>
void display();
void reshape(int w, int h);
void keyboard(unsigned char key, int x, int y);
void specialKeys(int key, int x, int y);
void initLighting();
void drawHouseBase();
void drawRoof();
void drawWindows();
void drawDoor();
void drawChimney();
void drawGround();
void drawTree();
void initLighting() {
glEnable(GL_LIGHT0);
GLfloat light0Pos[] = {0.0f, 5.0f, 5.0f, 1.0f};
GLfloat light0Color[] = {0.6f, 0.6f, 0.6f, 1.0f};
glLightfv(GL_LIGHT0, GL_POSITION, light0Pos);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0Color);
glLightfv(GL_LIGHT0, GL_AMBIENT, light0Color);
glEnable(GL_LIGHT1);
GLfloat lightDirection[] = {0.0f, -1.0f, -1.0f, 0.0f};
GLfloat light1Color[] = {0.8f, 0.8f, 0.7f, 1.0f};
glLightfv(GL_LIGHT1, GL_POSITION, lightDirection);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1Color);
glEnable(GL_LIGHT2);
GLfloat light2Pos[] = {0.0f, 3.0f, 2.0f, 1.0f};
GLfloat spotDirection[] = {0.0f, -1.0f, -1.0f};
GLfloat light2Color[] = {1.0f, 1.0f, 1.0f, 1.0f};
glLightfv(GL_LIGHT2, GL_POSITION, light2Pos);
glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, spotDirection);
glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 30.0f);
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 2.0f);
glLightfv(GL_LIGHT2, GL_DIFFUSE, light2Color);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
float cameraX = cameraDistance * sin(cameraAngleY) * cos(cameraAngleX);
float cameraY = cameraDistance * sin(cameraAngleX);
float cameraZ = cameraDistance * cos(cameraAngleY) * cos(cameraAngleX);
gluLookAt(cameraX, cameraY, cameraZ, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
drawGround();
drawHouseBase();
drawRoof();
drawWindows();
drawDoor();
drawChimney();
drawTree();
glutSwapBuffers();
}
void drawHouseBase() {
glColor3f(0.8f, 0.4f, 0.3f);
glPushMatrix();
glTranslatef(0.0f, 0.5f, 0.0f);
glScalef(3.0f, 2.0f, 2.0f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glNormal3f(0.0f, 0.0f, -1.0f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
glNormal3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glNormal3f(0.0f, 1.0f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
glNormal3f(0.0f, -1.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glEnd();
glPopMatrix();
}
void drawRoof() {
glColor3f(0.6f, 0.4f, 0.2f);
glPushMatrix();
glTranslatef(0.0f, 1.8f, 0.0f);
glBegin(GL_TRIANGLES);
glNormal3f(0.0f, 0.5f, 1.0f);
glVertex3f(-1.7f, -0.3f, 1.1f);
glVertex3f(1.7f, -0.3f, 1.1f);
glVertex3f(0.0f, 0.8f, 0.0f);
glNormal3f(0.0f, 0.5f, -1.0f);
glVertex3f(1.7f, -0.3f, -1.1f);
glVertex3f(-1.7f, -0.3f, -1.1f);
glVertex3f(0.0f, 0.8f, 0.0f);
glEnd();
glBegin(GL_QUADS);
glNormal3f(-1.0f, 0.5f, 0.0f);
glVertex3f(-1.7f, -0.3f, -1.1f);
glVertex3f(-1.7f, -0.3f, 1.1f);
glVertex3f(0.0f, 0.8f, 0.0f);
glVertex3f(0.0f, 0.8f, 0.0f);
glNormal3f(1.0f, 0.5f, 0.0f);
glVertex3f(1.7f, -0.3f, 1.1f);
glVertex3f(1.7f, -0.3f, -1.1f);
glVertex3f(0.0f, 0.8f, 0.0f);
glVertex3f(0.0f, 0.8f, 0.0f);
glNormal3f(0.0f, -1.0f, 0.0f);
glVertex3f(-1.7f, -0.3f, -1.1f);
glVertex3f(1.7f, -0.3f, -1.1f);
glVertex3f(1.7f, -0.3f, 1.1f);
glVertex3f(-1.7f, -0.3f, 1.1f);
glEnd();
glPopMatrix();
}
void drawWindows() {
glColor3f(0.5f, 0.5f, 0.5f);
glPushMatrix();
glTranslatef(-0.7f, 0.6f, 1.01f);
glScalef(0.5f, 0.5f, 0.1f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glEnd();
glPopMatrix();
glPushMatrix();
glTranslatef(0.7f, 0.6f, 1.01f);
glScalef(0.5f, 0.5f, 0.1f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glEnd();
glPopMatrix();
}
void drawDoor() {
glColor3f(0.0f, 0.0f, 0.0f);
glPushMatrix();
glTranslatef(0.0f, -0.2f, 1.01f);
glScalef(0.6f, 1.2f, 0.1f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glEnd();
glPopMatrix();
}
void drawChimney() {
glColor3f(0.6f, 0.4f, 0.2f);
glPushMatrix();
glTranslatef(1.0f, 2.0f, -0.5f);
glScalef(0.3f, 1.0f, 0.3f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, -0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glEnd();
glPopMatrix();
}
void drawGround() {
glColor3f(0.3f, 0.6f, 0.3f);
glPushMatrix();
glTranslatef(0.0f, -0.5f, 0.0f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 1.0f, 0.0f);
glVertex3f(-10.0f, 0.0f, -10.0f);
glVertex3f(-10.0f, 0.0f, 10.0f);
glVertex3f(10.0f, 0.0f, 10.0f);
glVertex3f(10.0f, 0.0f, -10.0f);
glEnd();
glPopMatrix();
}
void drawTree() {
glPushMatrix();
glTranslatef(-3.0f, -0.5f, -3.0f);
glColor3f(0.5f, 0.3f, 0.1f);
glPushMatrix();
glTranslatef(0.0f, 0.5f, 0.0f);
glScalef(0.2f, 1.0f, 0.2f);
glutSolidCube(1.0f);
glPopMatrix();
glColor3f(0.0f, 0.6f, 0.0f);
glPushMatrix();
glTranslatef(0.0f, 1.5f, 0.0f);
glutSolidSphere(0.8f, 10, 10);
glPopMatrix();
glPopMatrix();
}