In this article, we will discuss how to create a front-facing view of a hut in OpenGL using two basic shapes i.e. triangle and rectangle.
Approach: Follow the steps below to solve the problem:
- Initialize the toolkit using the function glutInit (&argc, argv).
- Set the display mode and specify the color scheme using the function glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB).
- Specify the window size using the function glutInitWindowSize(1200, 740).
- Set the starting position for the window using the function glutInitWindowPosition (0, 0).
- Initialize the window and set the title using the function glutCreateWindow(“Basic hut like structure”).
- Initialize the myInit() function and perform the following steps:
- Set the background color to orange using the function glClearColor(1.0, 0.5, 0.0, 1.0).
- Specify the display area using the function gluOrtho2D(0.0, 400.0, 0.0, 400.0).
- Initialize the myDisplay() function and perform the following steps:
- Clear the screen using the function glClear(GL_COLOR_BUFFER_BIT).
- The rectangular part of the hut can be drawn using the function glPointSize(4.0).
- Set the drawing color to glColor3f(0.5f, 0.5f, 0.5f).
- Create the 2 windows, the door, the top triangle, and the main rectangle of the house using the polygon command and setting their vertices by using the functions:
- glBegin(GL_POLYGON);
- glVertex2i ( x, y );
- Color the polygons in the above steps using the function glColor3f(R, G, B).
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <GL\glut.h> #include <iostream> #include <windows.h> using namespace std;
// Function to initialize the drivers void myInit( void )
{ // Clear all the screen color
glClearColor(1.0, 0.5, 0.0, 1.0);
// Sets background color to orange
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Specify the display area
gluOrtho2D(0.0, 400.0, 0.0, 400.0);
} // Function to display the Hut like // structure on the console void myDisplay( void )
{ // Clear the screen buffer
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(4.0);
// Rectangular part of hut
glColor3f(0.5f, 0.5f, 0.5f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(40, 40);
glVertex2i(320, 40);
glVertex2i(40, 200);
glVertex2i(320, 200);
glVertex2i(40, 200);
glVertex2i(40, 40);
glVertex2i(320, 200);
glVertex2i(320, 40);
glEnd();
// Right Window Update
glColor3f(1.0f, 0.0f, 0.0f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(220, 60);
glVertex2i(300, 60);
glVertex2i(220, 150);
glVertex2i(300, 150);
glVertex2i(220, 60);
glVertex2i(220, 150);
glVertex2i(300, 150);
glVertex2i(300, 60);
glEnd();
// Right Window Update part 2
glColor3f(1.0f, 0.0f, 0.0f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(220, 170);
glVertex2i(300, 170);
glVertex2i(220, 190);
glVertex2i(300, 190);
glVertex2i(220, 170);
glVertex2i(220, 190);
glVertex2i(300, 190);
glVertex2i(300, 170);
glEnd();
// Door
glColor3f(0.60f, 0.42f, 0.16f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(130, 40);
glVertex2i(130, 160);
glVertex2i(130, 160);
glVertex2i(180, 160);
glVertex2i(180, 100);
glVertex2i(180, 40);
glVertex2i(120, 40);
glVertex2i(170, 40);
glEnd();
// Create Door Part 2
glColor3f(0.60f, 0.42f, 0.16f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(130, 170);
glVertex2i(130, 180);
glVertex2i(130, 180);
glVertex2i(180, 180);
glVertex2i(180, 170);
glVertex2i(180, 180);
glVertex2i(130, 170);
glVertex2i(180, 170);
glEnd();
// Hut's top triangle part
glColor3f(1.0f, 0.0f, 1.0f);
// Begin the polygon
glBegin(GL_POLYGON);
// Create the polygon
glVertex2i(10, 200);
glVertex2i(340, 200);
glVertex2i(200, 390);
glVertex2i(10, 200);
glVertex2i(200, 390);
glEnd();
// Sends all output to display
glFlush();
} // Driver Code int main( int argc, char ** argv)
{ // Initialize the init function
glutInit(&argc, argv);
// Initialize the toolkit;
glutInitDisplayMode(
GLUT_SINGLE | GLUT_RGB);
// Sets the display mode and
// specify the colour scheme
glutInitWindowSize(1200, 740);
// Specify the window size
glutInitWindowPosition(0, 0);
// Sets the starting position
// for the window
glutCreateWindow( "Basic hut like"
" structure" );
// Creates the window and
// sets the title
glutDisplayFunc(myDisplay);
myInit();
// Additional initializations
glutMainLoop();
// Go into a loop until event
// occurs
return 0;
} |
Output: