
In this tutorial, I will show you how to dram 3D house animation using C++ and OpenGL in the command line. The complete source code of 3D House Animation software is given below.
#include <iostream>
#include <stdlib.h>
#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
using namespace std;
void handleKeypress(unsigned char key, int x, int y) {
switch (key) {
case 27:
exit(0);
}
}
void initRendering() {
glEnable(GL_DEPTH_TEST);
}
void handleResize(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (double) w / (double) h, 1.0, 200.0);
}
float _angle = 45.0f;
float _cameraAngle = 0.0f;
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f);
glTranslatef(-1.0f, -1.5f, -2.0f);
glPopMatrix();
glPushMatrix();
glTranslatef(1.0f, 1.0f, 0.0f);
glRotatef(_angle, 0.0f, 1.0f, 0.0f);
glScalef(1.0f, 1.0f, 1.0f);
glColor3f(1.0, 0.25, 1.0);
glColor3f (.5, 0.5, .25);
/* main rec */ glClear (GL_COLOR_BUFFER_BIT);
glColor3f (.5, .75, .35);
glBegin(GL_POLYGON);
glVertex3f (0.2, 0.1, 0.0);
glVertex3f (0.9, 0.1, 0.0);
glVertex3f (0.9, 0.575, 0.0);
glVertex3f (0.2, 0.575, 0.0);
glEnd();
/*back rec*/ glColor3f (.5, .75, .35);
glBegin(GL_POLYGON);
glVertex3f (0.2, 0.1, 0.5);
glVertex3f (0.9, 0.1, 0.5);
glVertex3f (0.9, 0.575, 0.5);
glVertex3f (0.2, 0.575, 0.5);
glEnd();
/* left rec */ glColor3f (.75, 0.75, .25);
glBegin(GL_POLYGON);
glVertex3f (0.2, 0.1, 0.5);
glVertex3f (0.2, 0.1, 0.0);
glVertex3f (0.2, 0.575, 0.0);
glVertex3f (0.2, 0.575, 0.5);
glEnd();
/* right rec */ glColor3f (.75, 0.75, .25);
glBegin(GL_POLYGON);
glVertex3f (0.9, 0.1, 0.5);
glVertex3f (0.9, 0.1, 0.0);
glVertex3f (0.9, 0.575, 0.0);
glVertex3f (0.9, 0.575, 0.5);
glEnd();
/* left tri */ glColor3f (.5, 0.5, .25);
glBegin(GL_TRIANGLES);
glVertex3f (0.9, 0.575, 0.0);
glVertex3f (0.9, 0.575, 0.5);
glVertex3f (0.9, 0.8, 0.25);
glEnd();
/* right tri */ glColor3f (.5, 0.5, .25);
glBegin(GL_TRIANGLES);
glVertex3f (0.2, 0.575, 0.0);
glVertex3f (0.2, 0.575, 0.5);
glVertex3f (0.2, 0.8, 0.25);
glEnd();
/* roof */ glColor3f (.55, 0.35, .2);
glBegin(GL_POLYGON);
glVertex3f (0.2, 0.575, 0.0);
glVertex3f (0.9, 0.575, 0.0);
glVertex3f (0.9, 0.8, 0.25);
glVertex3f (0.2, 0.8, 0.25);
glEnd();
/*back roof */ glColor3f (.55, 0.35, .2);
glBegin(GL_POLYGON);
glVertex3f (0.2, 0.575, 0.5);
glVertex3f (0.9, 0.575, 0.5);
glVertex3f (0.9, 0.8, 0.25);
glVertex3f (0.2, 0.8, 0.25);
glEnd();
/* door */ glColor3f (.15, 0.2, .3);
glBegin(GL_POLYGON);
glVertex3f (0.47, 0.105, 0.0);
glVertex3f (0.65, 0.105, 0.0);
glVertex3f (0.65, 0.46, 0.0);
glVertex3f (0.47, 0.46, 0.0);
glEnd();
/* window 1 */ glColor3f (.3, 0.2, .1);
glBegin(GL_POLYGON);
glVertex3f (0.72, 0.25, 0.0);
glVertex3f (0.83, 0.25, 0.0);
glVertex3f (0.83, 0.4, 0.0);
glVertex3f (0.72, 0.4, 0.0);
glEnd();
/* window 2 */ glColor3f (.3, 0.2, .1);
glBegin(GL_POLYGON);
glVertex3f (0.27, 0.25, 0.0);
glVertex3f (0.38, 0.25, 0.0);
glVertex3f (0.38, 0.4, 0.0);
glVertex3f (0.27, 0.4, 0.0);
glEnd();
glFlush ();
glPopMatrix();
glutSwapBuffers();
}
void update(int value) {
_angle += 1.0f;
if (_angle > 360) {
_angle -= 360;
}
glutPostRedisplay();
glutTimerFunc(25, update, 0);
}
int main(int argc, char * * argv) {
glutInit( & argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(1000, 800);
glutCreateWindow("3D House Rotate");
initRendering();
glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);
glutTimerFunc(25, update, 0);
glutMainLoop();
return 0;
}If you have been searching for the right note-taking or knowledge management app, you have…
Looking for AnyType alternatives? You're not alone. AnyType has gained popularity as a privacy-focused, local-first…
Notion is a popular all-in-one workspace, but many users seek alternatives for different needs (free…
Logseq is a beloved tool in the personal knowledge management (PKM) community. It's free, open-source,…
Looking for a Webshare alternative? You're not alone. Webshare is a popular proxy service with…
Docker changed software development forever. It made containers accessible, gave developers a simple workflow, and…