Programa para dibujar una Cabaña usando OpenGL en C++

En este artículo, discutiremos cómo crear una vista frontal de una cabaña en OpenGL utilizando dos formas básicas, es decir, un triángulo y un rectángulo.

Enfoque: siga los pasos a continuación para resolver el problema:

  • Inicialice el kit de herramientas usando la función glutInit (&argc, argv) .
  • Establece el modo de visualización y especifica el esquema de color usando la función glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) .
  • Especifique el tamaño de la ventana usando la función glutInitWindowSize(1200, 740) .
  • Establece la posición inicial de la ventana usando la función glutInitWindowPosition (0, 0) .
  • Inicialice la ventana y configure el título usando la función glutCreateWindow («Estructura básica similar a una choza») .
  • Inicialice la función myInit() y realice los siguientes pasos:
    • Establezca el color de fondo en naranja usando la función glClearColor(1.0, 0.5, 0.0, 1.0) .
    • Especifique el área de visualización mediante la función gluOrtho2D(0.0, 400.0, 0.0, 400.0) .
  • Inicialice la función myDisplay() y realice los siguientes pasos:
    • Limpia la pantalla usando la función glClear(GL_COLOR_BUFFER_BIT) .
    • La parte rectangular de la cabaña se puede dibujar usando la función glPointSize(4.0) .
    • Establezca el color de dibujo en glColor3f(0.5f, 0.5f, 0.5f) .
    • Crea las 2 ventanas, la puerta, el triángulo superior y el rectángulo principal de la casa usando el comando polígono y configurando sus vértices usando las funciones:
      • glBegin(GL_POLYGON);
      • glVertex2i (x, y);
    • Colorea los polígonos en los pasos anteriores usando la función glColor3f(R, G, B) .

A continuación se muestra la implementación del enfoque anterior:

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 orang
    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;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por patidarakshay999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *