0% found this document useful (0 votes)
4 views5 pages

Assignment 2 - GUI House

The document is a C++ OpenGL program that creates a 3D scene featuring a house with a roof, windows, a door, a chimney, and a tree. It includes functions for initializing lighting, handling keyboard input for camera movement, and rendering the various components of the house. The main function sets up the GLUT window and enters the rendering loop.

Uploaded by

Alexandru Takacs
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views5 pages

Assignment 2 - GUI House

The document is a C++ OpenGL program that creates a 3D scene featuring a house with a roof, windows, a door, a chimney, and a tree. It includes functions for initializing lighting, handling keyboard input for camera movement, and rendering the various components of the house. The main function sets up the GLUT window and enters the rendering loop.

Uploaded by

Alexandru Takacs
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

#include <GL/glut.

h>

float cameraAngleX = 0.0f;


float cameraAngleY = 0.0f;
float cameraDistance = 7.5f;

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();

int main(int argc, char** argv) {


glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("casa caselor");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutSpecialFunc(specialKeys);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
initLighting();
glutMainLoop();
return 0;
}

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 reshape(int w, int h) {


if (h == 0) h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float aspectRatio = (float)w / (float)h;
gluPerspective(45.0f, aspectRatio, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y) {


switch (key) {
case 27: exit(0); break;
case 'w': cameraDistance -= 0.5f; if (cameraDistance < 3.0f) cameraDistance
= 3.0f; break;
case 's': cameraDistance += 0.5f; break;
}
glutPostRedisplay();
}

void specialKeys(int key, int x, int y) {


const float angleStep = 0.05f;
switch (key) {
case GLUT_KEY_LEFT: cameraAngleY -= angleStep; break;
case GLUT_KEY_RIGHT: cameraAngleY += angleStep; break;
case GLUT_KEY_UP: cameraAngleX += angleStep; if (cameraAngleX > 1.5f)
cameraAngleX = 1.5f; break;
case GLUT_KEY_DOWN: cameraAngleX -= angleStep; if (cameraAngleX < -1.5f)
cameraAngleX = -1.5f; break;
}
glutPostRedisplay();
}

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();
}

You might also like